a
    j=icRr                     @   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	 ddl
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 ddlmZmZm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/d0 Z/d1d2 Z0ej !d3d4ej1gd5d6 Z2ej !d&eeeed7d( gd8d9 Z3d:d; Z4G d<d= d=Z5dS )>zX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)pa_version_under7p0)find_common_type)CategoricalIndexDatetimeIndexIndex
MultiIndex
RangeIndexSeriesTimedeltaIndex	Timestamp)is_datetime64tz_dtypeis_signed_integer_dtypepandas_dtype)Float64Index
Int64IndexUInt64Indexc                 C   s*   |   }|   }||j|jks&J d S N)sort_valuesuniondtype)indexidx1idx2 r   q/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/indexes/test_setops.pytest_union_same_types&   s    r   c                 C   s  | }|}|j s,|j s,|jjdkr,|jjdksP|j sn|j sn|jjdkrn|jjdkrntjjdtdd}|j| t	|j|jg}d }t
|rt
|snP|jjdkr|jjdvst|jtjr|jjdkr|jjdvst|jtjst}|jtjkp|jtjk}t|j}	t|j}
| }| }tj|dd	$ ||}||}W d    n1 sZ0    Y  |r|	sv|
r|jtd
ksJ |jtd
ksJ n |j|ksJ |j|ksJ d S )NibzGH#44000 True==1F)reasonraisesstrictc)r   ufr"   z'<' not supported betweenmatchO)	is_uniquer   kindpytestmarkxfail
ValueErrornodeZ
add_markerr   len
isinstancenpRuntimeWarninguint64r   r   tmassert_produces_warningr   )
index_flatZindex_flat2requestr   r   r+   Zcommon_dtypewarnZ
any_uint64Zidx1_signedZidx2_signedres1res2r   r   r   test_union_different_types.   sh    


	



	




*r;   zidx_fact1,idx_fact2c                 C   sT   | d}|d}| |}| |}|j|j|jfv s:J |j|j|jfv sPJ d S )N
      )r   r   )Z	idx_fact1Z	idx_fact2r   r   r9   r:   r   r   r   "test_compatible_inconsistent_pairst   s    

r>   zleft, right, expected))int64r?   r?   )r?   r3   object)r?   float64rA   )r3   rA   rA   )r3   r3   r3   )rA   rA   rA   )datetime64[ns]r?   r@   )rB   r3   r@   )rB   rA   r@   )datetime64[ns, CET]r?   r@   )rC   r3   r@   )rC   rA   r@   )	Period[D]r?   r@   )rD   r3   r@   )rD   rA   r@   names)foorF   rF   )rF   barNc                 C   s~   t | } t |}tg | |d d}tg ||d d}||}|j|ksLJ |j|d ks^J ||}|j|d kszJ d S )Nr   )r   name      )r   r   r   r   rH   intersection)leftrightexpectedrE   ar   resultr   r   r   test_union_dtypes   s    

rQ   c                 C   s   t t | | O } W d    n1 s(0    Y  t t | | M } W d    n1 sZ0    Y  t| jdkott}t jt|d | | N } W d    n1 s0    Y  d S )Nzstring[pyarrow])Zraise_on_extra_warnings)r4   r5   FutureWarningstrr   r   )r   Z
is_pyarrowr   r   r   %test_dunder_inplace_setops_deprecated   s    &&rT   valuesrI   rJ   rJ      rW   c                 C   s8   t | }t ddg}||}t dg}t|| d S )NrW   )r   rK   r4   assert_index_equal)rU   rO   r   rP   rN   r   r   r   test_intersection_duplicates   s
    

rY   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      ?ZxxxmethodrK   r   
differencesymmetric_differencec                 C   sD   d}t jt|d t||| W d    n1 s60    Y  d S )Nz!Input must be Index or array-liker%   )r*   r    	TypeErrorgetattr)selfr[   r\   r   msgr   r   r   test_set_ops_error_cases   s    z#TestSetOps.test_set_ops_error_casesc           	      C   s   t |trd S |d d }|d d }||}t||s@J t|jrNd S | | |	 g}|D ]}||}t||shJ qht |t
rd}tjt|d |g d W d    n1 s0    Y  d S )N   rW   .other must be a MultiIndex or a list of tuplesr%   rI   rJ   rW   )r0   r   rK   r4   equalContentsr   r   to_numpy	to_seriesto_listr   r*   r    r`   )	rb   r   firstsecond	intersectcasesr[   rP   rc   r   r   r   test_intersection_base   s     




z!TestSetOps.test_intersection_basec           
      C   s   |dd  }|d d }|}| |}t||s6J t|jrDd S | | | g}|D ]}| |}t||s^J q^t|t	rd}	t
jt|	d | g d W d    n1 s0    Y  d S )NrW   re   rf   r%   rg   )r   r4   rh   r   r   ri   rj   rk   r0   r   r*   r    r`   )
rb   r   rl   rm   
everythingr   ro   r[   rP   rc   r   r   r   test_union_base   s    



zTestSetOps.test_union_basec           
      C   s   |dd  }|d d }|  r4t|t|}nt|trDg }n|dd  }|||}t||slJ | | |	 g}|D ] }|||}t||sJ qt|t
