o
    gl                     @   s&  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	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mZ ejejfejejfgZdd Zd	d
 Zej !dej"ej#fej$ej"fej$ej#fej$ej%fgdd Z&ej !dg dej !dddgdd Z'dd Z(ej !dg dddggdd Z)G dd dZ*ej !dg dd d! Z+d"d# Z,ej !d$eee
e	d%d& ed'd& egd(d) Z-ej !d$eee
e	ed*d& gd+d, Z.d-d. Z/d/d0 Z0ej !d1d2ej1gd3d4 Z2ej !d$eee
ed5d& gd6d7 Z3G d8d9 d9Z4dS ):zX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)find_common_type)
CategoricalIndexDatetimeIndexFloat64IndexIndex
Int64Index
MultiIndexSeriesTimedeltaIndex	TimestampUInt64Index)is_datetime64tz_dtypeis_signed_integer_dtypepandas_dtypec                 C   s*   |   }|   }||j|jksJ d S N)sort_valuesuniondtype)indexidx1idx2 r   ^/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/tests/indexes/test_setops.pytest_union_same_types&   s   r   c           
      C   s   | }|}t |j|jg}|jtjkp|jtjk}t|j}t|j}| }| }||}||}	|rP|s:|rP|jtdksDJ |	jtdksNJ d S |j|ksWJ |	j|ks^J d S )NO)r   r   npuint64r   r   r   )

index_flatindex_flat2r   r   common_dtype
any_uint64idx1_signedidx2_signedres1res2r   r   r   test_union_different_types.   s   



r&   zidx_fact1,idx_fact2c                 C   sT   | d}|d}| |}| |}|j|j|jfv sJ |j|j|jfv s(J d S )N
      )r   r   )	idx_fact1	idx_fact2r   r   r$   r%   r   r   r   "test_compatible_inconsistent_pairsJ   s   

r+   zleft, right, expected))int64r,   r,   )r,   r   object)r,   float64r.   )r   r.   r.   )r   r   r   )r.   r.   r.   )datetime64[ns]r,   r-   )r/   r   r-   )r/   r.   r-   )datetime64[ns, CET]r,   r-   )r0   r   r-   )r0   r.   r-   )	Period[D]r,   r-   )r1   r   r-   )r1   r.   r-   names)foor3   r3   )r3   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   r5   intersection)leftrightexpectedr2   abresultr   r   r   test_union_dtypes_   s   

r?   c                 C   s   t t | | O } W d    n1 sw   Y  t t | | M } W d    n1 s-w   Y  t t | | N } W d    d S 1 sGw   Y  d S r   )tmassert_produces_warningFutureWarningr   r   r   r   %test_dunder_inplace_setops_deprecated   s   


"rD   valuesr6   r7   r7      rG   c                 C   s8   t | }t ddg}||}t dg}t|| d S )NrG   )r   r8   r@   assert_index_equal)rE   r<   r=   r>   r;   r   r   r   test_intersection_duplicates   s
   

rI   c                   @   s   e Zd Zejdddgejdg ddd Zdd	 Zd
d Zdd Z	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dd Zdd Zdd Zd d! Zd"S )#
TestSetOpscaseg      ?xxxmethodr8   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-likematch)pytestraises	TypeErrorgetattr)selfrK   rM   r   msgr   r   r   test_set_ops_error_cases   s   "z#TestSetOps.test_set_ops_error_casesc                    s   t |trd S |d d }|d d  | }t| s J t|jr'd S  fddtjt	t
fD }|D ]}||}t| sEJ q6t |trnd}tjt|d |g d W d    d S 1 sgw   Y  d S d S )N   rG   c                       g | ]}| j qS r   rE   .0klasssecondr   r   
<listcomp>       z5TestSetOps.test_intersection_base.<locals>.<listcomp>.other must be a MultiIndex or a list of tuplesrQ   r6   r7   rG   )
isinstancer   r8   r@   equalContentsr   r   r   arrayr
   listr	   rS   rT   rU   )rW   r   first	intersectcasesrK   r>   rX   r   r`   r   test_intersection_base   s$   




"z!TestSetOps.test_intersection_basec           	         s   |dd  }|d d  |}|  }t||sJ t|jr"d S  fddtjttfD }|D ]}t	|t
sL| |}t||sLJ ||t|fq1t	|trud}tjt|d | g d W d    d S 1 snw   Y  d S d S )NrG   rZ   c                    r[   r   r\   r]   r`   r   r   rb      rc   z.TestSetOps.test_union_base.<locals>.<listcomp>rd   rQ   re   )r   r@   rg   r   r   r   rh   r
   ri   rf   r   typer	   rS   rT   rU   )	rW   r   rj   
