o
    ҷhA                     @   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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d  Z/dS )!    )defaultdict)datetime)productN)is_ci_environmentis_platform_windows)NA	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| ||dftdd}|jdd|d< tjdt|}|j	| 
 }|jd d	  d
g |_tt||_|d
  d	9  < ||fS )N)    i         ABCDEFGcolumns   axisleftright)r   nprandomdefault_rngintegerslistsumpermutationleniloccopyr   tolistarangeindex)lowhighnr   ir     r2   L/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/test_sorting.py
left_right"   s   
r4   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 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dS )TestSortingc                 C   sP  t t dt dt df}t d}t||||||||t jddd	}|g d}|g d}| d }| d }|j	
 \}}	t|j	| |j	
d	\}}	t|j	| ttt|g d j}
t|
}
||
 d }| D ]\}}|| ||d d d
  ksJ || |ksJ qt|t|ksJ d S )N  i  i	  r   )	ABCDEFGHvalues)r7   r8   r9   r:   r;   r<   r=   r>   )r>   r=   r<   r;   r:   r9   r8   r7   r?   r   r   )r!   concatenater,   r   r"   r#   standard_normalgroupbyr&   r-   	sortleveltmassert_index_equalr%   maptupler?   comasarray_tuplesafeitemsr(   )selfr8   r7   dflgrgr   r    	exp_index_tupsexpectedkvr2   r2   r3   test_int64_overflow4   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   	from_dictrB   r(   )rK   r?   datagroupedr2   r2   r3   'test_int64_overflow_groupby_large_range\   s   z3TestSorting.test_int64_overflow_groupby_large_rangeaggmeanmedianc           	      C   s  t jd}|ddd}|t|t|d }t ||| f}|t|}|| }t|t	dd}t 
