U
    f/eG                     @   s   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlm  mZ d dlmZmZmZmZmZ G dd	 d	ZG d
d dZdd Z G dd dZ!dd Z"dS )    )defaultdict)datetime)productN)	DataFrame
MultiIndexSeriesarrayconcatmerge)	safe_sort)decons_group_indexget_group_indexis_int64_overflow_possiblelexsort_indexernargsortc                   @   s4   e Zd Zejjdd Zdd Zdd Zdd Z	d	S )
TestSortingc                 C   sv  t t dt dt df}t d}t||||||||t jdd	}|ddddd	d
ddg}|ddd
d	ddddg}| d }| d }|j	 \}}	t
|j| |j	d\}}	t
|j| ttt|ddddd	d
ddg j}
t|
}
||
 d }| D ]<\}}|| ||d d d  ksFt|| |kstqt|t|ksrtd S )N  i  i	  )	ABCDEFGHvaluesr   r   r   r   r   r   r   r   r   r   )npZconcatenatearanger   randomrandngroupbysumindexZ	sortleveltmZassert_index_equallistmaptupler   comZasarray_tuplesafeitemsAssertionErrorlen)selfr   r   dfZlgZrgleftrightZ	exp_index_Ztupsexpectedkv r4   =/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/test_sorting.pytest_int64_overflow   s:    "

$
 zTestSorting.test_int64_overflowc                    s  t d}t||||d}|ddddg}t|t|ksBttjddd	}tj	t|t|d
 }t
||| f}tjt|}|| }t|tdd}tjdt|d \|d< |d< |td}t|jjsttttt  ttt||d |d D ](\}}	}
 | |	 | |
 qt|t ksRttj  tdd fdd}t| |tj t| |tj d S )NiE  )abcdr7   r8   r9   r:   i i   )i         Zabcdecolumns   
   jimjoe)namesc                    sF    fdd}t | | fj}t|ddgd}| S )Nc                    s   t jt | ddS )NZf8Zdtype)r   Zfromiterr&   )r7   funcr4   r5   <lambda>f       zDTestSorting.test_int64_overflow_moar.<locals>.aggr.<locals>.<lambda>rA   rB   )r>   r#   )r   vstackr   Tr   Z
