U
    f/el                     @   sH  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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-d.d/d0d1gd2d3 Z+d4d5 Z,ej !d6eee
e	d7d8 ed9d8 egd:d; Z-ej !d6eee
e	ed<d8 gd=d> Z.d?d@ Z/dAdB Z0ej !dCd&ej1gdDdE Z2ej !d6eee
edFd8 gdGdH Z3G dIdJ dJZ4dS )KzX
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&td S N)sort_valuesuniondtypeAssertionError)indexidx1idx2 r   D/tmp/pip-unpacked-wheel-tiezk1ph/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}| }| }||}||}	|r|st|r|jtdkst|	jtdkstn|j|kst|	j|kstd S )NO)r   r   npuint64r   r   r   r   )

index_flatZindex_flat2r   r   Zcommon_dtypeZ
any_uint64Zidx1_signedZ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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_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'   )r*   r   r'   )r*   r(   r'   )	Period[D]r&   r'   )r+   r   r'   )r+   r(   r'   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_dtypes_   s    

r9   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    r>   valuesr0   r1      c                 C   s8   t | }t ddg}||}t dg}t|| d S )Nr@   )r   r2   r:   assert_index_equal)r?   r6   r7   r8   r5   r   r   r   test_intersection_duplicates   s
    

rB   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methodr2   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)pytestraises	TypeErrorgetattr)selfrD   rE   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@tt|jrNd S  fddtj	t
tfD }|D ]}||}t| sltqlt |trd}tjt|d |dddg W 5 Q R X d S )	N   r@   c                    s   g | ]}| j qS r   r?   .0klasssecondr   r   
<listcomp>   s     z5TestSetOps.test_intersection_base.<locals>.<listcomp>.other must be a MultiIndex or a list of tuplesrH   r0   r1   )
isinstancer   r2   r:   equalContentsr   r   r   r   arrayr
   listr	   rJ   rK   rL   )rN   r   first	intersectcasesrD   r8   rO   r   rV   r   test_intersection_base   s     




z!TestSetOps.test_intersection_basec           	   	      s   |dd  }|d d  |}|  }t||s6tt|jrDd S  fddtjtt	fD }|D ]6}t
|tsb| |}t||sbt||t|fqbt
|trd}tjt|d | dddg W 5 Q R X d S )	Nr@   rQ   c                    s   g | ]}| j qS r   rR   rS   rV   r   r   rX      s     z.TestSetOps.test_union_base.<locals>.<listcomp>rY   rH   r0   r1   )r   r:   r[   r   r   r   r   r\   r
   r]   rZ   r   typer	   rJ   rK   rL   )	rN   r   r^   
everythingr   r`   rD   r8   rO   r   rV   r   test_union_base   s(    




zTestSetOps.test_union_basec           	   	      s  |dd  }|d d  t |ts*| r0g }n|dd  }| |}t||sXt fddtjt	t
fD }|D ]\}t |ttfrt|t|kstt| j| j qv|||}t||svtqvt |trd}tjt|d |dddg| W 5 Q R X d S )	Nr1      c                    s   g | ]}| j qS r   rR   rS   rV   r   r   rX      s     z3TestSetOps.test_difference_base.<locals>.<listcomp>rY   rH   r0   r@   )rZ   r   Z
is_booleanrF   r:   r[   r   r   r\   r
   r]   r   r   rb   Zassert_numpy_array_equalr   Zasi8r	   rJ   rK   rL   )	rN   sortr   r^   answerr8   r`   rD   rO   r   rV   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  ksF|d |d d krJd S |dd  }|d d  |ddg }| }t||st fddtjt	t
fD }|D ]>}||}t|r||}t|| qt||stqt |tr d}tjt|d |ddd	g W 5 Q R X d S )
Nr1   r   r0   c                    s   g | ]}| j qS r   rR   rS   rV   r   r   rX     s     z8TestSetOps.test_symmetric_difference.<locals>.<listcomp>rY   rH   r@   )rZ   r   lenrG   r:   r[   r   r   r\   r
   r]   r   r   rA   r	   rJ   rK   rL   )	rN   r   r^   rg   r8   r`   rD   r5   rO   r   rV   r   test_symmetric_difference   s.    
(


z$TestSetOps.test_symmetric_differencezfname, sname, expected_nameArm   rm   rm   BN)rm   NNNro   N)NNNc           
      C   s"  |}|j std | |}| |}||}| |}	t||	 | |}|||}||}| |}	t||	 |||}| |}||}| |}	t||	 |||}|||}||}|||}	t||	 d S N&Not for MultiIndex or repeated indices)		is_uniquerJ   skipcopy	set_namesr   r:   rA   drop
rN   r   fnamesnameexpected_namer   r^   rW   r   r5   r   r   r   test_corner_union  s.    




zTestSetOps.test_corner_unionc           
      C   s`   |}|j std | |}|dd  |}|| }|| }	t||	 d S Nrr   r0   )	rs   rJ   rt   ru   rv   r   r   r:   rA   rx   r   r   r   test_union_unequalF  s    
zTestSetOps.test_union_unequalc           
      C   s&  |}|j std | |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S rq   )	rs   rJ   rt   ru   rv   r2   r:   rA   rw   
