o
    i9F                     @   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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   axisleftright)r   nprandomrandintlistsumpermutationleniloccopyr   tolistarangeindex)lowhighnr   ir    r0   T/var/www/edux/Edux_v2/venv/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 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   sJ  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 ]\}}|| ||d d d	  ksJ || |ksJ q}t|t|ksJ d S )
N  i  i	  )	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!   randn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_overflow2   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_rangeZ   s   z3TestSorting.test_int64_overflow_groupby_large_rangeaggmean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sRJ tttt}}ttt||d	 |d
 D ]\}}	}
|| |	 || |
 qht|t|ksJ tj| tdd} fdd}t || || fj}t|d	d
g|d }tt|  | d S )Ni i   )i         abcder      
   jimjoe)namesc                    s   t jttt  | ddS )Nf8dtype)r    fromiterrD   getattr)rT   r]   r0   r1   <lambda>z   s    zKTestSorting.test_int64_overflow_groupby_large_df_shuffled.<locals>.<lambda>)r   r+   )r    r!   r"   choicer&   vstackr%   r   r#   r?   r@   r   groupershaper   ziprD   rE   appendr	   from_tupleskeysr=   T
sort_indexrB   assert_frame_equalrl   )rI   r]   arrr/   rJ   grre   rf   keyrT   rU   mifresr0   rm   r1   -test_int64_overflow_groupby_large_df_shuffleda   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_positionri   )	r    nanr#   rX   r   rB   assert_numpy_array_equalr   intp)rI   orderr   exprv   resultr0   r0   r1   test_lexsort_indexer   s   &z TestSorting.test_lexsort_indexerz ascending, na_position, exp, boxc                 C      t j| ddS NOri   r    r   xr0   r0   r1   rn          zTestSorting.<lambda>c                 C   r   r   r   r   r0   r0   r1   rn      r   c                 C   r   r   r   r   r0   r0   r1   rn      r   c                 C   r   r   r   r   r0   r0   r1   rn      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 )Nr`   r   	mergesort)kind	ascendingr   F)check_dtype)r    r   r#   rX   r   rB   r   r   )rI   r   r   r   boxrH   r   r0   r0   r1   test_nargsort   s
   (7
zTestSorting.test_nargsortN)__name__
__module____qualname__pytestmarkslowrS   r\   parametrizer   r#   rX   r   r   r0   r0   r0   r1   r3   1   s    
'
&&((
&&((&&((5r3   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 )
Nr4   r   ABCDEFG1r   G2outerhowi  )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   ry   )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   ry   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                 C   s  d\}}}t tj|||dfdtdd}|tjj	}t
|s%J 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	  q|td D ]\}}|| |d
  qg }|
 D ]\}}||tjg}t||D ]\}}||||f  qq| D ]\}}||
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 sd|dksdJ t ||||d}|rtd}t!"||  || j#|dd t!"||| d S )N)r   r   i   r   int64r   r   T)ignore_indexrc   r   r   c                 S   s$   |  | j } tt| | _| S N)r   r   r)   r    r*   r&   r+   )rJ   r0   r0   r1   alignT  s   zCTestMerge.test_int64_overflow_one_to_many_none_match.<locals>.alignboolri   )r   r   r   r   r   r   r   )r   )$r   r    r!   r"   astyper#   applyr
   nuniquer=   r   r   ro   r&   r'   r?   r%   r(   r*   r+   r   	set_indexiterrowsrt   rH   getr   r   notnaonesallanyr   rB   ry   r   )rI   r   r   r,   r-   r.   r   rr   r   r/   ldictrdictidxrowvalsrQ   lvalrvallvrvr   r   jmaskmaskframer   kcolsr0   r0   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   rc      r   r   rc   r   r   )r   rc   ra   r   r   r   rc   r   )r`   r   r   rc   r   r   r`   ra   )ra   r`      '  ri   r`   )r   r   c                 C   s>   t | |ddd}t||}t| |D ]
\}}t|| qd S )NT)r   xnull)r   r   rs   rB   r   )
codes_listrr   group_indexcodes_list2rT   rU   r0   r0   r1   test_deconss  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 oUe 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   rc   r   ra   r   r   rc   r   ra   baaacbaaabbcri   c                 C   s"   t |}t|}t|| d S r   )r   r    r   rB   r   )rI   argr   r   rP   r0   r0   r1   test_basic_sort  s   	
zTestSafeSort.test_basic_sortverifyTFzcodes, exp_codes, na_sentinel)r   r   r   rc   r   r   r   ra   )r   r   r   rc   r   r   r   ra   r   )r   r   r   rc   r   r   c   ra   )r   r   r   rc   r   r   r   ra   r   c           
      C   sV   g d}t g d}t||||d\}}t j|t jd}	t|| t||	 d S )Nr   r   na_sentinelr   ri   r    r   r   r   rB   r   )
rI   r   codes	exp_codesr   r=   rP   r   result_codesexpected_codesr0   r0   r1   
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   rc   r   r   r   ra   )r   r   rc   r   ra   ri   r   )rI   r   r=   rP   r   r   r   r   r0   r0   r1   test_codes_out_of_bound  s   z$TestSafeSort.test_codes_out_of_boundr   c                 C   s   t j| tdS )Nri   )r    r   objectr   r0   r0   r1   rn     r   zTestSafeSort.<lambda>c                 C   s6   |g d}t |}tjg dtd}t|| d S )N)rU   r   r   rT   r   rU   )r   r   r   rT   rU   rU   ri   )r   r    r   r   rB   r   )rI   r   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   ri   )r   r   rc   r   r   r   r   )r   r   rT   rU   )r   r   r   rc   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   rc   r   r   ri   z,'[<>]' not supported between instances of .*match)	r    r   r   nowr   r   raises	TypeErrorr   )rI   rz   msgr0   r0   r1   test_unsortable  s
   
"zTestSafeSort.test_unsortablezarg, codes, err, msgr   Nz"Only list-like objects are allowed)r   r   rc   zOnly list-like objects or None)r   r   rc   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   rc   r   rc   r   r   rc   c                 C   s0   t |dd}t|}t |dd}t|| d S )NInt64ri   )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   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  ri   r   r   rc   r   r  )r   r   r    r   rB   r  r   )rI   r   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   skipifr   r   r   r   r   r   r   
ValueErrorr   r   r  r  r0   r0   r0   r1   r     sV    


	

,
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 )NrU   rT   ri   )r    r   r   r   r   rB   r   )r=   r   rP   r0   r0   r1   test_mixed_str_nan  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 )Nrc   r   r  ri   )rc   r   r   r   )r   rc   r   r   )r
   r   r	   from_arraysr   rB   rC   )arr1arr2midxr   rP   r0   r0   r1   test_safe_sort_multiindex  s   r  )0collectionsr   r   	itertoolsr   numpyr    r   pandas.compatr   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>   sH    $		
 5 

n