everythingr   rl   rK   r>   rX   r   r`   r   test_union_base   s.   




"zTestSetOps.test_union_basec           	         s*  |dd  }|d d  t |ts| rg }n|dd  }| |}t||s,J  fddtjtt	fD }|D ].}t |t
tfr[t|t|ksNJ t| j| j q;|||}t||siJ q;t |trd}tjt|d |g d| W d    d S 1 sw   Y  d S d S )Nr7      c                    r[   r   r\   r]   r`   r   r   rb      rc   z3TestSetOps.test_difference_base.<locals>.<listcomp>rd   rQ   re   )rf   r   
is_booleanrO   r@   rg   r   rh   r
   ri   r   r   rn   assert_numpy_array_equalr   asi8r	   rS   rT   rU   )	rW   sortr   rj   answerr>   rl   rK   rX   r   r`   r   test_difference_base   s,   
"zTestSetOps.test_difference_basec           	         s:  t |trd S t|dk rd S |d |dd  v s#|d |d d v r%d S |dd  }|d d  |ddg }| }t||sDJ  fddtjtt	fD }|D ]}||}t
|rj||}t|| qSt||srJ qSt |trd}tjt|d |g d	 W d    d S 1 sw   Y  d S d S )
Nr7   r   r6   c                    r[   r   r\   r]   r`   r   r   rb     rc   z8TestSetOps.test_symmetric_difference.<locals>.<listcomp>rd   rQ   re   )rf   r   lenrP   r@   rg   r   rh   r
   ri   r   r   rH   r	   rS   rT   rU   )	rW   r   rj   rv   r>   rl   rK   r;   rX   r   r`   r   test_symmetric_difference   s2   
(



"z$TestSetOps.test_symmetric_differencezfname, sname, expected_name)Ar|   r|   r|   BN)r|   NNNr~   N)NNNc           
      C   s"  |}|j s
td | |}| |}||}| |}	t||	 | |}|||}||}| |}	t||	 |||}| |}||}| |}	t||	 |||}|||}||}|||}	t||	 d S N&Not for MultiIndex or repeated indices)		is_uniquerS   skipcopy	set_namesr   r@   rH   drop
rW   r   fnamesnameexpected_namer   rj   ra   r   r;   r   r   r   test_corner_union  s.   




zTestSetOps.test_corner_unionc           
      C   s`   |}|j s
td | |}|dd  |}|| }|| }	t||	 d S Nr   r6   )	r   rS   r   r   r   r   r   r@   rH   r   r   r   r   test_union_unequalF  s   
zTestSetOps.test_union_unequalc           
      C   s&  |}|j s
td | |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S r   )	r   rS   r   r   r   r8   r@   rH   r   
rW   r   r   r   r   r   rj   ra   rk   r;   r   r   r   test_corner_intersect\  s.   




z TestSetOps.test_corner_intersectc           
      C   sh   |}|j s
td | |}|dd  |}|| }|dd  | }	t||	 d S r   )	r   rS   r   r   r   r8   r   r@   rH   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 )Nr3   r   )
rf   r	   renameri   rangenlevelsr   asarrayr8   r5   )rW   r   otherr>   r   r   r   .test_intersection_name_retention_with_nameless  s   



z9TestSetOps.test_intersection_name_retention_with_namelessc                 C   s8   |j sd S |j||d}|d d }tj||dd d S )Nru   r   Texact)r   rO   r@   rH   )rW   r   ru   r>   r;   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   )r^   xrC   r   r   rb     s    zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   r6   r7   )rf   r	   r   equalsrO   r@   rH   )rW   r   ru   r2   r   r>   r;   r   rC   r   %test_difference_name_retention_equals  s   

