o
    S+ i؂                     @   sV  d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZ defd	d
Zejejg d ddd Zdd Zdd Z ej!"dee#dej$dedfee#dej%dee#dej$dfee#dej%dedfee#dej%dee#dej&dfgdd Z'ej!"dg dej!"dddgdd Z(ej!"dg d d!d!ggd"d# Z)G d$d% d%Z*ej!+d&ej!+d'ej!"d(g d)d*d+ Z,d,d- Z-d.d/ Z.d0d1 Z/d2d3 Z0d4d5 Z1ej!"d6d7ej2gd8d9 Z3d:d; Z4d<d= Z5d>d? Z6G d@dA dAZ7dS )BzX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)lib)find_common_type)	CategoricalDtypeCategoricalIndexDatetimeTZDtypeIndex
MultiIndexPeriodDtype
RangeIndexSeries	Timestamp)is_signed_integer_dtypepandas_dtypereturnc                 C   s   t | t |kS )zO
    Checks if the set of unique elements of arr1 and arr2 are equivalent.
    )	frozenset)Zarr1Zarr2 r   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/pandas/tests/indexes/test_setops.pyequal_contents!   s   r   )objectcategorydatetime64[ns]ztimedelta64[ns])paramsc                 C   s   | j S )z
    Dtypes that can be given to an Index with small positive integers.

    This means that for any dtype `x` in the params list, `Index([1, 2, 3], dtype=x)` is
    valid and gives the correct Index (sub-)class.
    )param)requestr   r   r   'any_dtype_for_small_pos_integer_indexes(   s   r   c                 C   s*   |   }|   }||j|jksJ d S N)sort_valuesuniondtype)indexidx1idx2r   r   r   test_union_same_types;   s   r#   c                 C   sX  | }|}|j s|j s|jjdkr|jjdks(|j s6|j s6|jjdkr6|jjdkr6tjjdtdd}|| t|j|jg}|rit	|dkrU|jjdksQt
|trU|j}nt	|dkri|jjdksft
|tri|j}d }d}	t	|rut	|svnG|jjd	krt|jd
r|jjd	krt|jd
st}n*t
|jtrt
|jtst
|jtrt
|jtrt}d}	tjjdtdd}|| tj|j|jfv }
t|j}t|j}| }| }tj||	d ||}||}W d    n1 sw   Y  |
r|s|r|jtdksJ |jtdksJ d S |j|ks"J |j|ks*J d S )NibzGH#44000 True==1F)reasonraisesstrictr   Oz'<' not supported betweencZiufczPeriodDtype\[B\] is deprecatedz"Warning not produced on all buildsmatch)	is_uniquer   kindpytestmarkxfail
ValueErrorapplymarkerr   len
isinstancer   r   Zis_np_dtypeRuntimeWarningr
   r   FutureWarningAssertionErrornpuint64r   r   tmassert_produces_warningr   )
index_flatZindex_flat2r   using_infer_stringr!   r"   r0   Zcommon_dtypewarnmsgZ
any_uint64Zidx1_signedZidx2_signedres1res2r   r   r   test_union_different_typesC   s|   
"







rC   z	idx1,idx2   r   c                 C   sD   |  |}| | }|j| j|jfv sJ |j| j|jfv s J d S r   )r   r   )r!   r"   rA   rB   r   r   r   "test_compatible_inconsistent_pairs   s   

rF   zleft, right, expected))int64rG   rG   )rG   r:   r   )rG   float64rH   )r:   rH   rH   )r:   r:   r:   )rH   rH   rH   )r   rG   r   )r   r:   r   )r   rH   r   )datetime64[ns, CET]rG   r   )rI   r:   r   )rI   rH   r   )	Period[D]rG   r   )rJ   r:   r   )rJ   rH   r   names)foorL   rL   )rL   barNc                 C   s~   t | } t |}tg | |d d}tg ||d d}||}|j|ks&J |j|d ks/J ||}|j|d ks=J d S )Nr   )r   name      )r   r   r   r   rN   intersection)leftrightexpectedrK   ar%   resultr   r   r   test_union_dtypes   s   

rW   valuesrO   rP   rP      rZ   c                 C   s8   t | }t ddg}||}t dg}t|| d S )NrZ   )r   rQ   r;   assert_index_equal)rX   rU   r%   rV   rT   r   r   r   test_intersection_duplicates   s
   

r\   c                   @   s  e Zd Zejdddgejdg ddd Zejdd	d
 Zejddd Z	ejddd Z
