o
    iRr                     @   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   [/var/www/edux/Edux_v2/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 }t
|rIt
|sJn(|jjdkr]|jjdvspt|jtjrp|jjdkrr|jjdvspt|jtjsrt}|jtjkp}|jtjk}t|j}	t|j}
| }| }tj|d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strictc)r   ufr"   z'<' not supported betweenmatchO)	is_uniquer   kindpytestmarkxfail
ValueErrornode
add_markerr   len
isinstancenpRuntimeWarninguint64r   r   tmassert_produces_warningr   )
index_flatindex_flat2requestr   r   r+   common_dtypewarn
any_uint64idx1_signedidx2_signedres1res2r   r   r   test_union_different_types.   sZ   


rA   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_pairst   s   

rF   zleft, right, expected))int64rG   rG   )rG   r4   object)rG   float64rI   )r4   rI   rI   )r4   r4   r4   )rI   rI   rI   )datetime64[ns]rG   rH   )rJ   r4   rH   )rJ   rI   rH   )datetime64[ns, CET]rG   rH   )rK   r4   rH   )rK   rI   rH   )	Period[D]rG   rH   )rL   r4   rH   )rL   rI   rH   names)foorN   rN   )rN   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   rP   intersection)leftrightexpectedrM   ar   resultr   r   r   test_union_dtypes   s   

rY   c                 C   s   t t | | O } W d    n1 sw   Y  t t | | M } W d    n1 s-w   Y  t| jdko:t}t jt|d | | N } W d    d S 1 sRw   Y  d S )Nzstring[pyarrow])raise_on_extra_warnings)r5   r6   FutureWarningstrr   r   )r   
is_pyarrowr   r   r   %test_dunder_inplace_setops_deprecated   s   


"r^   valuesrQ   rR   rR      ra   c                 C   s8   t | }t ddg}||}t dg}t|| d S )Nra   )r   rS   r5   assert_index_equal)r_   rW   r   rX   rV   r   r   r   test_intersection_duplicates   s
   

rc   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      ?xxxmethodrS   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)selfre   rg   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r'd S | | |	 g}|D ]}||}t||sCJ q4t |t
rld}tjt|d |g d W d    d S 1 sew   Y  d S d S )N   ra   .other must be a MultiIndex or a list of tuplesr%   rQ   rR   ra   )r1   r   rS   r5   equalContentsr   r   to_numpy	to_seriesto_listr   r*   r    rk   )	rm   r   firstsecond	intersectcasesre   rX   rn   r   r   r   test_intersection_base   s$   




"z!TestSetOps.test_intersection_basec           
      C   s   |dd  }|d d }|}| |}t||sJ t|jr"d S | | | g}|D ]}| |}t||s>J q/t|t	rgd}	t
jt|	d | g d W d    d S 1 s`w   Y  d S d S )Nra   rp   rq   r%   rr   )r   r5   rs   r   r   rt   ru   rv   r1   r   r*   r    rk   )
rm   r   rw   rx   
everythingr   rz   re   rX   rn   r   r   r   test_union_base   s"   



"zTestSetOps.test_union_basec           
      C   s   |dd  }|d d }|  rt|t|}nt|tr"g }n|dd  }|||}t||s6J | | |	 g}|D ]}|||}t||sSJ qCt|t
r}d}	tjt|	d |g d| W d    d S 1 svw   Y  d S d S )NrR      rq   r%   rr   )
is_booleansetri   r1   r   r5   rs   rt   ru   rv   r   r*   r    rk   )
rm   sortr   rw   rx   answerrX   rz   re   rn   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 s#|d |d d v r%d S |dd  }|d d }|ddg }||}t||sDJ | | | g}|D ]}||}t||s`J qQt |t	rd}t
jt|d |g d W d    d S 1 sw   Y  d S d S )NrR   r   rQ   rq   r%   rr   )r1   r   r0   rj   r5   rs   rt   ru   rv   r   r*   r    rk   )	rm   r   rw   rx   r   rX   rz   re   rn   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   r5   rb   drop
rm   r7   fnamesnameexpected_namer   rw   rx   r   rV   r   r   r   test_corner_union6  s.   




zTestSetOps.test_corner_unionc           
      C   s`   |j std |}| |}|dd  |}|| }|| }	t||	 d S Nr   rQ   )	r(   r*   r   r   r   r   r   r5   rb   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   rS   r5   rb   r   
rm   r7   r   r   r   r   rw   rx   ry   rV   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   rS   r   r5   rb   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 )NrN   r   )
r1   r   renamelistrangenlevelsr2   asarrayrS   rP   )rm   r   otherrX   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r   r   Texact)r(   ri   r5   rb   )rm   r   r   rX   rV   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   rQ   rR   )r1   r   r   equalsri   r5   rb   )rm   r   rM   r   rX   rV   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(   rS   ri   r5   rb   )rm   r   r   interdiffr   r   r   (test_intersection_difference_match_empty  s
   z3TestSetOps.test_intersection_difference_match_emptyN)__name__
__module____qualname__r*   r+   parametrizero   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd      sD    

$



#


rd   rg   rh   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   rp   )astyper1   r	   rl   r5   rb   )r7   r   rg   r   r   r   rX   rV   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   )rS   r   )rT   rU   r   r   r   check_intersection_commutative  s   zPtest_intersection_duplicates_all_indexes.<locals>.check_intersection_commutativer   r   rQ   rR   )emptyrS   r(   )r   r   idxidx_non_uniquer   r   r   (test_intersection_duplicates_all_indexes  s   
r   clsc                 C   s   t | t| dS )N)
categories)r   r   r   r   r   r   <lambda>  s    r   c                 C      t | tdS Nr   r   rH   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 )Nr`   )ra   ra   r~   )rQ   rR   rR   ra   ra   r~   Fr   )r1   r   r   r   r5   rb   r   rW   r   rV   rX   r   r   r   0test_union_duplicate_index_subsets_of_each_other  s   

