o
    ŀg@                     @   sz  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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)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    r0   M/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/test_sorting.py
left_right   s   
r2   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)r5   r6   r7   r8   r9   r:   r;   r<   )r<   r;   r:   r9   r8   r7   r6   r5   r=   r   r   )r   concatenater*   r   r    r!   standard_normalgroupbyr$   r+   	sortleveltmassert_index_equalr#   maptupler=   comasarray_tuplesafeitemsr&   )selfr6   r5   dflgrgr   r   	exp_index_tupsexpectedkvr0   r0   r1   test_int64_overflow/   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_dictr@   r&   )rI   r=   datagroupedr0   r0   r1   'test_int64_overflow_groupby_large_rangeW   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 r0   )ravel).0arr0   r0   r1   
<listcomp>p   s    zMTestSorting.test_int64_overflow_groupby_large_df_shuffled.<locals>.<listcomp>r   r   r`   r   )names)r   r+   )r   r    r!   r"   choicer&   vstackr%   r   r#   zerosr@   r   _groupershaper   from_arraysarray_splitunique
sort_indexrB   assert_frame_equalgetattr)	rI   r]   rsarrr/   rJ   grmiresr0   r0   r1   -test_int64_overflow_groupby_large_df_shuffled^   s(   "z9TestSorting.test_int64_overflow_groupby_large_df_shuffledzorder, na_position, expTlastr`   i   n   firstFh   ra   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 )Nr`   d   )ordersna_positiondtype)	r   nanr#   rX   r   rB   assert_numpy_array_equalr	   intp)rI   orderr   expkeysresultr0   r0   r1   test_lexsort_indexerz   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 )	Nr`   r   Or   	mergesort)kind	ascendingr   F)check_dtype)r   r	   r   r#   rX   r   rB   r   )rI   r   r   r   rH   r   r0   r0   r1   test_nargsort   s
   .
zTestSorting.test_nargsortN)__name__
__module____qualname__pytestmarkslowrS   r\   parametrizerz   r#   rX   r   r   r0   r0   r0   r1   r3   .   s`    
'
&&((
&&((r3   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   )r4   r   ABCDEFG1r      G2outerhowi  )r   r   r    r!   r?   r#   r   r&   )rI   df1df2r   r0   r0   r1   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&   rB   assert_series_equalr'   r$   name)rI   r2   r   r   outr   r0   r0   r1   !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+   rB   rs   )rI   r2   r   r   r   r   r0   r0   r1   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   rB   rs   r   r)   )rI   r2   r   r   r   r0   r0   r1   $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   ra   r   r   r`      c                 3   s    | ]
} t j|f V  qd S N)r   r   )rf   rvrQ   r0   r1   	<genexpr>/  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+   )rJ   r0   r0   r1   align8  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
   rj   r&   r'   r?   r%   r(   r*   r+   r   	set_indexiterrowsappendrH   getr   r   extendnotnaonesallanyr   rB   rs   r   )rI   r   r   r,   r-   r.   r   rn   r   r/   ldictrdictidxrowvalslvalrvallvr   r   r   jmaskmaskframery   kcolsr0   r   r1   *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   r0   r0   r0   r1   r      s    



r   zcodes_list, shape)r   r   r   r   r   r   r   r   r   )r   r   ra   r   r   r   r   r   )r`   r   r   r   r   r   r`   ra   )ra   r`   r   '  r   r`   )r   r   c                 C   s>   t | |ddd}t||}t| |D ]
\}}t|| qd S )NT)r   xnull)r   r   ziprB   r   )
codes_listrn   group_indexcodes_list2rT   rU   r0   r0   r1   test_deconsW  s
   
r   c                	   @   sX  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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   ra   r   r   r   r   ra   baaacbr   aaabbcc                 C   s(   t t|}t|}t|| d S r   )r   r   r	   rB   r   )rI   argr   r   rP   r0   r0   r1   test_basic_sortt  s   
zTestSafeSort.test_basic_sortverifyTFzcodes, exp_codes)r   r   r   r   r   r   r   ra   )r   r   r   r   r   r   r   ra   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   rB   r   )	rI   r   codes	exp_codesr=   rP   r   result_codesexpected_codesr0   r0   r1   
test_codes  s   	
zTestSafeSort.test_codesc                 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   ra   T)r   )r   r   r   r   r   r   r   ra   r   r   )rI   r=   rP   r   r   r   r   r0   r0   r1   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)rU   r   r   rT   r   rU   r   )r   r   r   rT   rU   rU   r   r	   objectr   rB   r   )rI   r=   r   rP   r0   r0   r1   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)rU   r   r   rT   r   )r   r   r   r   r   r   r   )r   r   rT   rU   )r   r   r   r   r   r   r   )r   r	   r   r   r   rB   r   )rI   r=   r   r   r   rP   r   r0   r0   r1   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   )rI   rv   msgr0   r0   r1   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   )rI   r   r   errr   r0   r0   r1   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   rB   assert_extension_array_equal)rI   r   r   rT   r   rP   r0   r0   r1   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   rB   r   r   )rI   r   rT   r   r   expected_valuesr   r0   r0   r1   test_extension_array_codes  s   z'TestSafeSort.test_extension_array_codes)r   r   r   r   r   r   r   r	   r#   r   r   r   r   r   r   r   r   
ValueErrorr   r   r   r  r0   r0   r0   r1   r   s  sJ    
	

,
r   c                 C   sD   t jd| ddgtd}t|}t jddd| gtd}t|| d S )NrU   rT   r   r   )nulls_fixturer=   r   rP   r0   r0   r1   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   ro   r   rB   rC   )arr1arr2midxr   rP   r0   r0   r1   test_safe_sort_multiindex  s   r	  )-collectionsr   r   	itertoolsr   numpyr   r   pandasr   r   r   r   r	   r
   r   pandas._testing_testingrB   pandas.core.algorithmsr   pandas.core.commoncorecommonrF   pandas.core.sortingr   r   r   r   r   fixturer2   r3   r   r   r   tiler   r   r*   r   r   r  r	  r0   r0   r0   r1   <module>   sF    $		
  

d