U
    +ifk                     @   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 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dddddddddddddddgej$%d d!d"gd#d$ Z+d%d& Z,ej$%d'd(d)d)d*gd*d*ggd+d, Z-G d-d. d.Z.ej$%d/d0d1d2d3gd4d5 Z/d6d7 Z0ej$%d8eeeed9d: ed;d: egd<d= Z1ej$%d8eeeeed>d: gd?d@ Z2dAdB Z3dCdD Z4ej$%dEd(ej5gdFdG Z6ej$%d8eeeedHd: gdIdJ Z7G dKdL dLZ8dS )MzX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)find_common_type)is_dtype_equal)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&td S N)sort_valuesuniondtypeAssertionError)indexidx1idx2 r   S/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/indexes/test_setops.pytest_union_same_types*   s    r   c                 C   s  | }|}|j s&|jjdkr&t|jdsD|j s`|jjdkr`t|jdr`tjjdtd}|j	| t
|j|jg}|jtjkp|jtjk}t|j}t|j}	| }| }||}
||}|r|s|	r|
jtdkst|jtdkstn |
j|kst|j|kstd S )NibooleanzGH#44000 True==1)reasonraisesO)	is_uniquer   kindr   pytestmarkxfail
ValueErrornodeZ
add_markerr   npuint64r   r   r   r   )
index_flatZindex_flat2requestr   r   r&   Zcommon_dtypeZ
any_uint64Zidx1_signedZidx2_signedres1res2r   r   r   test_union_different_types2   s:    



	



r0   zidx_fact1,idx_fact2c                 C   sT   | d}|d}| |}| |}|j|j|jfks:t|j|j|jfksPtd S )N
      )r   r   r   )Z	idx_fact1Z	idx_fact2r   r   r.   r/   r   r   r   "test_compatible_inconsistent_pairsZ   s    

r3   zleft, right, expected)int64r4   r4   )r4   r+   object)r4   float64r6   )r+   r6   r6   )r+   r+   r+   )r6   r6   r6   )datetime64[ns]r4   r5   )r7   r+   r5   )r7   r6   r5   )datetime64[ns, CET]r4   r5   )r8   r+   r5   )r8   r6   r5   )	Period[D]r4   r5   )r9   r+   r5   )r9   r6   r5   names)foor;   r;   )r;   barNc                 C   s~   t | } t |}tg | |d d}tg ||d d}||}|j|ksLt|j|d ks^t||}|j|d ksztd S )Nr   )r   name      )r   r   r   r   r   r=   intersection)leftrightexpectedr:   abresultr   r   r   test_union_dtypeso   s    

rG   c              	   C   s^   t t | | O } W 5 Q R X t t | | M } W 5 Q R X t t | | N } W 5 Q R X d S r   )tmassert_produces_warningFutureWarningr   r   r   r   %test_dunder_inplace_setops_deprecated   s    rL   valuesr>   r?      c                 C   s8   t | }t ddg}||}t dg}t|| d S )NrN   )r   r@   rH   assert_index_equal)rM   rD   rE   rF   rC   r   r   r   test_intersection_duplicates   s
    

rP   c                   @   s   e Zd Zejdddgejdddddgd	d
 Zdd Zdd Zdd Z	dd Z
ejddddddgdd Zejddddddgdd Zejddddddgdd Zejddddddgdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*
TestSetOpscaseg      ?Zxxxmethodr@   r   
differencesymmetric_differencec              	   C   s0   d}t jt|d t||| W 5 Q R X d S )Nz!Input must be Index or array-likematch)r%   r!   	TypeErrorgetattr)selfrR   rS   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@tt|jrNd S | |	 |
 g}|D ]}||}t||shtqht |trd}tjt|d |dddg W 5 Q R X d S )N   rN   .other must be a MultiIndex or a list of tuplesrV   r>   r?   )
isinstancer   r@   rH   equalContentsr   r   r   to_numpy	to_seriesto_listr   r%   r!   rX   )	rZ   r   firstsecond	intersectcasesrR   rF   r[   r   r   r   test_intersection_base   s     




z!TestSetOps.test_intersection_basec           
   	   C   s   |dd  }|d d }|}| |}t||s6tt|jrDd S | | | g}|D ]}| |}t||s^tq^t	|t
