U
    >vfFY                  8   @   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mZm	Z	 d dl
mZ dd Zdd Zejdd	gd	d
ggejjddd dD edededededgejdddejdddejdddejdddejdddgeded  eded  eded  eded  eded  geddeddeddeddeddgg dd dejdddddddddgfdddddd dd!gfdddddd ddgfdddd!d!d"d!dgfd#ddd d dd dgfd#ddd"d"d d"d!gfd#ddd$d$d d$dgfd#ddd%d%d"d%dgfd&ddd$d$dd$dgfd&ddd%d%d d%d!gfd&ddddd ddgfd&ddd d d"d dgfd'ddd ddd$dgfd'ddd"dd d%d!gfd'ddd$dd ddgfd'ddd%d!d"d dgfd(ddd d d$d dgfd(ddd)d)d d)d*gfd(ddd$d$d d$dgfd(ddd d d)d d*gfgd+d, Zejdd	gd	d
ggejdej ej ejd ejejejggejd-ddd.d/d/ejd0ejd1d1gfddd2d3d3d/dd/d4d4gfddd5d/d/d4d$d4d1d1gfddd.d1d1ejd0ejd/d/gfddd2d4d4d/dd/d3d3gfddd5d1d1d4d$d4d/d/gfd#dd.d d ejd$ejddgfd#dd2d$d$d dd d6d6gfd#dd5d d d6d$d6ddgfd#dd.ddejd$ejd d gfd#dd2d6d6d dd d$d$gfd#dd5ddd6d$d6d d gfd&dd.ddejd$ejddgfd&dd2dddddd7d7gfd&dd5ddd7d$d7ddgfd&dd.ddejd$ejddgfd&dd2d7d7dddddgfd&dd5ddd7d$d7ddgfd'dd.d dejd$ejddgfd'dd2d$dd ddd6d7gfd'dd5d dd6d$d7ddgfd'dd.ddejd$ejd dgfd'dd2d6d7d ddd$dgfd'dd5ddd6d$d7d dgfd(dd.d d ejdejd$d$gfd(dd2ddd d$d ddgfd(dd5d d dddd$d$gfd(dd.d$d$ejdejd d gfd(dd2ddd d$d ddgfd(dd5d$d$dddd d gfgd8d9 Zejdd	gd	d
ggejjdd:d d;D ededejedededejejgejdddejdddejejdddejdddejdddejejgeded  eded  ejeded  eded  eded  ejejgeddeddejeddeddeddejejgg d<d dejd=ddd.dddejdddejejgfddd.dddejd dd!ejejgfddd.dddejd ddejejgfddd.dd!d!ejd"d!dejejgfd#dd.dd d ejdd dejejgfd#dd.dd"d"ejd d"d!ejejgfd#dd.dd$d$ejd d$dejejgfd#dd.dd%d%ejd"d%dejejgfd&dd.dd$d$ejdd$dejejgfd&dd.dd%d%ejd d%d!ejejgfd&dd.dddejd ddejejgfd&dd.dd d ejd"d dejejgfd'dd.dd dejdd$dejejgfd'dd.dd"dejd d%d!ejejgfd'dd.dd$dejd ddejejgfd'dd.dd%d!ejd"d dejejgfd(dd.dd d ejd$d dejejgfd(dd.dd)d)ejd d)d*ejejgfd(dd.dd$d$ejd d$dejejgfd(dd.dd d ejd)d d*ejejgfddd5dddd7dddd7d7gfddd5dd>d>d?d@d>dAd?d?gfddd5dddd7d ddd7d7gfddd5ddAdAd?dBdAd>d?d?gfd#dd5dd d d6dd dd6d6gfd#dd5ddBdBdCd@dBdAdCdCgfd#dd5dd$d$d6d d$dd6d6gfd#dd5ddDdDdCdBdDd>dCdCgfd&dd5dd$d$dEdd$ddEdEgfd&dd5ddDdDd d@dDdAd d gfd&dd5ddddEd dddEdEgfd&dd5dd@d@d dBd@d>d d gfd'dd5dd dd6dd$dd7dEgfd'dd5ddBd>dCd@dDdAd?d gfd'dd5dd$dd6d ddd7dEgfd'dd5ddDdAdCdBd@d>d?d gfd(dd5dd d dd$d dddgfd(dd5dd>d>d dCd>dAd d gfd(dd5dd$d$dd d$dddgfd(dd5ddCdCd d>dCdAd d gfg(dFdG ZejdHdd$d$d$d$d$gfdd%d%d%d%d%gfgdIdJ ZejdKdLdMdNdOdPdQgejdRddgdSdT ZejdUdd#d&d'd(gejdVddgejdWd.d2d5gejdXddgejddYdYdZdYd[gdYejdZejd[ggd\d] ZejdWdd^d_gejdUdd#d&d'd(gejdVddgejdXddgejddYdYdZdYd[gdYejdZejd[gd_ejd`ejd0ggdadb Zdcdd Zejded_d`gd_d_gd d gfd_d_d`d`gd_d`d_d`gdAd dAd gfd_d_d`d`gd_d`d_ejgdAd d ejgfd_d_d`gd_d`ejgdAd ejgfgdfdg Zdhdi Zejdjddgdkdl Zdmdn Z dodp Z!dqdr Z"dsdt Z#dudv Z$dS )w    )datetimeN)	DataFrameNaTSeriesconcatc               	   C   s~   t jg dd} t| }| }d}|| }tjt|d |  W 5 Q R X || }tjt|d |  W 5 Q R X d S )NFZorderedz0Cannot perform rank with non-ordered Categoricalmatch)	pdCategoricalr   Zto_framegroupbypytestraises	TypeErrorrank)catZserdfmsggbgb2 r   B/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/groupby/test_rank.py)test_rank_unordered_categorical_typeerror   s    