dt|f\|d< |d	< |t	d}t|jjsSJ tjd
d t jt j|dddddD t	dd}tt 
t|dfdd	g|d }tt|| | d S )Nr   i i   )i         abcder   jimjoec                 S   s   g | ]}|  qS r2   )ravel).0arr2   r2   r3   
<listcomp>u   s    zMTestSorting.test_int64_overflow_groupby_large_df_shuffled.<locals>.<listcomp>r   r   rb   r   )names)r   r-   )r!   r"   r#   r$   choicer(   vstackr'   r   r%   zerosrB   r   groupershaper	   from_arraysarray_splitunique
sort_indexrD   assert_frame_equalgetattr)	rK   r_   rsarrr1   rL   grmiresr2   r2   r3   -test_int64_overflow_groupby_large_df_shuffledc   s(   "z9TestSorting.test_int64_overflow_groupby_large_df_shuffledzorder, na_position, expTlastrb   i   n   firstFh   rc   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 )Nrb   d   )ordersna_positiondtype)	r!   nanr%   rZ   r   rD   assert_numpy_array_equalr   intp)rK   orderr   expkeysresultr2   r2   r3   test_lexsort_indexer   s   &z TestSorting.test_lexsort_indexerzascending, na_position, expc                 C   sX   t jt jgd ttd t jgd  dd}t|d||d}tj|t |dd d S )	Nrb   r   Or   	mergesort)kind	ascendingr   F)check_dtype)r!   r   r   r%   rZ   r   rD   r   )rK   r   r   r   rJ   r   r2   r2   r3   test_nargsort   s
   .
zTestSorting.test_nargsortN)__name__
__module____qualname__pytestmarkslowrU   r^   parametrizer|   r%   rZ   r   r   r2   r2   r2   r3   r5   3   s`    
'
&&((
&&((r5   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   sj   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s3J d S )Nr   )r6   r   ABCDEFG1r      G2outerhowi  )r   r!   r"   r#   rA   r%   r   r(   )rK   df1df2r   r2   r2   r3   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 sBJ d S )
Nr   r   r   r    F)check_namesr   r   )r   r(   rD   assert_series_equalr)   r&   name)rK   r4   r   r    outr   r2   r2   r3   !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)inplacer   sort)
r   sort_valuesr   r+   r!   r,   r(   r-   rD   ru   )rK   r4   r   r   r    r   r2   r2   r3   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   rD   ru   r   r+   )rK   r4   r   r    r   r2   r2   r3   $test_int64_overflow_sort_false_order   s
   z.TestMerge.test_int64_overflow_sort_false_orderr   TFc                    s@  d\}}}t tjd|||dfdtdd}|tj	j
}t|s(J t||gdd}t tjd	|||d dfdtdd}tjd
t||}	t|||j|	 gdd}tjdt||d< tjdt||d< tjdt|}	|j|	  }tt||_tjdt|}	|j|	  }tt||_tttt}
}|td D ]\}}|
| |d  q|td D ]\}}|| |d  qg }|
 D ]\ }| tjg}t||D ]\}}| ||f  qq| D ]\ } |
vr$| fdd|D  qdd }t |tdddg d}||}|d  |d  |d  |d  @ tjt|ddd}|| }|||  }|  |! A sv|dksvJ t"||||d}|rtd}t#$||  || j%|dd t#$||| d S )N)r   r   i   r   r   int64r   r   T)ignore_indexr   rc   r   r    rb      c                 3   s    | ]
} t j|f V  qd S N)r!   r   )rh   rvrS   r2   r3   	<genexpr>4  s    
zGTestMerge.test_int64_overflow_one_to_many_none_match.<locals>.<genexpr>c                 S   s$   |  | j } tt| | _| S r   )r   r   r+   r!   r,   r(   r-   )rL   r2   r2   r3   align=  s   zCTestMerge.test_int64_overflow_one_to_many_none_match.<locals>.alignboolr   )r   r    r   r   r   r   r   )r   )&r   r!   r"   r#   r$   astyper%   applyr
   nuniquer?   r   r   rl   r(   r)   rA   r'   r*   r,   r-   r   	set_indexiterrowsappendrJ   getr   r   extendnotnaonesallanyr   rD   ru   r   )rK   r   r   r.   r/   r0   r   rp   r    r1   ldictrdictidxrowvalslvalrvallvr   r   r   jmaskmaskframer{   kcolsr2   r   r3   *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   r2   r2   r2   r3   r      s    



r   zcodes_list, shape)r   r   r   r   r   r   r   r   r   )r   r   rc   r   r   r   r   r   )rb   r   r   r   r   r   rb   rc   )rc   rb   r   '  r   rb   )r   r   c                 C   s>   t | |ddd}t||}t| |D ]
\}}t|| qd S )NT)r   xnull)r   r   ziprD   r   )
codes_listrp   group_indexcodes_list2rV   rW   r2   r2   r3   test_decons\  s
   
r   c                	   @   sp  e Zd Zejdg dg dgejed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gg g ggdd Zejje oPe dddd Zdd Zdd Zdd Zejdddedgeg dded geg d!d"dged#ggd$d% Zejdg d&g d'gdd(ejd)gdd)d(ejgggd*d+ Zejd	d
dgd,d- ZdS ).TestSafeSortzarg, expr   r   r   r   rc   r   r   r   r   rc   baaacbr   aaabbcc                 C   s(   t t|}t|}t|| d S r   )r   r!   r   rD   r   )rK   argr   r   rR   r2   r2   r3   test_basic_sorty  s   
zTestSafeSort.test_basic_sortverifyTFzcodes, exp_codes)r   r   r   r   r   r   r   rc   )r   r   r   r   r   r   r   rc   c           	      C   s\   t g d}t g d}t||d|d\}}t j|t jd}t|| t|| d S )Nr   r   Tuse_na_sentinelr   r   r!   r   r   r   rD   r   )	rK   r   codes	exp_codesr?   rR   r   result_codesexpected_codesr2   r2   r3   
test_codes  s   	
zTestSafeSort.test_codeszRIn CI environment can crash thread with: Windows fatal exception: access violation)reasonc                 C   sf   t g d}t g d}g d}t||dd\}}t jg dt jd}t|| t|| d S )Nr   r   )r   e   f   r   r   r   c   rc   T)r   )r   r   r   r   r   r   r   rc   r   r   )rK   r?   rR   r   r   r   r   r2   r2   r3   test_codes_out_of_bound  s   z$TestSafeSort.test_codes_out_of_boundc                 C   s<   t jg dtd}t|}t jg dtd}t|| d S )N)rW   r   r   rV   r   rW   r   )r   r   r   rV   rW   rW   r!   r   objectr   rD   r   )rK   r?   r   rR   r2   r2   r3   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)rW   r   r   rV   r   )r   r   r   r   r   r   r   )r   r   rV   rW   )r   r   r   r   r   r   r   )r!   r   r   r   r   rD   r   )rK   r?   r   r   r   rR   r   r2   r2   r3   test_mixed_integer_with_codes  s   z*TestSafeSort.test_mixed_integer_with_codesc                 C   s\   t jddt ddgtd}d}tjt|d t| W d    d S 1 s'w   Y  d S )Nr   r   r   r   r   z,'[<>]' not supported between instances of .*match)	r!   r   r   nowr   r   raises	TypeErrorr   )rK   rx   msgr2   r2   r3   test_unsortable  s
   
"zTestSafeSort.test_unsortablezarg, codes, err, msgr   Nz*Only np.ndarray, ExtensionArray, and Index)r   r   r   zOnly list-like objects or None)r   r   r   r   r   zvalues should be uniquec                 C   s@   t j||d t||d W d    d S 1 sw   Y  d S )Nr   )r?   r   )r   r   r   )rK   r   r   errr   r2   r2   r3   test_exceptions  s   	"zTestSafeSort.test_exceptionsr   r   r   r   r   r   r   r   c                 C   s0   t |dd}t|}t |dd}t|| d S )NInt64r   )r   r   rD   assert_extension_array_equal)rK   r   r   rV   r   rR   r2   r2   r3   test_extension_array  s   z!TestSafeSort.test_extension_arrayc                 C   sh   t g ddd}t|g dd|d\}}t g ddd}tj g dtjd}t|| t|| d S )	Nr   r  r   )r   r   r   r   Tr   r   )r   r   r   r   )r   r   r!   r   rD   r  r   )rK   r   rV   r   r   expected_valuesr   r2   r2   r3   test_extension_array_codes  s   z'TestSafeSort.test_extension_array_codes)r   r   r   r   r   r   r!   r   r%   r   r   r   skipifr   r   r   r   r   r   r   
ValueErrorr   r   r  r  r2   r2   r2   r3   r   x  sR    


	

,
r   c                 C   sD   t jd| ddgtd}t|}t jddd| gtd}t|| d S )NrW   rV   r   r   )nulls_fixturer?   r   rR   r2   r2   r3   test_mixed_str_null  s   r	  c                  C   sd   t ddttgdd} g d}t| |g}t|}tt ddttgddg dg}t|| d S )Nr   r   r  r   )r   r   r   r   )r   r   r   r   )r
   r   r	   rq   r   rD   rE   )arr1arr2midxr   rR   r2   r2   r3   test_safe_sort_multiindex  s   r  )0collectionsr   r   	itertoolsr   numpyr!   r   pandas.compatr   r   pandasr   r   r	   r
   r   r   r   pandas._testing_testingrD   pandas.core.algorithmsr   pandas.core.commoncorecommonrH   pandas.core.sortingr   r   r   r   r   fixturer4   r5   r   r   r   tiler   r   r,   r   r   r	  r  r2   r2   r2   r3   <module>   sH    $		
  

i