rd}	tjt|	d | dddg W 5 Q R X d S )NrN   r]   r^   rV   r>   r?   )r   rH   r`   r   r   r   ra   rb   rc   r_   r   r%   r!   rX   )
rZ   r   rd   re   
everythingr   rg   rR   rF   r[   r   r   r   test_union_base   s    



zTestSetOps.test_union_basec           
   	   C   s   |dd  }|d d }t |ts*| r0g }n|dd  }|||}t||sXt| | |	 g}|D ] }|||}t||srtqrt |t
rd}	tjt|	d |dddg| W 5 Q R X d S )Nr?      r^   rV   r>   rN   )r_   r   Z
is_booleanrT   rH   r`   r   ra   rb   rc   r   r%   r!   rX   )
rZ   sortr   rd   re   answerrF   rg   rR   r[   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  ksF|d |d d krJd S |dd  }|d d }|ddg }||}t||st| | |	 g}|D ]}||}t||stqt |t
rd}tjt|d |dddg W 5 Q R X d S )Nr?   r   r>   r^   rV   rN   )r_   r   lenrU   rH   r`   r   ra   rb   rc   r   r%   r!   rX   )	rZ   r   rd   re   rm   rF   rg   rR   r[   r   r   r   test_symmetric_difference   s&    
(


z$TestSetOps.test_symmetric_differencezfname, sname, expected_nameArs   rs   rs   BN)rs   NNNru   N)NNNc           
      C   s  |}|  |}|  |}||}|  |}	t||	 |  |}|||}||}|  |}	t||	 |||}|  |}||}|  |}	t||	 |||}|||}||}|||}	t||	 d S r   )copy	set_namesr   rH   rO   drop
rZ   index_flat_uniquefnamesnameexpected_namer   rd   re   r   rC   r   r   r   test_corner_union  s*    



zTestSetOps.test_corner_unionc           
      C   sP   |}|  |}|dd  |}|| }|| }	t||	 d S Nr>   )rw   rx   r   r   rH   rO   rz   r   r   r   test_union_unequalC  s    zTestSetOps.test_union_unequalc           
      C   s  |}|  |}|  |}||}|  |}	t||	 |  |}|||}||}|||}	t||	 |||}|  |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S r   )rw   rx   r@   rH   rO   ry   
rZ   r{   r|   r}   r~   r   rd   re   rf   rC   r   r   r   test_corner_intersectW  s*    



z TestSetOps.test_corner_intersectc           
      C   sX   |}|  |}|dd  |}|| }|dd  | }	t||	 d S r   )rw   rx   r@   r   rH   rO   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sNt
||d d }|j	|j	kspt
|d d |}|j	|j	kst
d S )Nr;   r   )r_   r   renamelistrangenlevelsr*   Zasarrayr@   r=   r   )rZ   r   otherrF   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rl   r   Texact)r#   rT   rH   rO   )rZ   r   rl   rF   rC   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 } |sFt |} d d |d }t|| d S )Nc                    s   g | ]}|g j  qS r   )r   ).0xrK   r   r   
<listcomp>  s     zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   r>   r?   )r_   r   r   equalsr   rT   rH   rO   )rZ   r   rl   r:   r   rF   rC   r   rK   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#   r@   rT   rH   rO   )rZ   r   rl   interdiffr   r   r   (test_intersection_difference_match_empty  s
    z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__r%   r&   parametrizer\   rh   rj   rn   rq   r   r   r   r   r   r   r   r   r   r   r   r   rQ      sl    


"




!



rQ   rS   r@   r   rT   rU   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   r]   )Zastyper_   r	   rY   rH   rO   )r,   rl   rS   r   r   r   rF   rC   r   r   r   test_setop_with_categorical  s    
r   c                 C   sD   | j r
d S dd }| }|ddddg }||| ||js@td S )Nc                 S   s   |  || | std S r   )r@   r   r   )rA   rB   r   r   r   check_intersection_commutative  s    zPtest_intersection_duplicates_all_indexes.<locals>.check_intersection_commutativer   r>   r?   )emptyr@   r#   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   setr   r   r   r   <lambda>      r   c                 C   s   t | tdS Nr   r   r5   r   r   r   r   r     r   c                 C   s   | ddddg}| dddg}| ddddddg}t |trPtddddddg}||}t|| |j|dd}t|| d S )Nr>   r?   rN   rk   Fr   )r_   r   r   r   rH   rO   r   rD   rE   rC   rF   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     r   c                 C   sX   | dddg}| ddg}| dddg}| |}t|| | |}t|| d S )Nr>   r   r   rH   rO   r   r   r   r   1test_union_with_duplicate_index_and_non_monotonic  s    

r   c                  C   sR   t ddddg} t dddg}t dddddddg}| j|dd}t|| d S )Nr>   r?   rN   10Fr   r   r   rH   rO   )rD   rE   rC   rF   r   r   r   +test_union_duplicate_index_different_dtypes   s
    r   c                  C   sH   t dddg} t ddddg}| |}t ddddg}t|| d S )Nr   r>   r?   r   )rD   rE   rF   rC   r   r   r   (test_union_same_value_duplicated_in_both)  s
    
r   dupc                 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 )Nr>   r?   Fr   g      ?       @)r   r*   nanr   rH   rO   )r   rD   rE   rF   rC   r   r   r   test_union_nan_in_both2  s
    r   c                 C   s   t | tdS r   r   r   r   r   r   r   C  r   c                 C   s\   | dddg}| dddg}| ddddg}| |}t|| | |}t|| d S )Nr>   r   r?   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonic<  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d
ddddgdddfed
ddddgdddfed
ddddgdfgdd Z	ejjddgddejddddg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/d0gd1d2 Zejjd3d4ejd.d/d0gd5d6 Zd7d8 Zejd9ed:d;ejged<d=d>gfed:d;geejd<d=d>gfgd?d@ ZdAdB ZdCS )D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  r?   	      r   Zaa)r   r   r5   r@   rH   rO   )rZ   Zdt_datesindex1index2rF   rC   r   r   r   test_intersect_str_datesV  s    
z+TestSetOpsUnsorted.test_intersect_str_datesr   stringT)Zindirectc                 C   sl   |d d }|d d }|j ||d}|d kr>t||  t||sNt|j ||d}||kshtd S )Nr2   r1   r   )r@   rH   rO   r   r`   r   )rZ   r   rl   rd   re   rf   r   r   r   r   test_intersection`  s    z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_namerN   rk   r]         r=   r   Fc                 C   sZ   t dddddgdd}t dddg}|||}|r:d|_|j|jksJtt|| d S )Nr>   r?   rN   rk   r]   r   r   )r   r@   r=   r   rH   rO   )rZ   r   Z
keeps_namerl   r   rC   rF   r   r   r   #test_intersection_name_preservationm  s    	z6TestSetOpsUnsorted.test_intersection_name_preservationz$first_name,second_name,expected_namerr   rt   rv   c           	      C   sD   |dd }|d d }||_ ||_ |j||d}|j |ks@td S Nr]   r2   r1   r   )r=   r@   r   )	rZ   r   Z
first_namesecond_namer~   rl   rd   re   rf   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 )Nr>   r?   i1r   r]   r   i2rN   rk   i3r   j1j2j3r   )
rZ   rl   r   r   r   r   rC   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 krJt||  t||sZtd S r   )r   rH   rO   r   r`   r   )rZ   r   rl   rd   re   ri   r   r   r   r   
test_union  s    zTestSetOpsUnsorted.test_unionklassc           	      C   sh   |dd }|d d }|d d }||j }|j||d}|d krTt||  t||sdtd S r   )rM   r   rH   rO   r   r`   r   )	rZ   r   r   rl   rd   re   ri   rR   rF   r   r   r   test_union_from_iterables  s    
z,TestSetOpsUnsorted.test_union_from_iterablesc                 C   st   |dd }|j ||d}||k| ks,t|j g |d}||k| ksLttg j ||d}||k| ksptd S )Nr]   r2   r   )r   r   r   )rZ   r   rl   rd   r   r   r   r   test_union_identity  s    z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)r=   r=   c           	      C   sx   |dd }|d d }|dd }d|_ ||_ |j||d}t||sNt|d krf|j d ksttn|j |ksttd S )Nr]   r2   r1   r=   r   )r=   rT   rH   r`   r   )	rZ   r   r   rC   rl   rd   re   rm   rF   r   r   r   !test_difference_name_preservation  s    z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )Nr]   r2   r=   )r=   rT   rH   rO   rZ   r   rl   rd   rF   r   r   r   test_difference_empty_arg  s    z,TestSetOpsUnsorted.test_difference_empty_argc                 C   sB   |dd }d|_ |||}t|dks.t|j |j ks>td S )Nr]   r2   r=   r   )r=   rT   rp   r   r   r   r   r   test_difference_identity  s
    z+TestSetOpsUnsorted.test_difference_identityc                 C   sP   |dd }|d d }| ||}|dd }|d kr@| }t|| d S )Nr]   r2   r1   )rT   r   rH   rO   )rZ   r   rl   rd   re   rF   rC   r   r   r   test_difference_sort  s    z'TestSetOpsUnsorted.test_difference_sortopnamerT   rU   c              	   C   s   t dtddg}t dtddg}t||}tt ||}W 5 Q R X t dtddtdg}|dkrz|d d }t|| tj||dd}||}t|| d S )	NrN   2000r>   r?   1999rT   Fr   )r   r   operatormethodcallerrH   rI   RuntimeWarningrO   )rZ   r   rD   rE   oprF   rC   r   r   r   test_difference_incomparable  s    z/TestSetOpsUnsorted.test_difference_incomparablezNot implemented)r    c              	   C   sZ   t dtddg}t dtddg}tj||dd}tjtdd	 || W 5 Q R X d S )