r   c                  C   s  t dd} t dd}tjjdddd}tjjdddd}ttjd| |||d}|dd	gj	
 }d
d |dd	gD }t|dd}||j}t || |dd	gj	j
dd}dd |dd	gD }t|dd}||j}t || d S )N
   d      r   i  )size)valuekey1key2r   r   c                 S   s   g | ]\}}|j  qS r   r   r   .0keyZpiecer   r   r   
<listcomp>1   s     z#test_rank_apply.<locals>.<listcomp>axisTpctc                 S   s   g | ]\}}|j jd dqS )Tr'   r    r!   r   r   r   r$   8   s    )tmZrands_arraynprandomrandintr   ZrandnZtaker   r   r   r   Zreindexindexassert_series_equal)Zlev1Zlev2Zlab1Zlab2r   resultexpectedr   r   r   test_rank_apply!   s,    
r1   grpsZquxZquuxvalsc                 C   s$   g | ]}t jd d dd dg|dqS          dtype)r*   arrayr"   r9   r   r   r   r$   C   s   r$   )i8i4i2i1u8Zu4u2u1f8f4f2z
2018-01-02z
2018-01-08z
2018-01-06z
US/PacifictzDc                 C   s   t | d S Nr   typexr   r   r   <lambda>e       rN   )idszties_method,ascending,pct,expZaverageTF       @g      @g      @g?      ?g?g?min      @g333333?maxfirstdenseUUUUUU?UUUUUU?c                 C   s   t | t|}|}t|t|  }t|t jr@t j||jd}t||d}|	dj
|||d}	t|t|  dgd}
t|	|
 d S )Nr8   r#   valr#   )method	ascendingr(   r[   columnsr*   repeatlenlist
isinstanceZndarrayr:   r9   r   r   r   r)   assert_frame_equal)r2   r3   ties_methodr]   r(   expr#   	orig_valsr   r/   exp_dfr   r   r   test_rank_args@   s    Arj   z#ties_method,ascending,na_option,expZkeep      ?   g      @top      @g      @Zbottomg      @g      @c           
      C   sf   t | t|}|t|  }t||d}|dj|||d}t|t|  dgd}	t||	 d S )NrZ   r#   )r\   r]   	na_optionr[   r^   )r*   ra   rb   r   r   r   r)   re   )
r2   r3   rf   r]   ro   rg   r#   r   r/   ri   r   r   r   test_infs_n_nans   s    )
  rp   c                 C   s0   g | ](}t jd d t jdd dt jt jg|dqS r4   )r*   r:   nanr;   r   r   r   r$      s   )rC   rD   rE   c                 C   s   t | d S rI   rJ   rL   r   r   r   rN      rO   z'ties_method,ascending,na_option,pct,expg      ?g      ?g      ?      ?g      ?g      ?g      ?g       @c                 C   s   t | t|}|}t|t|  }t|t jr@t j||jd}t||d}	|		dj
||||d}
t|t|  dgd}t|
| d S )Nr8   rZ   r#   r\   r]   ro   r(   r[   r^   r`   )r2   r3   rf   r]   ro   r(   rg   r#   rh   r   r/   ri   r   r   r   test_rank_args_missing   s     r
   rt   zpct,expc                 C   s\   t ddddddddddg