ejddd Zejdg ddd Zejdg ddd Zejdg ddd Zejdg ddd Zejddd Zdd Zdd  Zd!d" Zd#S )$
TestSetOpscaseg      ?ZxxxmethodrQ   r   
differencesymmetric_differencec                 C   sF   d}t jt|d t||| W d    d S 1 sw   Y  d S )Nz!Input must be Index or array-liker+   )r/   r'   	TypeErrorgetattr)selfr^   r_   r    r@   r   r   r   test_set_ops_error_cases   s   "z#TestSetOps.test_set_ops_error_cases3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc           	      C   s   t |trtdt|j  |d d  }|d d  }||}t	|| t |j
tr3d S | | | g}|D ]}||}t||sNJ q@t |trwd}tjt|d |g d W d    d S 1 spw   Y  d S d S )NNot relevant for rD   rZ   .other must be a MultiIndex or a list of tuplesr+   rO   rP   rZ   )r5   r   r/   skiptype__name__uniquerQ   r;   r[   r   r   to_numpy	to_seriesto_listr   r	   r'   rc   )	re   r    firstsecond	intersectcasesr^   rV   r@   r   r   r   test_intersection_base   s$   



"z!TestSetOps.test_intersection_basec           
      C   s   |  }|dd  }|d d }|}||}t| |  t|jtr)d S | |	 |
 g}|D ]}||}t||sDJ q6t|trmd}	tjt|	d |g d W d    d S 1 sfw   Y  d S d S )NrZ   rD   ri   r+   rj   )rn   r   r;   r[   r   r5   r   r   ro   rp   rq   r   r	   r/   r'   rc   )
re   r    rr   rs   
everythingr   ru   r^   rV   r@   r   r   r   test_union_base   s$   


"zTestSetOps.test_union_basec           
      C   s   |dd  }|d d }|j dkrt|t|}nt|tr#g }n|dd  }|||}t||s6J | | | g}|D ]}|||}t||sRJ qCt|t	r|d}	t
jt|	d |g d| W d    d S 1 suw   Y  d S d S )NrP      booleanri   r+   rj   )inferred_typesetra   r5   r   r   ro   rp   rq   r	   r/   r'   rc   )
re   sortr    rr   rs   answerrV   ru   r^   r@   r   r   r   test_difference_base  s&   


"zTestSetOps.test_difference_basec                 C   sb  |r|j dkr|jdkr|tjjdd t|tr&tdt	|j
  t|dk r1td |d |d	d  v sE|d
 |d d
 v rJtd |d	d  }|d d
 }|dd