r   c                 C   r   r   r   r   r   r   r   r   7  r   c                 C   sT   | g d}| ddg}| g d}| |}t|| | |}t|| d S )N)rQ   r   r   r   rQ   r   r   rQ   r   r5   rb   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 )Nr`   )10r   )rQ   rR   rR   ra   r   r   r   Fr   r   r   r5   rb   )rW   r   rV   rX   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   )rW   r   rX   rV   r   r   r   (test_union_same_value_duplicated_in_bothP  s
   
r   duprQ   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 )NrQ   rR   Fr   g      ?       @)r   r2   nanr   r5   rb   )r   rW   r   rX   rV   r   r   r   test_union_nan_in_bothY  s
   r   c                 C   r   r   r   r   r   r   r   r   j  r   c                 C   sT   | g d}| g d}| g d}| |}t|| | |}t|| d S )N)rQ   r   rR   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 )NrQ   rR   r   r   )r   r2   r   r   r   r)   r   r   rI   r5   rb   )cir   rX   rV   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  rR   	      r   aa)r   r   rH   rS   r5   rb   )rm   dt_datesindex1index2rX   rV   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 )NrC   rB   r   )rS   r5   rb   r   rs   )rm   r   r   rw   rx   ry   r   r   r   r   test_intersection  s   z$TestSetOpsUnsorted.test_intersectionzindex2,keeps_name)ra   r~   rp         rP   r   Fc                 C   sR   t g ddd}t g d}|||}|rd|_|j|jks!J t|| d S )N)rQ   rR   ra   r~   rp   r   r   )ra   r~   rp   )r   rS   rP   r5   rb   )rm   r   
keeps_namer   r   rV   rX   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 Nrp   rC   rB   r   )rP   rS   )	rm   r   
first_namesecond_namer   r   rw   rx   ry   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 )NrQ   rR   i1r   rp   r   i2ra   r~   i3r   j1j2j3r   )
rm   r   r   r   r   r   rV   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   r5   rb   r   rs   )rm   r   r   rw   rx   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   )r_   r   r5   rb   r   rs   )	rm   r   r   r   rw   rx   r|   re   rX   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 )Nrp   rC   r   )r   r   )rm   r   r   rw   r   r   r   r   test_union_identity  s   z&TestSetOpsUnsorted.test_union_identityzsecond_name,expected)NN)rP   rP   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 )Nrp   rC   rB   rP   r   )rP   ri   r5   rs   )	rm   r   r   rV   r   rw   rx   r   rX   r   r   r   !test_difference_name_preservation  s   z4TestSetOpsUnsorted.test_difference_name_preservationc                 C   s.   |dd }d|_ |g |}t|| d S )Nrp   rC   rP   )rP   ri   r5   rb   rm   r   r   rw   rX   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 )Nrp   rC   rP   r   )rP   ri   r0   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 )Nrp   rC   rB   )ri   r   r5   rb   )rm   r   r   rw   rx   rX   rV   r   r   r   test_difference_sort  s   z'TestSetOpsUnsorted.test_difference_sortopnameri   rj   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 )	Nra   2000rQ   rR   1999ri   Fr   )r   r   operatormethodcallerr5   r6   r3   rb   )rm   r   rW   r   oprX   rV   r   r   r   test_difference_incomparable,  s   
z/TestSetOpsUnsorted.test_difference_incomparablezNot implemented)r   c                 C   sp   t dtddg}t dtddg}tj||dd}tjtdd	 || W d    d S 1 s1w   Y  d S )
Nra   r   rQ   rR   r   Tr   zCannot comparer%   )r   r   r   r   r*   r    rk   )rm   r   rW   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 r)| }t|| t||s7J d S )N)rN   rO   bazrr   )rN   rQ   rO   ra   r   ))rO   rR   )r  ra   r  )r   from_tuplesziprj   r   r5   rb   rs   )rm   r   r   r   rX   rV   r   r   r   test_symmetric_difference_miK  s   z/TestSetOpsUnsorted.test_symmetric_difference_mizindex2,expectedr   rQ   )r         @        r   r  r	  c                 C   s@   t dtjddg}|j||d}|d u r| }t|| d S )NrQ   rR   ra   r   )r   r2   r   rj   r   r5   rb   )rm   r   rV   r   r   rX   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||s$J |jdks+J |j|d|d	}t||s;J |jdksBJ d S )
N)rQ   rR   ra   r~   r   r   )rR   ra   r~   rp   rQ   rp   r   new_name)result_namer   )r   r2   arrayrj   r5   rs   rP   )rm   r   r   r   rV   rX   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   r2   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   numpyr2   r*   pandas.compatr   pandas.core.dtypes.castr   pandasr   r   r   r   r	   r
   r   r   pandas._testing_testingr5   pandas.api.typesr   r   r   pandas.core.apir   r   r   r   rA   r+   r   makeIntIndexmakeRangeIndexmakeFloatIndexmakeUIntIndexrF   rY   r^   rc   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    (
F




	
	  /


		
	