dgd d}|dj| d}t |d d	gd
}t|| d S )Nab   r   rZ   r#   r'   r5   r[   r^   r   r   r   r)   re   )r(   rg   r   r/   ri   r   r   r   test_rank_resets_each_group  s    "ry   r9   int64Zint32Zuint64Zuint32float64Zfloat32upperc                 C   s   |r(| d   | dd   } | dd} tdgd dgd d}|d | |d< |d j| ksft|d	 }td
d
d
d
gdgd}|r|d}t	|| d S )Nr   rw   ZUiZUIru      rZ   r[   r#   g      @r^   ZFloat64)
r|   replacer   astyper9   AssertionErrorr   r   r)   re   )r9   r|   r   r/   ri   r   r   r   test_rank_avg_even_vals  s    
r   rf   r]   ro   r(   barfooZbazc                 C   s   t dgd |d}|d  }|d}|j| |||d}| rht dgd dtjdtjd	gd}	nt dgd ddddd	gd}	|	d}
|
j| |||d}t|| d S )
Nr      rZ   r[   r#   rs   r   r5   rw   )	r   Zisnar   r   anyr*   rq   r)   re   )rf   r]   ro   r(   r3   r   maskr   resZdf2r   altr   r   r   test_rank_object_dtype  s    
$
   r   badrw   r5   c              	   C   sN   t dgd |d}d}tjt|d |dj| |||d W 5 Q R X d S )Nr   r   rZ   z3na_option must be one of 'keep', 'top', or 'bottom'r   r#   rs   )r   r   r   
ValueErrorr   r   )rf   r]   ro   r(   r3   r   r   r   r   r   test_rank_naoption_raises  s    
   r   c                  C   s   d} t dddgdtjdgd}|| jjdd}td	tjdgd
d}t|| || jdd}t d
d	tjdgi}t	|| d S )NAr   rw   rR   rQ   r   BTr'   rr   r   name)
r   r*   rq   r   r   r   r   r)   r.   re   )columnr   r/   r0   r   r   r   test_rank_empty_group  s    r   z"input_key,input_value,output_valuec                 C   s>   t | |d}|djddd}t d|i}t|| d S )Nr   r   rW   Tr\   r(   r   rx   )Z	input_keyZinput_valueZoutput_valuer   r/   r0   r   r   r   test_rank_zero_div#  s    r   c                  C   s   t dddgttjjttjjttjjgttdddtgd} | d	 }t dddgtj
dtj
gd}t|| d S )	Nrw   r5   i  )grpint_coldatetimeliker   rR   rQ   )r   r   )r   r*   Ziinforz   rS   rU   r   r   r   r   NaNr)   re   r   r/   r0   r   r   r   test_rank_min_int5  s    r   use_nanc                 C   s   | r
t jnd}tddgddgd|gd|ggddgd}|dgd jdd	d
}| rntddt jt jgdd}ntddddgdd}t|| d S )Nrl   rw   r5   groupr[   r^   rW   Tr   rr   r   rX   rY   )r*   rq   r   r   r   r   r)   r.   )r   Z
fill_valuer   r/   r0   r   r   r   .test_rank_pct_equal_values_on_group_transitionK  s"    	r   c                  C   s   t tddgddgdtddgdd	gd
ddd} | jddd}|jdd}t | d jdd| d jddgdddgd}t|| d S )Nrl   r}   rw   r5   )col1col2r   r7      r6   )col3Zcol4)ru   rv   r%   r   levelr&   ru   rv   )r&   keys)r   r   r   r   r)   re   )r   r   r/   r0   r   r   r   test_rank_multiindexd  s     r   c                  C   s   t ddddgddddgd	d
ddgdddddgd} | jddd}|jdd}t| jd jdd| jd jddgdd}t|| |jdd}||rtd S Nrw   rl   r   r   r5   r}   r7   r6   rk   rn   g      @g      @)r   rw   r5   ru   rv   r-   r   r   r%   )	r   r   r   r   locr)   re   equalsr   )r   r   r   r0   r   r   r   r   test_groupby_axis0_rank_axis1|  s    "
,r   c                  C   s~   t ddddgddddgd	d
ddgdddddgd} | jddd}|jdd}| ddg tj}|d |d< t|| d S r   )r   r   Zcummaxr   r*   r{   r)   re   )r   r   Zcmaxr0   r   r   r   test_groupby_axis0_cummax_axis1  s    "
r   c                  C   s   t dddtjgddtjdddgd d	} | | jd
gjjddd}t	dddtjgtjdddgd dd}t
|| d S )NrR   rQ   rT   )r   r   Z20170101z
US/EasternrF   r}   r   r   T)r]   r(   r   )r-   r   )r   r*   rq   r
   	Timestampr   r-   r   r   r   r)   r.   r   r   r   r   test_non_unique_index  s    r   c                  C   s   t jdddtjddgdd} t jdddtjd	d
gdd}tddddddg| |d}|d}| }|td }t	
|| d S )Nru   rv   cTr   rw   r5   rl   r}   r   r   )r   r   r   r   )r
   r   r*   rq   r   r   r   r   objectr)   re   )r   Zcat2r   r   r   r0   r   r   r   test_rank_categorical  s    
r   )%r   Znumpyr*   r   Zpandasr
   r   r   r   r   Zpandas._testingZ_testingr)   r   r1   markZparametrizer   Z	to_periodrj   infrq   rp   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s  "& "#.2""""""  > "
	  
 $	
	
