o
    ҷhcz                     @   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mZ ddlmZ ddl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#ejdg dddggdd Z$G dd dZ%ej&dej&dejdg d d!d" Z'd#d$ Z(d%d& Z)d'd( Z*d)d* Z+d+d, Z,ejd-d.ej-gd/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1G d7d8 d8Z2dS )9zX
The tests in this package are to ensure the proper resultant dtypes of
set operations.
    )datetimeN)lib)find_common_type)	CategoricalDtypeCategoricalIndexDatetimeTZDtypeIndex
MultiIndexPeriodDtype
RangeIndexSeries	Timestamp)is_signed_integer_dtypepandas_dtypec                 C   s*   |   }|   }||j|jksJ d S )N)sort_valuesuniondtype)indexidx1idx2 r   S/var/www/html/venv/lib/python3.10/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s(|j s7|j s7|jjdkr7|jjdkr7tjjdtdd}|j| t	|j|jg}d }d}t
|rKt
|sLnH|jjdkrYt|jdrf|jjdkrit|jdsit}n+t|jtrut|jtst|jtrt|jtrt}d	}tjjd
tdd}|j| tj|j|jfv }	t|j}
t|j}| }| }tj||d ||}||}W d    n1 sw   Y  |	r|
s|r|jtdksJ |jtdksJ d S |j|ksJ |j|ksJ d S )NibzGH#44000 True==1F)reasonraisesstrictz'<' not supported betweenciufczPeriodDtype\[B\] is deprecatedz"Warning not produced on all buildsmatchO)	is_uniquer   kindpytestmarkxfail
ValueErrornode
add_markerr   lenr   is_np_dtypeRuntimeWarning
isinstancer
   r   FutureWarningAssertionErrornpuint64r   r   tmassert_produces_warningr   )
index_flatindex_flat2requestr   r   r&   common_dtypewarnmsg
any_uint64idx1_signedidx2_signedres1res2r   r   r   test_union_different_types)   sp   






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_pairss   s   

rE   zleft, right, expected))int64rF   rF   )rF   r2   object)rF   float64rH   )r2   rH   rH   )r2   r2   r2   )rH   rH   rH   )datetime64[ns]rF   rG   )rI   r2   rG   )rI   rH   rG   )datetime64[ns, CET]rF   rG   )rJ   r2   rG   )rJ   rH   rG   )	Period[D]rF   rG   )rK   r2   rG   )rK   rH   rG   names)foorM   rM   )rM   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   rO   intersection)leftrightexpectedrL   ar   resultr   r   r   test_union_dtypes   s   

rX   valuesrP   rQ   rQ      r[   c                 C   s8   t | }t ddg}||}t dg}t|| d S )Nr[   )r   rR   r3   assert_index_equal)rY   rV   r   rW   rU   r   r   r   test_intersection_duplicates   s
   

r]   c                   @   s@  e Zd Zejdddgejdg ddd Zejdd	d
 Zejdejddd Z	ejdejddd Z
ejdej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ejdg ddd Zejddd Zdd Zd d! Zd"d# Zd$S )%
TestSetOpscaseg      ?xxxmethodrR   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-liker    )r%   r   	TypeErrorgetattr)selfr_   ra   r   r:   r   r   r   test_set_ops_error_cases   s   "z#TestSetOps.test_set_ops_error_cases3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc           	      C   s   t |trtdt|j  |d d }|d d }||}t||s)J t |j	t
r1d S | | | g}|D ]}||}t||sMJ q>t |trvd}tjt|d |g d W d    d S 1 sow   Y  d S d S )NNot relevant for    r[   .other must be a MultiIndex or a list of tuplesr    rP   rQ   r[   )r.   r   r%   skiptype__name__rR   r3   equalContentsr   r   to_numpy	to_seriesto_listr	   r   re   )	rg   r   firstsecond	intersectcasesr_   rW   r:   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||sJ t|jtr#d S | | | g}|D ]}| |}t||s?J q0t|t	rhd}	t
jt|	d | g d W d    d S 1 saw   Y  d S d S )Nr[   rk   rl   r    rm   )r   r3   rq   r.   r   r   rr   rs   rt   r	   r%   r   re   )
rg   r   ru   rv   
everythingr   rx   r_   rW   r:   r   r   r   test_union_base   s"   


"zTestSetOps.test_union_basec           
      C   s   |dd  }|d d }|j dkrt|t|}nt|tr#g }n|dd  }|||}t||s7J | | |	 g}|D ]}|||}t||sTJ qDt|t
r~d}	tjt|	d |g d| W d    d S 1 sww   Y  d S d S )NrQ      booleanrl   r    rm   )inferred_typesetrc   r.   r   r3   rq   rr   rs   rt   r	   r%   r   re   )
rg   sortr   ru   rv   answerrW   rx   r_   r:   r   r   r   test_difference_base   s&   