sort_index)rF   farrresrA   rB   mirE   r5   aggre   s     z2TestSorting.test_int64_overflow_moar.<locals>.aggr)ranger   	from_dictr!   r+   r*   r   r   randintchoicerI   permutationr%   r    r   Zgroupershaper   zipr&   r'   appendr   from_tupleskeysr$   assert_frame_equalZmeanZmedian)r,   r   dataZgroupedrL   ir-   Zgrkeyr7   r8   rP   r4   rN   r5   test_int64_overflow_moarF   s,    "$z$TestSorting.test_int64_overflow_moarc                 C   sf  t jgd ttd t jgd  g}t|ddd}ttddttd ttdd }t|t j|t jd t|dd	d}ttdttdd ttdd }t|t j|t jd t|d
dd}ttdddttd ttdd }t|t j|t jd t|d
d	d}ttdttdd ttddd }t|t j|t jd d S )Nr;   d   Tlast)Zordersna_positioni   n   rD   firstFh   r<   r   )	r   nanr%   rQ   r   r$   assert_numpy_array_equalr   intp)r,   rZ   resultexpr4   r4   r5   test_lexsort_indexern   s    &((**z TestSorting.test_lexsort_indexerc                 C   s  t jgd ttd t jgd  }t j|dd}t|dddd}ttdd	ttd ttd	d
 }tj|t |dd t|dddd}ttdttd	d
 ttdd	 }tj|t |dd t|dddd}ttdddttd ttd	d
 }tj|t |dd t|dddd}ttdttd	d
 ttddd }tj|t |dd t|dddd}ttdd	ttd ttd	d
 }tj|t |dd t|dddd}ttdttd	d
 ttdd	 }tj|t |dd t|dddd}ttdddttd ttd	d
 }tj|t |dd t|dddd}ttdttd	d
 ttddd }tj|t |dd d S )Nr;   r`   OrD   	mergesortTra   )kindZ	ascendingrb   rc   rd   FZcheck_dtypere   rf   r<   r   )r   rg   r%   rQ   r   r   r$   rh   )r,   r)   Zitems2rj   rk   r4   r4   r5   test_nargsort   s>    $((**((*   *zTestSorting.test_nargsortN)
__name__
__module____qualname__pytestmarkslowr6   r_   rl   rq   r4   r4   r4   r5   r      s
   
((r   c                   @   s   e Zd Zejjdd ZdS )	TestMergec              
   C   s,  t tjddtddg d}t tjddtddg d}t||dd}t|d	ks^td
\}}}t tj|||dftdd}|j	dd|d< tj
t|}|j|  }	|	jd d  dg |	_tt|	|	_|	d  d9  < t||	dd}
t|
t|ksttj|
d |
d  dd |
jd d d df j	dd}tj|
d |dd |jd kspt|
j|
j dd tt|
|
_dD ]}t|
t||	|dd qt||	ddd}
t||
|j   t|	|ddd}
t|	|
|	j   d}t tj|||dfdtdd}|tjj}t|sJtt||gdd}t tj|||d dfdtdd}	tjt||}t|	|	|j| gdd}	tjt||d< tjt|	|	d< tj
t|}|j|  }tt||_tj
t|	}|	j|  }	tt|	|	_tttt }}|td  D ]\}}|| !|d  qV|	td  D ]\}}|| !|d  qg }|" D ]B\}}|#|tj$g}t%||D ]\}}|!|||f  qҐq|" D ]4\}}||kr|D ]}|!|tj$|f  qqdd }dd }t |tdddg d}
||
}
|
d & |
d & |
d & |
d & @ tj't|
d d!d"}dD ]}|| }||
|  }|( |) A s|dkstd#D ]<}t||	||d}|r|| tj||||d$kd% qqd S )&Nr      ZABCDEFZG1r=   ZG2outer)howi  )i i   i   ABCDEFG   )Zaxisr.   r   r/   F)Zcheck_namesT)Zinplace)r.   r/   rz   inner)r{   sorti   int64)Zignore_indexr?   c                 S   s$   |  | j } tt| | _| S )N)sort_valuesr>   tolistr   r   r+   r#   )r-   r4   r4   r5   align*  s    z3TestMerge.test_int64_overflow_issues.<locals>.alignc                 S   s.   t d}t| |  | | j|dd d S )Nr|   rn   )ro   )r%   r$   r[   copyr   )r-   Zkcolsr4   r4   r5   verify_order/  s
    
 z:TestMerge.test_int64_overflow_issues.<locals>.verify_orderboolrD   )r.   r/   r   rz   )FT)r/   rz   rp   )*r   r   r   r    r%   r
   r+   r*   rS   r"   rU   Zilocr   r>   r   r   r#   r$   Zassert_series_equalnamer   r[   astypeapplyr   Znuniquer   r   r	   rT   r   Z	set_indexZiterrowsrX   r)   getrg   r   ZnotnaZonesallany)r,   Zdf1Zdf2rj   lowhighnr.   r]   r/   outr{   rV   ZldictZrdictidxrowvalsr2   Zlvalrvallvrvr   r   Zjmaskmaskframer   rM   r4   r4   r5   test_int64_overflow_issues   s      
 


   z$TestMerge.test_int64_overflow_issuesN)rr   rs   rt   ru   rv   rw   r   r4   r4   r4   r5   rx      s   rx   c                  C   s   dd } d}t ddddddddgdt jt ddd	dddddgdt jt d
dddddd
d	gdt jg}| || d}t t jdt jdd
t t jdt jdd
g}| || d S )Nc                 S   s>   t | |ddd}t||}t| |D ]\}}t|| q$d S )NT)r   Zxnull)r   r   rW   r$   rh   )
codes_listrV   Zgroup_indexZcodes_list2r7   r8   r4   r4   r5   testitP  s    
ztest_decons.<locals>.testit)r<   r;      r   r}   r?      r`   r<   r;   )'  r   r   rD   )r   Ztiler   r   r   )r   rV   r   r4   r4   r5   test_deconsO  s    """
r   c                   @   s   e Zd Zdd Zejdddgdd Zejdd	d
gdd Zdd Z	dd Z
dd Zdd Zdd Zejdddgejdd	d
gdd ZdS )TestSafeSortc                 C   s   dddddg}t |}tdddddg}t|| td}t |}tjtddd	}t|| g }t |}tg }t|| d S )
Nr   r}   r?   r   r<   ZbaaacbZaaabbcobjectrD   )r   r   r   r$   rh   r%   r,   r   rj   r1   r4   r4   r5   test_basic_sorth  s    
zTestSafeSort.test_basic_sortverifyTFc              	   C   s"  dddddg}t dddddg}ddddddddg}t|||d\}}t jddddddddgt jd}t|| t|| ddddddd	dg}t||d	|d
\}}t jddddddd	dgt jd}t|| t|| g }t|||d\}}t jg t jd}t|| t|| d S )Nr   r}   r?   r   r<   r   )r   rD   c   na_sentinelr   r   r   r   ri   r$   rh   )r,   r   r   r1   codesrj   result_codesexpected_codesr4   r4   r5   
test_codesx  s"      zTestSafeSort.test_codesr   r   r   c              	   C   s   dddddg}t dddddg}ddddddddg}t|||d	\}}t jd||ddd|dgt jd
}t|| t|| d S )Nr   r}   r?   r   r<   e   f   r   )r   rD   r   )r,   r   r   r1   r   rj   r   r   r4   r4   r5   test_codes_out_of_bound  s     z$TestSafeSort.test_codes_out_of_boundc                 C   s   t jddddddgtd}t|}t jddddddgtd}t|| t jddddgtd}dddddddg}t||\}}t jddddgtd}t jdddddddgt jd}t|| t|| d S )	Nr8   r}   r   r7   rD   r?   r   r   )r   r   r   r   r$   rh   ri   )r,   r   rj   r1   r   r   r   r4   r4   r5   test_mixed_integer  s    zTestSafeSort.test_mixed_integerc                 C   sB   ddddddg}t |}tjddddddgtd}t|| d S )Nr8   r}   r   r7   rD   )r   r   r   r   r$   rh   r   r4   r4   r5   test_mixed_integer_from_list  s    z)TestSafeSort.test_mixed_integer_from_listc              	   C   sF   t jddt ddgtd}d}tjt|d t| W 5 Q R X d S )Nr}   r?   r   r   rD   zJunorderable types: .* [<>] .*|'[<>]' not supported between instances of .*match)	r   r   r   nowr   ru   raises	TypeErrorr   )r,   rL   msgr4   r4   r5   test_unsortable  s
    zTestSafeSort.test_unsortablec              	   C   s   t jtdd tdd W 5 Q R X t jtdd tdddgdd W 5 Q R X t jtd	d tddddgddgd W 5 Q R X d S )
