U
    mdq                     @   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 ddlmZ ddlmZ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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 ejd#d$d%d%d&gd&d&ggd'd( Z!G d)d* d*Z"ej#d+ejd,d-d.d/d0gd1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(d;d< Z)ejd=d$ej*gd>d? Z+d@dA Z,dBdC Z-G dDdE dEZ.dS )FzX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)find_common_type)CategoricalIndexIndex
MultiIndex
RangeIndexSeries	Timestamp)is_bool_dtype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   Y/home/sam/Atlas/atlas_env/lib/python3.8/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kst|jtjr|jjdkr|jjdkst|jtjst}tj|j|jfk}t|j}	t|j}
| }| }tj|dd	 ||}||}W 5 Q R X |r|	sZ|
r|jtd
kspt|jtd
kstn |j|kst|j|kst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markZxfail
ValueErrornodeZ
add_markerr   len
isinstancenpRuntimeWarninguint64r   r   tmassert_produces_warningr   r   )
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&   sl    


	
  


	




r5   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   r3   r4   r   r   r   "test_compatible_inconsistent_pairsl   s    

r8   zleft, right, expected)int64r9   r9   )r9   r-   object)r9   float64r;   )r-   r;   r;   )r-   r-   r-   )r;   r;   r;   )datetime64[ns]r9   r:   )r<   r-   r:   )r<   r;   r:   )datetime64[ns, CET]r9   r:   )r=   r-   r:   )r=   r;   r:   )	Period[D]r9   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   rB   intersection)leftrightexpectedr?   ar   resultr   r   r   test_union_dtypes   s    

rK   valuesrC   rD      c                 C   s8   t | }t ddg}||}t dg}t|| d S )NrM   )r   rE   r.   assert_index_equal)rL   rI   r   rJ   rH   r   r   r   test_intersection_duplicates   s
    

rO   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ejddd Z	ejddd Z
ejd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methodrE   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-liker    )r%   r   	TypeErrorgetattr)selfrQ   rR   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   rM   .other must be a MultiIndex or a list of tuplesr    rC   rD   )r*   r   rE   r.   equalContentsr   r   r   to_numpy	to_seriesto_listr   r%   r   rU   )	rW   r   firstsecond	intersectcasesrQ   rJ   rX   r   r   r   test_intersection_base   s     




z!TestSetOps.test_intersection_baseEignore:Falling back on a non-pyarrow:pandas.errors.PerformanceWarningc           
   	   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 )NrM   rZ   r[   r    rC   rD   )r   r.   r\   r   r   r   r]   r^   r_   r*   r   r%   r   rU   )
rW   r   r`   ra   
everythingr   rc   rQ   rJ   rX   r   r   r   test_union_base   s    



zTestSetOps.test_union_basec           
   	   C   s   |dd  }|d d }t |r4t|t|}nt|trDg }n|dd  }|||}t||slt| |	 |
 g}|D ] }|||}t||stqt|trd}	tjt|	d |dddg| W 5 Q R X d S )NrD      r[   r    rC   rM   )r
   setrS   r*   r   r.   r\   r   r]   r^   r_   r   r%   r   rU   )
rW   sortr   r`   ra   answerrJ   rc   rQ   rX   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 )NrD   r   rC   r[   r    rM   )r*   r   r)   rT   r.   r\   r   r]   r^   r_   r   r%   r   rU   )	rW   r   r`   ra   rk   rJ   rc   rQ   rX   r   r   r   test_symmetric_difference  s&    
(


z$TestSetOps.test_symmetric_differencezfname, sname, expected_nameArp   rp   rp   BN)rp   NNNrr   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   r.   rN   drop
rW   r0   fnamesnameexpected_namer   r`   ra   r   rH   r   r   r   test_corner_union)  s.    




zTestSetOps.test_corner_unionc           
      C   s`   |j std |}| |}|dd  |}|| }|| }	t||	 d S Nru   rC   )	r#   r%   rv   rw   rx   r   r   r.   rN   rz   r   r   r   test_union_unequalW  s    
zTestSetOps.test_union_unequalc           
      C   s&  |j std |}| |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S rt   )	r#   r%   rv   rw   rx   rE   r.   rN   ry   
rW   r0   r{   r|   r}   r   r`   ra   rb   rH   r   r   r   test_corner_intersectm  s.    




z TestSetOps.test_corner_intersectc           
      C   sh   |j std |}| |}|dd  |}|| }|dd  | }	t||	 d S r   )	r#   r%   rv   rw   rx   rE   r   r.   rN   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asarrayrE   rB   r   )rW   r   otherrJ   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rj   r   Texact)r#   rS   r.   rN   )rW   r   rj   rJ   rH   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xr   r   r   
<listcomp>  s     zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   rC   rD   )r*   r   r   equalsr   rS   r.   rN   )rW   r   r?   r   rJ   rH   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#   rE   rS   r.   rN   )rW   r   rj   interdiffr   r   r   (test_intersection_difference_match_empty  s
    z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__r%   r&   parametrizerY   rd   filterwarningsrg   rl   rn   r~   r   r   r   r   r   r   r   r   r   r   r   rP      s~    





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

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

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


rP   re   rR   rE   r   rS   rT   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   rZ   )Zastyper*   r   rV   r.   rN   )r0   rj   rR   r   r   r   rJ   rH   r   r   r   test_setop_with_categorical  s    
r   c                 C   sL   | j r
d S | }|ddddg }||||s8t||jsHtd S Nr   rC   rD   )emptyrE   r   r   r#   )r   idxZidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes  s    r   c                 C   s   | }t ddddg|d}t dddg|d}t ddddddg|d}t|tr`t ddddddg}||}t|| |j|dd}t|| d S )NrC   rD   rM   r   rh   Fr   r   r*   r   r   r.   rN   Z'any_dtype_for_small_pos_integer_indexesr   rI   r   rH   rJ   r   r   r   0test_union_duplicate_index_subsets_of_each_other  s    