"zTestSetOps.test_difference_basec           	      C   s4  t |trtdt|j  t|dk rtd |d |dd  v s/|d |d d v r4td |dd  }|d d }|ddg }||}t	||sSJ |
 | | g}|D ]}||}t	||soJ q`t |trd}tjt|d	 |g d
 W d    d S 1 sw   Y  d S d S )Nrj   rQ   zToo few values for testr   rP   z+Index values no not satisfy test condition.rl   r    rm   )r.   r   r%   rn   ro   rp   r+   rd   r3   rq   rr   rs   rt   r	   r   re   )	rg   r   ru   rv   r   rW   rx   r_   r:   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%   rn   copy	set_namesr   r3   r\   drop
rg   r5   fnamesnameexpected_namer   ru   rv   r   rU   r   r   r   test_corner_union4  s.   




zTestSetOps.test_corner_unionc           
      C   s`   |j std |}| |}|dd  |}|| }|| }	t||	 d S Nr   rP   )	r#   r%   rn   r   r   r   r   r3   r\   r   r   r   r   test_union_unequalb  s   
zTestSetOps.test_union_unequalc           
      C   s&  |j std |}| |}| |}||}| |}	t||	 | |}|||}||}|||}	t||	 |||}| |}||}|||}	t||	 |||}|||}||}|||}	t||	 d S r   )	r#   r%   rn   r   r   rR   r3   r\   r   
rg   r5   r   r   r   r   ru   rv   rw   rU   r   r   r   test_corner_intersectx  s.   




z TestSetOps.test_corner_intersectc           
      C   sh   |j std |}| |}|dd  |}|| }|dd  | }	t||	 d S r   )	r#   r%   rn   r   r   rR   r   r3   r\   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 )NrM   r   )
r.   r	   renamelistrangenlevelsr1   asarrayrR   rO   )rg   r   otherrW   r   r   r   .test_intersection_name_retention_with_nameless  s   



z9TestSetOps.test_intersection_name_retention_with_namelessc                 C   s>   |j std |j||d}|d d }tj||dd d S )Nz&Not relevant since index is not uniquer   r   Texact)r#   r%   rn   rc   r3   r\   )rg   r   r   rW   rU   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   ).0xr   r   r   
<listcomp>  s    zDTestSetOps.test_difference_name_retention_equals.<locals>.<listcomp>r   rP   rQ   )r.   r	   r   equalsrc   r3   r\   )rg   r   rL   r   rW   rU   r   r   r   %test_difference_name_retention_equals  s   

z0TestSetOps.test_difference_name_retention_equalsc                 C   sD   |j std ||d d }|j||d}tj||dd d S )Nz(Not relevant because index is not uniquer   r   Tr   )r#   r%   rn   rR   rc   r3   r\   )rg   r   r   interdiffr   r   r   (test_intersection_difference_match_empty  s
   