g }||}t| |  | | | g}|D ]}	||	}t||sJ qxt|trd}
tjt|
d |g d W d    d S 1 sw   Y  d S d S )Nr   stringzTODO: infer_string)r&   rh   rP   zToo few values for testr   rO   z+Index values no not satisfy test condition.ri   r+   rj   )r   r{   r3   r/   r0   r1   r5   r   rk   rl   rm   r4   rb   r;   r[   r   ro   rp   rq   r   r	   r'   rc   )re   r    r>   r   rr   rs   r~   rV   ru   r^   r@   r   r   r   test_symmetric_difference.  s4   



(



"z$TestSetOps.test_symmetric_differencezfname, sname, expected_name)Ar   r   r   BN)r   NNNr   N)NNNc           
      C   s"  |j s| }n|}| |}| |}||}| |}	t||	 | |}|||}||}| |}	t||	 |||}| |}||}| |}	t||	 |||}|||}||}|||}	t||	 d S r   )r-   rn   copy	set_namesr   r;   r[   drop
re   r=   fnamesnameexpected_namer    rr   rs   r   rT   r   r   r   test_corner_unionP  s.   




zTestSetOps.test_corner_unionc           
      C   s`   |j s| }n|}| |}|dd  |}|| }|| }	t||	 d S NrO   )r-   rn   r   r   r   r   r;   r[   r   r   r   r   test_union_unequal  s   
zTestSetOps.test_union_unequalc           
      C   s&  |j s| }n|}| |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S r   )r-   rn   r   r   rQ   r;   r[   r   
re   r=   r   r   r   r    rr   rs   rt   rT   r   r   r   test_corner_intersect  s.   




z TestSetOps.test_corner_intersectc           
      C   sh   |j s| }n|}| |}|dd  |}|| }|dd  | }	t||	 d S r   )r-   rn   r   r   rQ   r   r;   r[   r   r   r   r   test_intersect_unequal  s   
z!TestSetOps.test_intersect_unequalc                 C   s   t |tr|tt|j}n|d}t|}||}|j	|j	ks'J ||d d }|j	|j	ks8J |d d |}|j	|j	ksIJ d S )NrL   r   )
r5   r	   renamelistrangenlevelsr9   ZasarrayrQ   rN   )re   r    otherrV   r   r   r   .test_intersection_name_retention_with_nameless  s   



z9TestSetOps.test_intersection_name_retention_with_namelessc                 C   s>   |j std |j||d}|d d }tj||dd d S )Nz&Not relevant since index is not uniquer}   r   Texact)r-   r/   rk   ra   r;   r[   )re   r    r}   rV   rT   r   r   r   $test_difference_preserves_type_empty  s
   
z/TestSetOps.test_difference_preserves_type_emptyc                    sv   t  tr fdd|D } |d   |d } |s#J  |} d d |d }t|| d S )Nc                    s   g | ]}|g j  qS r   )r   ).0xr    r   r   
<listcomp>  s    zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   rO   rP   )r5   r	   r   equalsra   r;   r[   )re   r    rK   r   rV   rT   r   r   r   %test_difference_name_retention_equals  s   

z0TestSetOps.test_difference_name_retention_equalsc                 C   sD   |j std ||d d }|j||d}tj||dd d S )Nz(Not relevant because index is not uniquer   r   Tr   )r-   r/   rk   rQ   ra   r;   r[   )re   r    r}   interdiffr   r   r   (test_intersection_difference_match_empty  s
   
z3TestSetOps.test_intersection_difference_match_emptyN)rm   
__module____qualname__r/   r0   parametrizerf   filterwarningsrv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]      sN    







!

%



$




r]   z7ignore:invalid value encountered in cast:RuntimeWarningrg   r_   r`   c           	      C   s   | }| d}t|trdnd}t||||d}t||||d}|r0|jr0|dv r0| d}tj|||d t|||d d |d}t|||d d |d}|r`|jr`|dv r`| d}tj|||d d S )Nr   equivTr   )r   rb   r   rD   )Zastyper5   r   rd   emptyr;   r[   )	r=   r}   r_   r>   r    r   r   rV   rT   r   r   r   test_setop_with_categorical  s*   


r   c                 C   sN   | j rtd | }|g d }||||sJ ||js%J d S )NzNot relevant for empty Indexr   r   rO   rP   )r   r/   rk   rQ   r   r-   )r    idxZidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes2  s   
r   c                 C   s~   | }t g d|d}t g d|d}t g d|d}t|tr%t g d}||}t|| |j|dd}t|| d S )NrY   rE   )rZ   rZ   ry   )rO   rP   rP   rZ   rZ   ry   Fr   r   r5   r   r   r;   r[   r   r   rU   r%   rT   rV   r   r   r   0test_union_duplicate_index_subsets_of_each_other?  s   

r   c                 C   sd   | }t g d|d}t ddg|d}t g d|d}||}t|| ||}t|| d S )N)rO   r   r   rE   r   rO   r   r   rO   r   r   r;   r[   r   r   r   r   1test_union_with_duplicate_index_and_non_monotonicP  s   

r   c                  C   sB   t g d} t g d}t g d}| j|dd}t|| d S )NrY   )10r   )rO   rP   rP   rZ   r   r   r   Fr   r   )rU   r%   rT   rV   r   r   r   +test_union_duplicate_index_different_dtypes`  s
   r   c                  C   s>   t g d} t g d}| |}t g d}t|| d S )Nr   r   r   )rU   r%   rV   rT   r   r   r   (test_union_same_value_duplicated_in_bothi  s
   
r   duprO   c                 C   sV   t tjdddg}t tj| ddg}|j|dd}t tj| dddg}t|| d S )NrO   rP   Fr   g      ?       @)r   r9   nanr   r;   r[   )r   rU   r%   rV   rT   r   r   r   test_union_nan_in_bothr  s
   r   c                  C   sB   t ddd} t ddd}| j|dd}tg d}t|| d S )	NrO   d      2   rZ   Tr   )rO   ry      
                        "   %   (   +   .   1   7   =   C   I   O   U   [   a   )r   r   r   r;   r[   )r!   r"   rV   rT   r   r   r   test_union_rangeindex_sort_true|  s   r   c                 C   sz   | }t g d|d}t g d|d}t g d|d}t|tr%t g d}||}t|| ||}t|| d S )N)rO   r   rP   rE   r   r   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonic  s   


