a
    GGbD                     @   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
 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  ej!d	d
 Z"G dd dZ#G dd dZ$ej%&de'g dd(ej)e'g dd(ej)e'g dd(ej)gdge'ej*dej)dde'ej*dej)ddgdggdd Z+G dd dZ,dd Z-dS )    )defaultdict)datetime)productN)is_ci_environmentis_platform_windows)	DataFrame
MultiIndexSeriesarrayconcatmerge)	safe_sort)decons_group_indexget_group_indexis_int64_overflow_possiblelexsort_indexernargsortc                  C   s   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  < ||fS )
N)    i      ABCDEFGcolumns   Zaxisleftright)r   nprandomrandintlistsumpermutationleniloccopyr   tolistarangeindex)lowhighnr   ir    r.   8lib/python3.9/site-packages/pandas/tests/test_sorting.py
left_right!   s    
 r0   c                   @   s  e Zd Zejjdd Zdd Zejdddgdd	 Z	ejd
dde
edde
ed e
edd gdde
ede
edd e
edd gdde
eddde
ed e
edd gdde
ede
edd e
eddd ggdd Zejddde
edde
ed e
edd e
gdde
ede
edd e
edd e
gdde
eddde
ed e
edd e
gdde
ede
edd e
eddd e
gdde
edde
ed e
edd dd gdde
ede
edd e
edd dd gdde
eddde
ed e
edd dd gdde
ede
edd e
eddd dd ggdd ZdS ) TestSortingc                 C   sN  t t dt dt df}t d}t||||||||t jdd	}|g d}|g d}| d }| d }|j	 \}}	t
|j| |j	d\}}	t
|j| ttt|g d j}
t|
}
||
 d }| D ]8\}}|| ||d d d	  ks"J || |ksJ qt|t|ksJJ d S )
N  i  i	  )	ABCDEFGHvalues)r3   r4   r5   r6   r7   r8   r9   r:   )r:   r9   r8   r7   r6   r5   r4   r3   r;   r   r   )r   Zconcatenater(   r   r   randngroupbyr"   r)   Z	sortleveltmZassert_index_equalr!   maptupler;   comZasarray_tuplesafeitemsr$   )selfr4   r3   dfZlgZrgr   r   Z	exp_index_Ztupsexpectedkvr.   r.   r/   test_int64_overflow1   s:    "


 zTestSorting.test_int64_overflowc                 C   sB   t d}t||||d}|g d}t|t|ks>J d S )NiE  )abcd)ranger   Z	from_dictr=   r$   )rC   r;   dataZgroupedr.   r.   r/   'test_int64_overflow_groupby_large_rangeY   s    z3TestSorting.test_int64_overflow_groupby_large_rangeaggZmeanZmedianc                    s~  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sJ tttt }}ttt||d	 |d
 D ]&\}}	}
|| |	 || |
 qt|t|ksJ tj| tdd} fdd}t || || fj}t|d	d
g|d }tt|  | d S )Ni i   )i         Zabcder      
   jimjoe)namesc                    s   t jttt  | ddS )NZf8Zdtype)r   Zfromiterr?   getattr)rJ   rQ   r.   r/   <lambda>y       zKTestSorting.test_int64_overflow_groupby_large_df_shuffled.<locals>.<lambda>)r   r)   )r   r   r    choicer$   Zvstackr#   r   r!   r<   r=   r   Zgroupershaper   zipr?   r@   appendr   Zfrom_tupleskeysr;   TZ