rN   r   ry   rz   r{   r   r^   rW   r_   r5   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}   )	rs   rJ   rt   ru   rv   r2   r   r:   rA   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   )rZ   r	   renamer]   rangenlevelsr   Zasarrayr2   r/   r   )rN   r   otherr8   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rf   r   Texact)rs   rF   r:   rA   )rN   r   rf   r8   r5   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   )rT   xr=   r   r   rX     s     zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   r0   r1   )rZ   r	   r   equalsr   rF   r:   rA   )rN   r   rf   r,   r   r8   r5   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   )rs   r2   rF   r:   rA   )rN   r   rf   interZdiffr   r   r   (test_intersection_difference_match_empty  s
    z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__rJ   markparametrizerP   ra   rd   rh   rk   r|   r~   r   r   r   r   r   r   r   r   r   r   rC      sl    
"

$

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

#


rC   rE   r2   r   rF   rG   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   rQ   )rZ   r	   ZastyperM   r:   rA   )r   rf   rE   r   r8   r5   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   )r2   r   r   )r3   r4   r   r   r   check_intersection_commutative  s    zPtest_intersection_duplicates_all_indexes.<locals>.check_intersection_commutativer   r0   r1   )emptyr2   rs   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   r'   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 )Nr0   r1   r@   re   Fr   )rZ   r   r   r   r:   rA   r   r6   r7   r5   r8   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 )Nr0   r   r   r:   rA   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 )Nr0   r1   r@   10Fr   r   r   r:   rA   )r6   r7   r5   r8   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   r0   r1   r   )r6   r7   r8   r5   r   r   r   (test_union_same_value_duplicated_in_both2  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 )Nr0   r1   Fr   g      ?       @)r   r   nanr   r:   rA   )r   r6   r7   r8   r5   r   r   r   test_union_nan_in_both;  s
    r   c                 C   s   t | tdS r   r   r   r   r   r   r   L  r   c                 C   s\   | dddg}| dddg}| ddddg}| |}t|| | |}t|| d S )Nr0   r   r1   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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  r1   	      r   Zaa)r   r   r'   r2   r:   rA   )rN   Zdt_datesindex1index2r8   r5   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 kr>t||  t||sNt|j ||d}||kshtd S )Nr$   r#   r   )r2   r:   rA   r   r[   r   )rN   r   rf   r^   rW   r_   r   r   r   r   test_intersectioni  s    z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_namer@   re   rQ         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 )Nr0   r1   r@   re   rQ   r   r   )r   r2   r/   r   r:   rA   )rN   r   Z
keeps_namerf   r   r5   r8   r   r   r   #test_intersection_name_preservationv  s    	z6TestSetOpsUnsorted.test_intersection_name_preservationz$first_name,second_name,expected_namerl   rn   rp   c           	      C   sD   |dd }|d d }||_ ||_ |j||d}|j |ks@td S NrQ   r$   r#   r   )r/   r2   r   )	rN   r   Z
first_namesecond_namer{   rf   r^   rW   r_   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 )Nr0   r1   i1r   rQ   r   i2r@   re   i3r   j1j2j3r   )
rN   rf   r   r   r   r   r5   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   r:   rA   r   r[   r   )rN   r   rf   r^   rW   rc   r   r   r   r   
test_union  s    zTestSetOpsUnsorted.test_unionrU   c           	      C   sh   |dd }|d d }|d d }||j }|j||d}|d krTt||  t||sdtd S r   )r?   r   r:   rA   r   r[   r   )	rN   r   rU   rf   r^   rW   rc   rD   r8   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 )NrQ   r$   r   )r   r   r   )rN   r   rf   r^   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 )NrQ   r$   r#   r/   r   )r/   rF   r:   r[   r   )	rN   r   r   r5   rf   r^   rW   rg   r8   r   r   r   !test_difference_name_preservation  s    z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )NrQ   r$   r/   )r/   rF   r:   rA   rN   r   rf   r^   r8   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 )NrQ   r$   r/   r   )r/   rF   rj   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 )NrQ   r$   r#   )rF   r   r:   rA   )rN   r   rf   r^   rW   r8   r5   r   r   r   test_difference_sort  s    z'TestSetOpsUnsorted.test_difference_sortopnamerF   rG   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 )	Nr@   2000r0   r1   1999rF   Fr   )r   r   operatormethodcallerr:   r;   RuntimeWarningrA   )rN   r   r6   r7   opr8   r5   r   r   r   test_difference_incomparable   s    z/TestSetOpsUnsorted.test_difference_incomparablezNot implemented)reasonc              	   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 )
Nr@   r   r0   r1   r   Tr   zCannot comparerH   )r   r   r   r   rJ   rK   rL   )rN   r   r6   r7   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.   bazr0   r1   r@   )r-   r0   )r.   r@   r   )r.   r1   )r   r@   )	r	   from_tuplesziprG   r   r:   rA   r[   r   )rN   rf   r   r   r8   r5   r   r   r   test_symmetric_difference_mi  s    z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   r0   r   g      @g        c                 C   s@   t dtjddg}|j||d}|d kr0| }t|| d S )Nr0   r1   r@   r   )r   r   r   rG   r   r:   rA   )rN   r   r5   rf   r   r8   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 )Nr0   r1   r@   re   r   r   rQ   r   new_name)Zresult_namerf   )r   r   r\   rG   r:   r[   r   r/   )rN   rf   r   r   r5   r8   r   r   r   #test_symmetric_difference_non_index:  s    z6TestSetOpsUnsorted.test_symmetric_difference_non_indexN)r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r\   r
   r]   r   r   r   r   r   r   r   Zxfailr   r   r   r   r   r   r   r   r   r   \  s^   





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

r   )5__doc__r   r   Znumpyr   rJ   Zpandas.core.dtypes.castr   Zpandasr   r   r   r   r   r	   r
   r   r   r   Zpandas._testingZ_testingr:   Zpandas.api.typesr   r   r   r(   r&   r   ZCOMPATIBLE_INCONSISTENT_PAIRSr   r"   r   r   ZmakeIntIndexZmakeRangeIndexZmakeFloatIndexZmakeUIntIndexr%   r9   r>   rB   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   0





	

	  < 



		
	