r   c                  C   st   t ddtjg} | jjjdksJ tddg}|| }tddtjgtjd}t	
|| | |}t	
|| d S )NrO   rP   r$   rE   )r   r9   r   
categoriesr   r.   r   r   rH   r;   r[   )cir   rV   rT   r   r   r   #test_union_int_categorical_with_nan  s   

r   c                
   @   s.  e Zd Zdd Zejjddgdddd Zejd	eg d
dddfeg d
dddfeg d
dfgdd Z	ejjddgddejdg ddd Z
dd Zejjddgdddd Zejdejeegejjddgdddd Zejjddgdddd Zejjddgddejdddgd d! Zd"d# Zd$d% Zejjddgddd&d' Zejjddgddd(d) Zejd*d+d,gd-d. Zejd*d+d,gd/d0 Zd1d2 Zejd3ed4d5ejgeg d6fed4d5geejd7d8d9gfgd:d; Zd<d= Zd>d? Zd@dA ZdBS )CTestSetOpsUnsortedc                 C   sX   t dddt dddg}t|td}tdgtd}||}tg td}t|| d S )Ni  rP   	   r   rE   Zaa)r   r   r   rQ   r;   r[   )re   Zdt_datesindex1index2rV   rT   r   r   r   test_intersect_str_dates  s   
z+TestSetOpsUnsorted.test_intersect_str_datesr    r   T)Zindirectc                 C   sn   |d d }|d d }|j ||d}|dv r"t| |  nt|| |j ||d}||u s5J d S )N   r   r   NF)rQ   r;   r[   r   )re   r    r}   rr   rs   rt   r   r   r   r   test_intersection  s   z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_name)rZ   ry   rD   r   r   rN   r   Fc                 C   sR   t g ddd}t g d}|||}|rd|_|j|jks!J t|| d S )NrO   rP   rZ   ry   rD   r    r   rZ   ry   rD   )r   rQ   rN   r;   r[   )re   r   Z
keeps_namer}   r   rT   rV   r   r   r   #test_intersection_name_preservation  s   	z6TestSetOpsUnsorted.test_intersection_name_preservationz$first_name,second_name,expected_name)r   r   r   c           	      C   sD   |dd }|d d }||_ ||_ |j||d}|j |ks J d S )NrD   r   r   r   )rN   rQ   )	re   r    Z
first_namesecond_namer   r}   rr   rs   rt   r   r   r   $test_intersection_name_preservation2  s   z7TestSetOpsUnsorted.test_intersection_name_preservation2c           
      C   s   t ddgdd}t ddgdd}t dd	gd
d}|j|j||d|d}|j||dj||d}t|| t ddgdd}t g dd}t g dd}	|j|j|	|d|d}|j||dj|	|d}t|| d S )NrO   rP   i1r   rD   r   i2rZ   ry   i3r   j1j2j3r   )
re   r}   r   r   r   r   rT   r   r   r   r   r   r   test_chained_union  s   z%TestSetOpsUnsorted.test_chained_unionc                 C   sb   |dd }|d d }|d d }|j ||d}|dv r)t| |  d S t|| d S NrD   r   r   r   r   )r   r;   r[   r   )re   r    r}   rr   rs   rw   r   r   r   r   
test_union  s   zTestSetOpsUnsorted.test_unionklassc           	      C   sl   |dd }|d d }|d d }||j }|j||d}|dv r.t| |  d S t|| d S r   )rX   r   r;   r[   r   )	re   r    r   r}   rr   rs   rw   r^   rV   r   r   r   test_union_from_iterables  s   
z,TestSetOpsUnsorted.test_union_from_iterablesc                 C   s   |dd }|j ||d}||u | u sJ |j tg |jd|d}||u | u s+J tg |jdj ||d}||u | u s@J d S )NrD   r   r   rE   )r   r   r   )re   r    r}   rr   r   r   r   r   test_union_identity)  s   z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)rN   rN   c           	      C   s   |dd }|d d }|dd }d|_ ||_ |j||d}|du r*t|| n||_ t| |  |d u rD|j d u sBJ d S |j |ksKJ d S )NrD   r   r   rN   r   T)rN   ra   r;   r[   r   )	re   r    r   rT   r}   rr   rs   r~   rV   r   r   r   !test_difference_name_preservation9  s   z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   sL   |  }|dd }d|_|g |}|dd  }d|_t|| d S )NrD   r   rN   )r   rN   ra   rn   r;   r[   )re   r    r}   rr   rV   rT   r   r   r   test_difference_empty_argO  s   z,TestSetOpsUnsorted.test_difference_empty_argc                 C   s:   t ddg}t dg}||}t dg}t|| d S )NrO   T)r   ra   r;   r[   )re   rR   rS   rV   rT   r   r   r   "test_difference_should_not_compareX  s
   