sort_indexr>   assert_frame_equalrZ   )rC   rQ   arrr-   rD   ZgrrV   rW   keyrJ   rK   mifresr.   r[   r/   -test_int64_overflow_groupby_large_df_shuffled`   s&    "$ z9TestSorting.test_int64_overflow_groupby_large_df_shuffledzorder, na_position, expTZlastrR   i   n   firstFh   rS   r   c                 C   sP   t jgd ttd t jgd  g}t|||d}t|t j|t jd d S )NrR   d   )Zordersna_positionrY   )	r   nanr!   rN   r   r>   assert_numpy_array_equalr
   intp)rC   orderrp   exprb   resultr.   r.   r/   test_lexsort_indexer   s    &z TestSorting.test_lexsort_indexerz ascending, na_position, exp, boxc                 C   s   t j| ddS NOrY   r   r
   xr.   r.   r/   r\      r]   zTestSorting.<lambda>c                 C   s   t j| ddS rx   rz   r{   r.   r.   r/   r\      r]   c                 C   s   t j| ddS rx   rz   r{   r.   r.   r/   r\      r]   c                 C   s   t j| ddS rx   rz   r{   r.   r.   r/   r\      r]   c                 C   sR   |t jgd ttd t jgd  }t|d||d}tj|t |dd d S )NrR   ro   	mergesort)kind	ascendingrp   F)Zcheck_dtype)r   rq   r!   rN   r   r>   rr   r
   )rC   r   rp   ru   boxrB   rv   r.   r.   r/   test_nargsort   s
    7(
zTestSorting.test_nargsortN)__name__
__module____qualname__pytestmarkslowrI   rP   parametrizerj   r!   rN   rw   r   r.   r.   r.   r/   r1   0   s   
'
&&((
&&((&&((5r1   c                   @   s   e Zd Zdd Zejjdd Zejjejdg ddd Z	ejjd	d
 Z
ejjejdg dejdddgdd ZdS )	TestMergec                 C   sb   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^J d S )
Nr2   r   ZABCDEFZG1r   ZG2outerhowi  )r   r   r   r<   r!   r   r$   )rC   Zdf1Zdf2rv   r.   r.   r/   test_int64_overflow_outer_merge   s      z)TestMerge.test_int64_overflow_outer_mergec                 C   s   |\}}t ||dd}t|t|ks*J tj|d |d  dd |jd d d df jdd	}tj|d |dd |jd u sJ d S )
Nr   r   r   r   F)Zcheck_namesr   r   )r   r$   r>   Zassert_series_equalr%   r"   name)rC   r0   r   r   outrv   r.   r.   r/   !test_int64_overflow_check_sum_col   s    z+TestMerge.test_int64_overflow_check_sum_colr   )r   r   r   innerc              	   C   sV   |\}}t ||dd}|j|j dd tt||_t	|t |||dd d S )Nr   r   T)Zinplacer   sort)
r   sort_valuesr   r'   r   r(   r$   r)   r>   rd   )rC   r0   r   r   r   r   r.   r.   r/   test_int64_overflow_how_merge   s
    z'TestMerge.test_int64_overflow_how_mergec                 C   sX   |\}}t ||ddd}t|||j   t ||ddd}t|||j   d S )Nr   Fr   )r   r>   rd   r   r'   )rC   r0   r   r   r   r.   r.   r/   $test_int64_overflow_sort_false_order  s
    z.TestMerge.test_int64_overflow_sort_false_orderr   TFc                 C   s&  d\}}}t tj|||dfdtdd}|tjj	}t
|sJJ 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\}}||
vr|D ]}||tj|f  qqdd }t |tdd	d
g d}||}|d	  |d
  |d	  |d
  @ tjt|ddd}|| }|||  }| | A s|dksJ t ||||d}|rtd}t!"||  || j#|dd t!"||| d S )N)r   r   i   r   int64r   r   T)Zignore_indexrT   r   r   c                 S   s$   |  | j } tt| | _| S N)r   r   r'   r   r(   r$   r)   )rD   r.   r.   r/   alignS  s    zCTestMerge.test_int64_overflow_one_to_many_none_match.<locals>.alignboolrY   )r   r   r   r   r   r   r}   )r~   )$r   r   r   r    astyper!   Zapplyr	   Znuniquer;   r   r   r^   r$   r%   r<   r#   r&   r(   r)   r   Z	set_indexZiterrowsra   rB   getrq   r   ZnotnaZonesallanyr   r>   rd   r   )rC   r   r   r*   r+   r,   r   r_   r   r-   ZldictZrdictidxrowZvalsrG   ZlvalZrvalZlvrvr   r   Zjmaskmaskframeri   Zkcolsr.   r.   r/   *test_int64_overflow_one_to_many_none_match  s    



 z4TestMerge.test_int64_overflow_one_to_many_none_matchN)r   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r      s   



r   zcodes_list, shape)r   r   rT      r   r   rT   r   ro   )r   rT   rS   r   r   r   rT   r   )rR   r   r   rT   r   r   rR   rS   )rS   rR      '  rY   rR   )r   r   c                 C   s>   t | |ddd}t||}t| |D ]\}}t|| q$d S )NT)r   Zxnull)r   r   r`   r>   rr   )Z
codes_listr_   Zgroup_indexZcodes_list2rJ   rK   r.   r.   r/   test_deconsr  s    
r   c                	   @   s  e Zd Zejdg dg dgedejede	dgg g ggdd Z
ejd	d
dgejdg dg ddgg dg ddgg g dggdd Zejje oe ddejdddgdd Zejddd egdd Zdd  Zd!d" Zejd#d$d%ed&gg d'd$ed(gg d)d*d$ged+ggd,d- Zejdg d.g d/gd$d0ejd1gd$d1d0ejgggd2d3 Zejd	d
dgejdddgd4d5 Zd%S )6TestSafeSortzarg, expr   r   rT   r   rS   r   r   rT   r   rS   ZbaaacbZaaabbcrY   c                 C   s"   t |}t|}t|| d S r   )r   r   r
   r>   rr   )rC   argru   rv   rF   r.   r.   r/   test_basic_sort  s    	