Nz"Only list-like objects are allowedr   r}   )r   zOnly list-like objects or Noner   r?   )r   r   zvalues should be unique)ru   r   r   r   
ValueError)r,   r4   r4   r5   test_exceptions  s    zTestSafeSort.test_exceptionsc                 C   s<   t dddgdd}t|}t dddgdd}t|| d S )Nr}   r   r?   Int64rD   )r   r   r$   assert_extension_array_equal)r,   r7   rj   r1   r4   r4   r5   test_extension_array  s    z!TestSafeSort.test_extension_arrayc                 C   st   t dddgdd}t|dd|dg||d\}}t dddgdd}tj dd|dgtjd}t|| t|| d S )Nr}   r   r?   r   rD   r   r   )r   r   r   ri   r$   r   rh   )r,   r   r   r7   rj   r   Zexpected_valuesr   r4   r4   r5   test_extension_array_codes  s     
  
z'TestSafeSort.test_extension_array_codesN)rr   rs   rt   r   ru   rv   Zparametrizer   r   r   r   r   r   r   r   r4   r4   r4   r5   r   g  s   


r   c                  C   sH   t jdt jddgtd} t| }t jt jdddgtd}t|| d S )Nr8   r7   rD   )r   r   rg   r   r   r$   rh   )r   rj   r1   r4   r4   r5   test_mixed_str_nan  s    r   )#collectionsr   r   	itertoolsr   Znumpyr   ru   Zpandasr   r   r   r   r	   r
   Zpandas._testingZ_testingr$   Zpandas.core.algorithmsr   Zpandas.core.commoncorecommonr(   Zpandas.core.sortingr   r   r   r   r   r   rx   r   r   r   r4   r4   r4   r5   <module>   s     	 " u