z5TestSetOpsUnsorted.test_difference_should_not_comparec                 C   sB   |dd }d|_ |||}t|dksJ |j |j ksJ d S )NrD   r   rN   r   )rN   ra   r4   )re   r    r}   rr   rV   r   r   r   test_difference_identity`  s
   z+TestSetOpsUnsorted.test_difference_identityc                 C   sP   |dd }|d d }| ||}|dd }|d u r | }t|| d S )NrD   r   r   )ra   r   r;   r[   )re   r    r}   rr   rs   rV   rT   r   r   r   test_difference_sorti  s   z'TestSetOpsUnsorted.test_difference_sortopnamera   rb   c                 C   s   t dtddg}t dtddg}t||}tt ||}W d    n1 s,w   Y  t dtddtdg}|dkrG|d d }t|| tj||dd}||}t|| d S )	NrZ   2000rO   rP   1999ra   Fr   )r   r   operatormethodcallerr;   r<   r6   r[   )re   r   rU   r%   oprV   rT   r   r   r   test_difference_incomparablev  s   
z/TestSetOpsUnsorted.test_difference_incomparablec                 C   st   t dtddg}t dtddg}tj||dd}d}tjt|d	 || W d    d S 1 s3w   Y  d S )
NrZ   r   rO   rP   r   Tr   z<'<' not supported between instances of 'Timestamp' and 'int'r+   )r   r   r  r  r/   r'   rc   )re   r   rU   r%   r  r@   r   r   r   !test_difference_incomparable_true  s   
"z4TestSetOpsUnsorted.test_difference_incomparable_truec                 C   sb   t tg dg d}t ddg}|j||d}t g d}|d u r)| }t|| d S )N)rL   rM   bazrj   )rL   rO   rM   rZ   r   ))rM   rP   )r  rZ   r  )r	   from_tuplesziprb   r   r;   r[   )re   r}   r   r   rV   rT   r   r   r   test_symmetric_difference_mi  s   z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   rO   )r         @        r   r  r  c                 C   s@   t dtjddg}|j||d}|d u r| }t|| d S )NrO   rP   rZ   r   )r   r9   r   rb   r   r;   r[   )re   r   rT   r}   r   rV   r   r   r   !test_symmetric_difference_missing  s
   
z4TestSetOpsUnsorted.test_symmetric_difference_missingc                 C   s   t g ddd}tg d}t ddgdd}|j||d}|dv r)t|| nt| | |jdks8J |j|d	|d
}d	|_|dv rNt|| nt| | |jd	ks]J d S )N)rO   rP   rZ   ry   r   r   )rP   rZ   ry   rD   rO   rD   r   )NTnew_name)Zresult_namer}   )r   r9   arrayrb   r;   r[   r   rN   )re   r}   r   r   rT   rV   r   r   r   #test_symmetric_difference_non_index  s   z6TestSetOpsUnsorted.test_symmetric_difference_non_indexc                 C   sJ   t g d|d}t g d|d}||}t g d|d}t|| d S )Nrj   rE   r   r   r   )re   Zany_numeric_ea_and_arrow_dtyper   r"   rV   rT   r   r   r   test_union_ea_dtypes  s
   
z'TestSetOpsUnsorted.test_union_ea_dtypesc                 C   sF   t dg|d}t dg|d}||}t ddg|d}t|| d S )NrU   rE   r%   r   )re   Zany_string_dtyper!   r"   rV   rT   r   r   r   test_union_string_array  s
   
z*TestSetOpsUnsorted.test_union_string_arrayN) rm   r   r   r   r/   r0   r   r   r   r   r   r   r   r9   r  r   r   r   r   r   r   r   r   r   r  r  r
  r   r  r  r  r  r   r   r   r   r     sd    





	



		

r   )8__doc__r   r  numpyr9   r/   Zpandas._libsr   Zpandas.core.dtypes.castr   Zpandasr   r   r   r   r	   r
   r   r   r   Zpandas._testingZ_testingr;   Zpandas.api.typesr   r   boolr   ZfixtureZALL_REAL_NUMPY_DTYPESr   r#   rC   r0   r   ZarangerG   rH   r:   rF   rW   r\   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sp    ,
	
Q&&
		
	  
?
		
	%