r   c                 C   sh   | }t dddg|d}t ddg|d}t dddg|d}||}t|| ||}t|| d S )NrC   r   r   r   r   r.   rN   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 )NrC   rD   rM   10Fr   r   )rI   r   rH   rJ   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 r   r   )rI   r   rJ   rH   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 )NrC   rD   Fr   g      ?       @)r   r+   nanr   r.   rN   )r   rI   r   rJ   rH   r   r   r   test_union_nan_in_both;  s
    r   c                 C   s   | }t dddg|d}t dddg|d}t ddddg|d}t|trVt ddddg}||}t|| ||}t|| d S )NrC   r   rD   r   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonicE  s    


r   c                  C   st   t ddtjg} | jjjdks"ttddg}|| }tddtjgtj	d}t
|| | |}t
|| d S )NrC   rD   r   r   )r   r+   r   
categoriesr   r$   r   r   r   r;   r.   rN   )cir   rJ   rH   r   r   r   #test_union_int_categorical_with_nanW  s    

r   c                   @   s4  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d.d/d0gd3d4 Zd5d6 Zejd7ed8d9ejged:d;d<gfed8d9geejd:d;d<gfgd=d> Z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  rD   	      r   Zaa)r   r   r:   rE   r.   rN   )rW   Zdt_datesindex1index2rJ   rH   r   r   r   test_intersect_str_datesh  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 )Nr7   r6   r   )rE   r.   rN   r   r\   r   )rW   r   rj   r`   ra   rb   r   r   r   r   test_intersectionr  s    z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_namerM   rh   rZ         rB   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 )NrC   rD   rM   rh   rZ   r   r   )r   rE   rB   r   r.   rN   )rW   r   Z
keeps_namerj   r   rH   rJ   r   r   r   #test_intersection_name_preservation  s    	z6TestSetOpsUnsorted.test_intersection_name_preservationz$first_name,second_name,expected_namero   rq   rs   c           	      C   sD   |dd }|d d }||_ ||_ |j||d}|j |ks@td S NrZ   r7   r6   r   )rB   rE   r   )	rW   r   Z
first_namesecond_namer}   rj   r`   ra   rb   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 )NrC   rD   i1r   rZ   r   i2rM   rh   i3r   j1j2j3r   )
rW   rj   r   r   r   r   rH   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.   rN   r   r\   r   )rW   r   rj   r`   ra   rf   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   )rL   r   r.   rN   r   r\   r   )	rW   r   r   rj   r`   ra   rf   rQ   rJ   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 )NrZ   r7   r   )r   r   r   )rW   r   rj   r`   r   r   r   r   test_union_identity  s    z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)rB   rB   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 )NrZ   r7   r6   rB   r   )rB   rS   r.   r\   r   )	rW   r   r   rH   rj   r`   ra   rk   rJ   r   r   r   !test_difference_name_preservation  s    z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )NrZ   r7   rB   )rB   rS   r.   rN   rW   r   rj   r`   rJ   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 )NrZ   r7   rB   r   )rB   rS   r)   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 )NrZ   r7   r6   )rS   r   r.   rN   )rW   r   rj   r`   ra   rJ   rH   r   r   r   test_difference_sort  s    z'TestSetOpsUnsorted.test_difference_sortopnamerS   rT   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 )	NrM   2000rC   rD   1999rS   Fr   )r   r	   operatormethodcallerr.   r/   r,   rN   )rW   r   rI   r   oprJ   rH   r   r   r   test_difference_incomparable	  s    z/TestSetOpsUnsorted.test_difference_incomparablec              	   C   s^   t dtddg}t dtddg}tj||dd}d}tjt|d	 || W 5 Q R X d S )
NrM   r   rC   rD   r   Tr   z<'<' not supported between instances of 'Timestamp' and 'int'r    )r   r	   r   r   r%   r   rU   )rW   r   rI   r   r   rX   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@   rA   bazrC   rD   rM   )r@   rC   )rA   rM   r   )rA   rD   )r   rM   )	r   from_tuplesziprT   r   r.   rN   r\   r   )rW   rj   r   r   rJ   rH   r   r   r   test_symmetric_difference_mi&  s    z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   rC   r   g      @g        c                 C   s@   t dtjddg}|j||d}|d kr0| }t|| d S )NrC   rD   rM   r   )r   r+   r   rT   r   r.   rN   )rW   r   rH   rj   r   rJ   r   r   r   !test_symmetric_difference_missing0  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 )NrC   rD   rM   rh   r   r   rZ   r   new_name)Zresult_namerj   )r   r+   arrayrT   r.   r\   r   rB   )rW   rj   r   r   rH   rJ   r   r   r   #test_symmetric_difference_non_indexA  s    z6TestSetOpsUnsorted.test_symmetric_difference_non_indexc                 C   sT   t dddg|d}t dddg|d}||}t dddddg|d}t|| d S )NrC   rD   rM   r   rh   rZ   r   )rW   Zany_numeric_ea_and_arrow_dtyper   r   rJ   rH   r   r   r   test_union_ea_dtypesM  s
    
z'TestSetOpsUnsorted.test_union_ea_dtypesN)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   e  s^   





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

r   )/__doc__r   r   numpyr+   r%   Zpandas.core.dtypes.castr   Zpandasr   r   r   r   r   r	   Zpandas._testingZ_testingr.   Zpandas.api.typesr
   r   r   r   r   r5   r&   r   ZmakeIntIndexZmakeRangeIndexZmakeFloatIndexZmakeUIntIndexr8   rK   rO   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s~    F



	

	  8 
		
	