zTestSafeSort.test_basic_sortverifyTFzcodes, exp_codes, na_sentinel)r   r   r   rT   r   r   r   rS   )r   r   r   rT   r   r   r   rS   r   )r   r   r   rT   r   r   c   rS   )r   r   r   rT   r   r   r   rS   r   c           
      C   sV   g d}t g d}t||||d\}}t j|t jd}	t|| t||	 d S )Nr   r   na_sentinelr   rY   r   r
   r   rs   r>   rr   )
rC   r   codesZ	exp_codesr   r;   rF   rv   result_codesexpected_codesr.   r.   r/   
test_codes  s    

zTestSafeSort.test_codeszRIn CI environment can crash thread with: Windows fatal exception: access violation)reasonr   c              	   C   sl   g d}t g d}g d}t|||d\}}t jd||ddd|dgt jd	}t|| t|| d S )
Nr   r   )r   e   f   rT   r   r   r   rS   )r   r   rT   r   rS   rY   r   )rC   r   r;   rF   r   rv   r   r   r.   r.   r/   test_codes_out_of_bound  s    z$TestSafeSort.test_codes_out_of_boundr   c                 C   s   t j| tdS )NrY   )r   r
   objectr{   r.   r.   r/   r\     r]   zTestSafeSort.<lambda>c                 C   s6   |g d}t |}tjg dtd}t|| d S )N)rK   r   r   rJ   r   rK   )r   r   r   rJ   rK   rK   rY   )r   r   r
   r   r>   rr   )rC   r   r;   rv   rF   r.   r.   r/   test_mixed_integer  s    zTestSafeSort.test_mixed_integerc                 C   sj   t jg dtd}g d}t||\}}t jg dtd}t jg dt jd}t|| t|| d S )N)rK   r   r   rJ   rY   )r   r   rT   r   r   r   r   )r   r   rJ   rK   )r   r   r   rT   r   r   r   )r   r
   r   r   rs   r>   rr   )rC   r;   r   rv   r   rF   r   r.   r.   r/   test_mixed_integer_with_codes  s    z*TestSafeSort.test_mixed_integer_with_codesc                 C   sZ   t jddt ddgtd}d}tjt|d t| W d    n1 sL0    Y  d S )Nr   rT   r   r   rY   z,'[<>]' not supported between instances of .*match)	r   r
   r   Znowr   r   raises	TypeErrorr   )rC   re   msgr.   r.   r/   test_unsortable  s    zTestSafeSort.test_unsortablezarg, codes, err, msgr   Nz"Only list-like objects are allowed)r   r   rT   zOnly list-like objects or None)r   r   rT   r   r   zvalues should be uniquec                 C   s>   t j||d t||d W d    n1 s00    Y  d S )Nr   )r;   r   )r   r   r   )rC   r   r   errr   r.   r.   r/   test_exceptions  s    	zTestSafeSort.test_exceptionsr   r   rT   r   rT   r   r   rT   c                 C   s0   t |dd}t|}t |dd}t|| d S )NInt64rY   )r
   r   r>   assert_extension_array_equal)rC   r   ru   rJ   rv   rF   r.   r.   r/   test_extension_array  s    z!TestSafeSort.test_extension_arrayc                 C   sp   t g ddd}t|dd|dg||d\}}t g ddd}tj dd|dgtjd}t|| t|| d S )	Nr   r   rY   r   r   rT   r   r   )r
   r   r   rs   r>   r   rr   )rC   r   r   rJ   rv   r   Zexpected_valuesr   r.   r.   r/   test_extension_array_codes  s    
z'TestSafeSort.test_extension_array_codes)r   r   r   r   r   r   r!   r   r
   r   r   r   Zskipifr   r   r   r   r   r   r   
ValueErrorr   rq   r   r   r.   r.   r.   r/   r     sT   


	

,
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 )NrK   rJ   rY   )r   r
   rq   r   r   r>   rr   )r;   rv   rF   r.   r.   r/   test_mixed_str_nan  s    r   ).collectionsr   r   	itertoolsr   Znumpyr   r   Zpandas.compatr   r   Zpandasr   r   r	   r
   r   r   Zpandas._testingZ_testingr>   Zpandas.core.algorithmsr   Zpandas.core.commoncorecommonrA   Zpandas.core.sortingr   r   r   r   r   Zfixturer0   r1   r   r   r   Ztiler   r   r(   r   r   r   r.   r.   r.   r/   <module>   sD    	
 5 

n