NrN   r   r>   r?   r   Tr   zCannot comparerV   )r   r   r   r   r%   r!   rX   )rZ   r   rD   rE   r   r   r   r   !test_difference_incomparable_true
  s
    z4TestSetOpsUnsorted.test_difference_incomparable_truec                 C   sx   t tdddgdddg}t ddg}|j||d	}t d
ddg}|d krX| }t|| t||sttd S )Nr;   r<   bazr>   r?   rN   )r;   r>   )r<   rN   r   )r<   r?   )r   rN   )	r   from_tuplesziprU   r   rH   rO   r`   r   )rZ   rl   r   r   rF   rC   r   r   r   test_symmetric_difference_mi  s    z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   r>   r   g      @g        c                 C   s@   t dtjddg}|j||d}|d kr0| }t|| d S )Nr>   r?   rN   r   )r   r*   r   rU   r   rH   rO   )rZ   r   rC   rl   r   rF   r   r   r   !test_symmetric_difference_missing   s
    
z4TestSetOpsUnsorted.test_symmetric_difference_missingc                 C   s   t ddddgdd}tddddg}t ddg}|j||d}t||sPt|jdks^t|j|d	|d
}t||s~t|jd	kstd S )Nr>   r?   rN   rk   r   r   r]   r   new_name)Zresult_namerl   )r   r*   arrayrU   rH   r`   r   r=   )rZ   rl   r   r   rC   rF   r   r   r   #test_symmetric_difference_non_index1  s    z6TestSetOpsUnsorted.test_symmetric_difference_non_indexN)r   r   r   r   r%   r&   r   r   r   r   r   r   r   r*   r   r
   r   r   r   r   r   r   r   r   r'   r   r   r   r   r   r   r   r   r   r   S  s^   





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

r   )9__doc__r   r   numpyr*   r%   Zpandas.core.dtypes.castr   Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrH   Zpandas.api.typesr   r   r   Zpandas.core.apir   r   r   r6   r4   r+   ZCOMPATIBLE_INCONSISTENT_PAIRSr   r0   r&   r   ZmakeIntIndexZmakeRangeIndexZmakeFloatIndexZmakeUIntIndexr3   rG   rL   rP   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   (


(



	

	  # 



		
	