rd}	tjt|	d  |g d| W d    n1 s0    Y  d S )NrJ      rf   r%   rg   )
is_booleansetr^   r0   r   r4   rh   ri   rj   rk   r   r*   r    r`   )
rb   sortr   rl   rm   answerrP   ro   r[   rc   r   r   r   test_difference_base  s"    

zTestSetOps.test_difference_basec           	      C   s  t |trd S t|dk rd S |d |dd  v sF|d |d d v rJd S |dd  }|d d }|ddg }||}t||sJ | | | g}|D ]}||}t||sJ qt |t	rd}t
jt|d |g d W d    n1 s0    Y  d S )NrJ   r   rI   rf   r%   rg   )r0   r   r/   r_   r4   rh   ri   rj   rk   r   r*   r    r`   )	rb   r   rl   rm   rw   rP   ro   r[   rc   r   r   r   test_symmetric_difference  s&    
(

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-Randomly generated index_flat was not unique.)	r(   r*   skipcopy	set_namesr   r4   rX   drop
rb   r6   fnamesnameexpected_namer   rl   rm   r   rN   r   r   r   test_corner_union6  s.    




zTestSetOps.test_corner_unionc           
      C   s`   |j std |}| |}|dd  |}|| }|| }	t||	 d S Nr   rI   )	r(   r*   r   r   r   r   r   r4   rX   r   r   r   r   test_union_unequald  s    
zTestSetOps.test_union_unequalc           
      C   s&  |j std |}| |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S r   )	r(   r*   r   r   r   rK   r4   rX   r   
rb   r6   r   r   r   r   rl   rm   rn   rN   r   r   r   test_corner_intersectz  s.    




z TestSetOps.test_corner_intersectc           
      C   sh   |j std |}| |}|dd  |}|| }|dd  | }	t||	 d S r   )	r(   r*   r   r   r   rK   r   r4   rX   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sNJ ||d d }|j	|j	kspJ |d d |}|j	|j	ksJ d S )NrF   r   )
r0   r   renamelistrangenlevelsr1   ZasarrayrK   rH   )rb   r   otherrP   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rv   r   Texact)r(   r^   r4   rX   )rb   r   rv   rP   rN   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 } |sFJ  |} d d |d }t|| d S )Nc                    s   g | ]}|g j  qS r   )r   ).0xr   r   r   
<listcomp>      zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   rI   rJ   )r0   r   r   equalsr^   r4   rX   )rb   r   rE   r   rP   rN   r   r   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(   rK   r^   r4   rX   )rb   r   rv   interdiffr   r   r   (test_intersection_difference_match_empty  s
    z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__r*   r+   parametrizerd   rp   rr   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   rZ      sB   

$



#


rZ   r\   r]   c                 C   s   | }| d}t|trdnd}t||||d}t||||d}tj|||d t|||d d |d}t|||d d |d}tj|||d d S )NcategoryequivTr   r   re   )Zastyper0   r	   ra   r4   rX   )r6   rv   r\   r   r   r   rP   rN   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   )rK   r   )rL   rM   r   r   r   check_intersection_commutative  s    zPtest_intersection_duplicates_all_indexes.<locals>.check_intersection_commutativer   r   rI   rJ   )emptyrK   r(   )r   r   idxZidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes  s    
r   clsc                 C   s   t | t| dS )N)
categories)r   ru   r   r   r   r   <lambda>  r   r   c                 C   s   t | tdS Nr   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 )NrV   )rW   rW   rs   )rI   rJ   rJ   rW   rW   rs   Fr   )r0   r   r   r   r4   rX   r   rO   r   rN   rP   r   r   r   0test_union_duplicate_index_subsets_of_each_other  s    

r   c                 C   s   t | tdS r   r   r   r   r   r   r   7  r   c                 C   sT   | g d}| ddg}| g d}| |}t|| | |}t|| d S )N)rI   r   r   r   rI   r   r   rI   r   r4   rX   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 )NrV   )10r   )rI   rJ   rJ   rW   r   r   r   Fr   r   r   r4   rX   )rO   r   rN   rP   r   r   r   +test_union_duplicate_index_different_dtypesG  s
    r   c                  C   s>   t g d} t g d}| |}t g d}t|| d S )Nr   r   r   )rO   r   rP   rN   r   r   r   (test_union_same_value_duplicated_in_bothP  s
    
r   duprI   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 )NrI   rJ   Fr   g      ?       @)r   r1   nanr   r4   rX   )r   rO   r   rP   rN   r   r   r   test_union_nan_in_bothY  s
    r   c                 C   s   t | tdS r   r   r   r   r   r   r   j  r   c                 C   sT   | g d}| g d}| g d}| |}t|| | |}t|| d S )N)rI   r   rJ   r   r   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonicc  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 )NrI   rJ   r   r   )r   r1   r   r   r   r)   r   r   rA   r4   rX   )cir   rP   rN   r   r   r   #test_union_int_categorical_with_nanz  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  rJ   	      r   Zaa)r   r   r@   rK   r4   rX   )rb   Zdt_datesindex1index2rP   rN   r   r   r   test_intersect_str_dates  s    
z+TestSetOpsUnsorted.test_intersect_str_datesr   stringT)Zindirectc                 C   sl   |d d }|d d }|j ||d}|d u r>t||  t||sNJ |j ||d}||u shJ d S )Nr=   r<   r   )rK   r4   rX   r   rh   )rb   r   rv   rl   rm   rn   r   r   r   r   test_intersection  s    z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_name)rW   rs   re         rH   r   Fc                 C   sR   t g ddd}t g d}|||}|r2d|_|j|jksBJ t|| d S )N)rI   rJ   rW   rs   re   r   r   )rW   rs   re   )r   rK   rH   r4   rX   )rb   r   Z
keeps_namerv   r   rN   rP   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 Nre   r=   r<   r   )rH   rK   )	rb   r   Z
first_namesecond_namer   rv   rl   rm   rn   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 )NrI   rJ   i1r   re   r   i2rW   rs   i3r   j1j2j3r   )
rb   rv   r   r   r   r   rN   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 rJt||  t||sZJ d S r   )r   r4   rX   r   rh   )rb   r   rv   rl   rm   rq   r   r   r   r   
test_union  s    zTestSetOpsUnsorted.test_unionklassc           	      C   sh   |dd }|d d }|d d }||j }|j||d}|d u rTt||  t||sdJ d S r   )rU   r   r4   rX   r   rh   )	rb   r   r   rv   rl   rm   rq   r[   rP   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 sLJ tg j ||d}||u | u spJ d S )Nre   r=   r   )r   r   )rb   r   rv   rl   r   r   r   r   test_union_identity  s    z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)rH   rH   c           	      C   sx   |dd }|d d }|dd }d|_ ||_ |j||d}t||sNJ |d u rf|j d u stJ n|j |kstJ d S )Nre   r=   r<   rH   r   )rH   r^   r4   rh   )	rb   r   r   rN   rv   rl   rm   rw   rP   r   r   r   !test_difference_name_preservation  s    z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )Nre   r=   rH   )rH   r^   r4   rX   rb   r   rv   rl   rP   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 )Nre   r=   rH   r   )rH   r^   r/   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 )Nre   r=   r<   )r^   r   r4   rX   )rb   r   rv   rl   rm   rP   rN   r   r   r   test_difference_sort  s    z'TestSetOpsUnsorted.test_difference_sortopnamer^   r_   c                 C   s   t dtddg}t dtddg}t||}tt ||}W d    n1 sX0    Y  t dtddtdg}|dkr|d d }t|| tj||dd}||}t|| d S )	NrW   2000rI   rJ   1999r^   Fr   )r   r   operatormethodcallerr4   r5   r2   rX   )rb   r   rO   r   oprP   rN   r   r   r   test_difference_incomparable,  s    &z/TestSetOpsUnsorted.test_difference_incomparablezNot implemented)r   c                 C   sn   t dtddg}t dtddg}tj||dd}tjtdd	 || W d    n1 s`0    Y  d S )
NrW   r   rI   rJ   r   Tr   zCannot comparer%   )r   r   r   r   r*   r    r`   )rb   r   rO   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 rR| }t|| t||snJ d S )N)rF   rG   bazrg   )rF   rI   rG   rW   r   ))rG   rJ   )r   rW   r   )r   from_tupleszipr_   r   r4   rX   rh   )rb   rv   r   r   rP   rN   r   r   r   test_symmetric_difference_miK  s    z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   rI   )r         @        r   r   r   c                 C   s@   t dtjddg}|j||d}|d u r0| }t|| d S )NrI   rJ   rW   r   )r   r1   r   r_   r   r4   rX   )rb   r   rN   rv   r   rP   r   r   r   !test_symmetric_difference_missingU  s
    
z4TestSetOpsUnsorted.test_symmetric_difference_missingc                 C   s   t g ddd}tg d}t ddg}|j||d}t||sHJ |jdksVJ |j|d|d	}t||svJ |jdksJ d S )
N)rI   rJ   rW   rs   r   r   )rJ   rW   rs   re   rI   re   r   new_name)Zresult_namerv   )r   r1   arrayr_   r4   rh   rH   )rb   rv   r   r   rN   rP   r   r   r   #test_symmetric_difference_non_indexf  s    z6TestSetOpsUnsorted.test_symmetric_difference_non_indexN)r   r   r   r   r*   r+   r   r   r   r   r   r   r   r1   r   r
   r   r   r   r   r   r   r   r   r,   r   r   r   r   r   r   r   r   r   r     s^   













r   )6__doc__r   r   numpyr1   r*   Zpandas.compatr   Zpandas.core.dtypes.castr   Zpandasr   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr4   Zpandas.api.typesr   r   r   Zpandas.core.apir   r   r   r   r;   r+   r   ZmakeIntIndexZmakeRangeIndexZmakeFloatIndexZmakeUIntIndexr>   rQ   rT   rY   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   (
F



	

	  /


		
	