z3TestSetOps.test_intersection_difference_match_emptyN)rp   
__module____qualname__r%   r&   parametrizerh   filterwarningsry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^      s`    






$



#




r^   ri   rz   ra   rb   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   rk   )astyper.   r   rf   r3   r\   )r5   r   ra   r   r   r   rW   rU   r   r   r   test_setop_with_categorical  s   	
r   c                 C   sN   | j rtd | }|g d }||||sJ ||js%J d S )NzNot relevant for empty Indexr   r   rP   rQ   )emptyr%   rn   rR   r   r#   )r   idxidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes  s   
r   c                 C   s~   | }t g d|d}t g d|d}t g d|d}t|tr%t g d}||}t|| |j|dd}t|| d S )NrZ   r   )r[   r[   r}   )rP   rQ   rQ   r[   r[   r}   Fr   r   r.   r   r   r3   r\   'any_dtype_for_small_pos_integer_indexesr   rV   r   rU   rW   r   r   r   0test_union_duplicate_index_subsets_of_each_other  s   

r   c                 C   sd   | }t g d|d}t ddg|d}t g d|d}||}t|| ||}t|| d S )N)rP   r   r   r   r   rP   r   r   rP   r   r   r3   r\   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 )NrZ   )10r   )rP   rQ   rQ   r[   r   r   r   Fr   r   )rV   r   rU   rW   r   r   r   +test_union_duplicate_index_different_dtypes6  s
   r   c                  C   s>   t g d} t g d}| |}t g d}t|| d S )Nr   r   r   )rV   r   rW   rU   r   r   r   (test_union_same_value_duplicated_in_both?  s
   
r   duprP   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 )NrP   rQ   Fr   g      ?       @)r   r1   nanr   r3   r\   )r   rV   r   rW   rU   r   r   r   test_union_nan_in_bothH  s
   r   c                  C   sB   t ddd} t ddd}| j|dd}tg d}t|| d S )	NrP   d      2   r[   Tr   )rP   r}      rA                        "   %   (   +   .   1   7   =   C   I   O   U   [   a   )r   r   r   r3   r\   )r   r   rW   rU   r   r   r   test_union_rangeindex_sort_trueR  s   r   c                 C   sz   | }t g d|d}t g d|d}t g d|d}t|tr%t g d}||}t|| ||}t|| d S )N)rP   r   rQ   r   r   r   r   r   r   r   r   <test_union_with_duplicate_index_not_subset_and_non_monotonicw  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 )NrP   rQ   r   r   )r   r1   r   
categoriesr   r$   r   r   rH   r3   r\   )cir   rW   rU   r   r   r   #test_union_int_categorical_with_nan  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d(d)d*gd-d. Zd/d0 Zejd1ed2d3ejgeg d4fed2d3geejd5d6d7gfgd8d9 Zd:d; Zd<d= Zd>d? Zd@S )A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  rQ   	   r   r   aa)r   r   rG   rR   r3   r\   )rg   dt_datesindex1index2rW   rU   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 )NrB   rA   r   )rR   r3   r\   r   rq   )rg   r   r   ru   rv   rw   r   r   r   r   test_intersection  s   z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_name)r[   r}   rk   r   r   rO   r   Fc                 C   sR   t g ddd}t g d}|||}|rd|_|j|jks!J t|| d S )NrP   rQ   r[   r}   rk   r   r   r[   r}   rk   )r   rR   rO   r3   r\   )rg   r   
keeps_namer   r   rU   rW   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 Nrk   rB   rA   r   )rO   rR   )	rg   r   
first_namesecond_namer   r   ru   rv   rw   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 )NrP   rQ   i1r   rk   r   i2r[   r}   i3r   j1j2j3r   )
rg   r   r   r   r   r   rU   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   r3   r\   r   rq   )rg   r   r   ru   rv   r{   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 r*t||  t||s2J d S r   )rY   r   r3   r\   r   rq   )	rg   r   r  r   ru   rv   r{   r_   rW   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 )Nrk   rB   r   )r   r   )rg   r   r   ru   r   r   r   r   test_union_identity  s   z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)rO   rO   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 )Nrk   rB   rA   rO   r   )rO   rc   r3   rq   )	rg   r   r   rU   r   ru   rv   r   rW   r   r   r   !test_difference_name_preservation  s   z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )Nrk   rB   rO   )rO   rc   r3   r\   rg   r   r   ru   rW   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 )Nrk   rB   rO   r   )rO   rc   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 )Nrk   rB   rA   )rc   r   r3   r\   )rg   r   r   ru   rv   rW   rU   r   r   r   test_difference_sort.  s   z'TestSetOpsUnsorted.test_difference_sortopnamerc   rd   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 )	Nr[   2000rP   rQ   1999rc   Fr   )r   r   operatormethodcallerr3   r4   r-   r\   )rg   r  rV   r   oprW   rU   r   r   r   test_difference_incomparable;  s   
z/TestSetOpsUnsorted.test_difference_incomparablec                 C   st   t dtddg}t dtddg}tj||dd}d}tjt|d	 || W d    d S 1 s3w   Y  d S )
Nr[   r  rP   rQ   r  Tr   z<'<' not supported between instances of 'Timestamp' and 'int'r    )r   r   r  r  r%   r   re   )rg   r  rV   r   r  r:   r   r   r   !test_difference_incomparable_trueN  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)rM   rN   bazrm   )rM   rP   rN   r[   r   ))rN   rQ   )r  r[   r  )r	   from_tuplesziprd   r   r3   r\   rq   )rg   r   r   r   rW   rU   r   r   r   test_symmetric_difference_miX  s   z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   rP   )r         @        r   r  r  c                 C   s@   t dtjddg}|j||d}|d u r| }t|| d S )NrP   rQ   r[   r   )r   r1   r   rd   r   r3   r\   )rg   r   rU   r   r   rW   r   r   r   !test_symmetric_difference_missingb  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)rP   rQ   r[   r}   r   r   )rQ   r[   r}   rk   rP   rk   r   new_name)result_namer   )r   r1   arrayrd   r3   rq   rO   )rg   r   r   r   rU   rW   r   r   r   #test_symmetric_difference_non_indexs  s   z6TestSetOpsUnsorted.test_symmetric_difference_non_indexc                 C   sJ   t g d|d}t g d|d}||}t g d|d}t|| d S )Nrm   r   r   r   r   )rg   any_numeric_ea_and_arrow_dtyper   r   rW   rU   r   r   r   test_union_ea_dtypes  s
   
z'TestSetOpsUnsorted.test_union_ea_dtypesc                 C   sF   t dg|d}t dg|d}||}t ddg|d}t|| d S )NrV   r   r   r   )rg   any_string_dtyper   r   rW   rU   r   r   r   test_union_string_array  s
   
z*TestSetOpsUnsorted.test_union_string_arrayN)rp   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   r     sb    










	


r   )3__doc__r   r  numpyr1   r%   pandas._libsr   pandas.core.dtypes.castr   pandasr   r   r   r   r	   r
   r   r   r   pandas._testing_testingr3   pandas.api.typesr   r   r   r@   r&   r   makeIntIndexmakeRangeIndexmakeFloatIndexmakeUIntIndexrE   rX   r]   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sf    ,J




	
	  
=		
	%