z0TestSetOps.test_difference_name_retention_equalsc                 C   s>   |j sd S ||d d }|j||d}tj||dd d S )Nr   r   Tr   )r   r8   rO   r@   rH   )rW   r   ru   interdiffr   r   r   (test_intersection_difference_match_empty  s
   z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__rS   markparametrizerY   rm   rp   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   rJ      sD    "

$



#


rJ   rM   rN   c                 C   s   t | trd S | d}t| |||d}t| || |d}t|| t| ||d d |d}t| || d d |d}t|| d S )Ncategoryr   rZ   )rf   r	   astyperV   r@   rH   )r   ru   rM   r   r>   r;   r   r   r   test_setop_with_categorical  s   

r   c                 C   s@   | j rd S dd }| }|g d }||| ||jsJ d S )Nc                 S   s   |  || | sJ d S r   )r8   r   )r9   r:   r   r   r   check_intersection_commutative  s   zPtest_intersection_duplicates_all_indexes.<locals>.check_intersection_commutativer   r   r6   r7   )emptyr8   r   )r   r   idxidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes  s   
r   clsc                 C   s   t | t| dS )N)
categories)r   setr   r   r   r   <lambda>  s    r   c                 C      t | tdS Nr   r   r-   r   r   r   r   r          c                 C   sn   | g d}| g d}| g d}t |trtg d}||}t|| |j|dd}t|| d S )NrF   )rG   rG   rq   )r6   r7   r7   rG   rG   rq   Fr   )rf   r   r   r   r@   rH   r   r<   r=   r;   r>   r   r   r   0test_union_duplicate_index_subsets_of_each_other  s   

r   c                 C   r   r   r   r   r   r   r   r     r   c                 C   sT   | g d}| ddg}| g d}| |}t|| | |}t|| d S )N)r6   r   r   r   r6   r   r   r6   r   r@   rH   r   r   r   r   1test_union_with_duplicate_index_and_non_monotonic  s   

r   c                  C   sB   t g d} t g d}t g d}| j|dd}t|| d S )NrF   )10r   )r6   r7   r7   rG   r   r   r   Fr   r   r   r@   rH   )r<   r=   r;   r>   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   )r<   r=   r>   r;   r   r   r   (test_union_same_value_duplicated_in_both2  s
   
r   dupr6   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 )Nr6   r7   Fr   g      ?       @)r   r   nanr   r@   rH   )r   r<   r=   r>   r;   r   r   r   test_union_nan_in_both;  s
   r   c                 C   r   r   r   r   r   r   r   r   L  r   c                 C   sT   | g d}| g d}| g d}| |}t|| | |}t|| d S )N)r6   r   r7   r   r   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonicE  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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jd-d.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>S )?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  r7   	      r   aa)r   r   r-   r8   r@   rH   )rW   dt_datesindex1index2r>   r;   r   r   r   test_intersect_str_dates_  s   
z+TestSetOpsUnsorted.test_intersect_str_datesr   stringT)indirectc                 C   sl   |d d }|d d }|j ||d}|d u rt||  t||s'J |j ||d}||u s4J d S )Nr(   r'   r   )r8   r@   rH   r   rg   )rW   r   ru   rj   ra   rk   r   r   r   r   test_intersectioni  s   z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_name)rG   rq   rZ         r5   r   Fc                 C   sR   t g ddd}t g d}|||}|rd|_|j|jks!J t|| d S )N)r6   r7   rG   rq   rZ   r   r   )rG   rq   rZ   )r   r8   r5   r@   rH   )rW   r   
keeps_nameru   r   r;   r>   r   r   r   #test_intersection_name_preservationv  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 NrZ   r(   r'   r   )r5   r8   )	rW   r   
first_namesecond_namer   ru   rj   ra   rk   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 )Nr6   r7   i1r   rZ   r   i2rG   rq   i3r   j1j2j3r   )
rW   ru   r   r   r   r   r;   r   r   r   r   r   r   test_chained_union  s   z%TestSetOpsUnsorted.test_chained_unionc                 C   s^   |dd }|d d }|d d }|j ||d}|d u r%t||  t||s-J d S r   )r   r@   rH   r   rg   )rW   r   ru   rj   ra   ro   r   r   r   r   
test_union  s   zTestSetOpsUnsorted.test_unionr_   c           	      C   sh   |dd }|d d }|d d }||j }|j||d}|d u r*t||  t||s2J d S r   )rE   r   r@   rH   r   rg   )	rW   r   r_   ru   rj   ra   ro   rK   r>   r   r   r   test_union_from_iterables  s   
z,TestSetOpsUnsorted.test_union_from_iterablesc                 C   st   |dd }|j ||d}||u | u sJ |j g |d}||u | u s&J tg j ||d}||u | u s8J d S )NrZ   r(   r   )r   r   )rW   r   ru   rj   r   r   r   r   test_union_identity  s   z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)r5   r5   c           	      C   sz   |dd }|d d }|dd }d|_ ||_ |j||d}t||s'J |d u r4|j d u s2J d S |j |ks;J d S )NrZ   r(   r'   r5   r   )r5   rO   r@   rg   )	rW   r   r   r;   ru   rj   ra   rv   r>   r   r   r   !test_difference_name_preservation  s   z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )NrZ   r(   r5   )r5   rO   r@   rH   rW   r   ru   rj   r>   r   r   r   test_difference_empty_arg  s   z,TestSetOpsUnsorted.test_difference_empty_argc                 C   sB   |dd }d|_ |||}t|dksJ |j |j ksJ d S )NrZ   r(   r5   r   )r5   rO   ry   r   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 )NrZ   r(   r'   )rO   r   r@   rH   )rW   r   ru   rj   ra   r>   r;   r   r   r   test_difference_sort  s   z'TestSetOpsUnsorted.test_difference_sortopnamerO   rP   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 )	NrG   2000r6   r7   1999rO   Fr   )r   r   operatormethodcallerr@   rA   RuntimeWarningrH   )rW   r   r<   r=   opr>   r;   r   r   r   test_difference_incomparable   s   
z/TestSetOpsUnsorted.test_difference_incomparablezNot implemented)reasonc                 C   sp   t dtddg}t dtddg}tj||dd}tjtdd	 || W d    d S 1 s1w   Y  d S )
NrG   r   r6   r7   r   Tr   zCannot comparerQ   )r   r   r   r   rS   rT   rU   )rW   r   r<   r=   r   r   r   r   !test_difference_incomparable_true  s   
"z4TestSetOpsUnsorted.test_difference_incomparable_truec                 C   sr   t tg dg d}t ddg}|j||d}t g d}|d u r)| }t|| t||s7J d S )N)r3   r4   bazre   )r3   r6   r4   rG   r   ))r4   r7   )r   rG   r   )r	   from_tuplesziprP   r   r@   rH   rg   )rW   ru   r   r   r>   r;   r   r   r   test_symmetric_difference_mi  s   z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   r6   )r         @        r   r   r   c                 C   s@   t dtjddg}|j||d}|d u r| }t|| d S )Nr6   r7   rG   r   )r   r   r   rP   r   r@   rH   )rW   r   r;   ru   r   r>   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}|j||d}t||s$J |jdks+J |j|d|d	}t||s;J |jdksBJ d S )
N)r6   r7   rG   rq   r   r   )r7   rG   rq   rZ   r6   rZ   r   new_name)result_nameru   )r   r   rh   rP   r@   rg   r5   )rW   ru   r   r   r;   r>   r   r   r   #test_symmetric_difference_non_index:  s   z6TestSetOpsUnsorted.test_symmetric_difference_non_indexN)r   r   r   r   rS   r   r   r   r   r   r   r   r   r   rh   r
   ri   r   r   r   r   r   r   r   xfailr   r   r   r   r   r   r   r   r   r   \  s`    













r   )5__doc__r   r   numpyr   rS   pandas.core.dtypes.castr   pandasr   r   r   r   r   r	   r
   r   r   r   pandas._testing_testingr@   pandas.api.typesr   r   r   r.   r,   r   COMPATIBLE_INCONSISTENT_PAIRSr   r&   r   r   makeIntIndexmakeRangeIndexmakeFloatIndexmakeUIntIndexr+   r?   rD   rI   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    0






	
	  <


		
	

