U
    sVcG                     @   s|  d dl Zd dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ ejdddgejdddd	d
gdd Zejdeeje	egdd Zejjejdeeje	egdd Zdd Zdd Zdd Zdd Zdd Zdd Zejjddd d! Zd"d# Zd$d% Zd&d' Zejjd(e d)d*d+ Z!d,d- Z"ejdddd	d
gd.d/ Z#d0d1 Z$d2d3 Z%ejjddd4d5 Z&ejd6e'de'd gd7d8 Z(ejjddd9d: Z)d;d< Z*ejjddd=d> Z+d?d@ Z,dAdB Z-dCdD Z.ejdddd	d
gdEdF Z/ejdGdHgdHgfdHdHgdHgfdIdHgdIdHgfgdJdK Z0ejdLdMdddgfdMdNgddgfdMdOgddgfdPdQdRgddgfdPdOdNgddgfdSdNdOdQgddgfdPdNdQgdNdgfdPdQdOgddOgfdPdNdOgdNdOgfdPddOgddOgfg
dTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d^d_ Z6ejd`dNdOdQgd daggdQdRdOgdaggd dbdcgdbdbdbggd dbdcgd d d ggdddegfgdfdg Z7dS )h    N)CategoricalIndexIndexIntervalIndex
MultiIndexSeriescaseg      ?Zxxxmethodintersectionunion
differencesymmetric_differencec              	   C   s4   d}t jt|d t| |||d W 5 Q R X d S )Nz!Input must be Index or array-likematchsort)pytestraises	TypeErrorgetattr)idxr   r   r   msg r   J/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/indexes/multi/test_setops.pytest_set_ops_error_cases   s    r   klassc              	   C   s   | dd d }| d d }|t k	r,||j}|j||d}|d krL| }n|}t|| d}tjt|d |jdddg|d W 5 Q R X d S )	N      r   .other must be a MultiIndex or a list of tuplesr         )	r   valuesr	   sort_valuestmassert_index_equalr   r   r   )r   r   r   firstsecondZ	intersectexpectedr   r   r   r   test_intersection_base   s    

r(   c              	   C   s   | d d d }| d d }|t k	r,||j}|j||d}|d krL| }n|}t|| d}tjt|d |jdddg|d W 5 Q R X d S )	Nr   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   test_union_base.   s    

r)   c              	      s   | dd   | d d }| j  |d}|d kr6| }||sDtt||  fddtjtt	fD }|D ]}| j ||d}t|| qnd}t
jt|d | j ddd	g|d W 5 Q R X d S )
N   r   c                    s   g | ]}| j qS r   r!   .0r   r&   r   r   
<listcomp>O   s     z(test_difference_base.<locals>.<listcomp>r   r   r   r   r    )r   r"   equalsAssertionErrorr#   r$   nparrayr   listr   r   r   )r   r   answerresultcasesr   r   r   r.   r   test_difference_baseC   s    r8   c              	      s   | dd  }| d d  | ddg }|j  |d}|d krB| }t||  fddtjttfD }|D ]}|j ||d}t|| qld}tj	t
|d |j dd	d
g|d W 5 Q R X d S )Nr   r   r   r   c                    s   g | ]}| j qS r   r+   r,   r.   r   r   r/   e   s     z-test_symmetric_difference.<locals>.<listcomp>r   r   r   r    )r   r"   r#   r$   r2   r3   r   r4   r   r   r   )r   r   r%   r5   r6   r7   r   r   r   r.   r   test_symmetric_differenceY   s    r9   c               	   C   s   t jddgddggddgd} tt | | A }W 5 Q R X |j| jksLt|  ddg}tt | |A }W 5 Q R X |jd d gkstd S )NabABnames)	r   from_productr#   assert_produces_warningFutureWarningr?   r1   copyrename)r   r6   idx2r   r   r   $test_multiindex_symmetric_differenceo   s    rF   c                 C   s    | j r
t| d d j std S )Nr   )emptyr1   r   r   r   r   
test_empty|   s    
rI   c              	   C   sl  | }|j | dd  |d}| d d j}|d kr8t|}tj|d| jd}t|tsXt||sft|j| jksvtt	
|| | j | |d}| d d }||st|j| jkst| dd  j | |d}| d d }||st|j| jkst| d d j | |d}| d d }||s,t|j| jks>t| dd  }ddg|_|j ||d}|jdksrt| j | dd |d}t|dkst|j |j|d}||d d st|j g |d}||st|j|jkst|j d	g|d}td
ddddg}|j|_|j|jks2td}tjt|d |j dddddg|d W 5 Q R X d S )Nr   r   )Z	sortorderr?   foobaz)NNr   rK   one)barrN   )rL   two)rK   rP   )quxrN   )rQ   rP   r   r   r   r    r*   r   )r   r!   sortedr   from_tuplesr?   
isinstancer1   r0   r#   r$   Z	sortlevellenr   r   r   )r   r   r%   r6   valsr'   Zchunkletr   r   r   r   test_difference   sT    
rW   c                  C   s0   t ddgddgg} | g }t||  d S )Nr   r   r:   r;   r   r@   r   r#   r$   r   r6   r   r   r   test_difference_sort_special   s    
rZ   zNot implemented.reasonc                  C   sJ   t ddgddgg} | jg dd}t ddgddgg}t|| d S Nr   r   r:   r;   Tr   rX   )r   r6   r'   r   r   r   !test_difference_sort_special_true   s    r^   c               	   C   s   t dtddgddgg} t dtddgdd	gg}d
}tjt|d | |}W 5 Q R X t||  | j|dd}t||  d S )Nr   2000r   r:   r;   r    r*   cdz0sort order is undefined for incomparable objectsr   Fr   )	r   r@   pd	Timestampr#   rA   RuntimeWarningr   r$   )r   otherr   r6   r   r   r   !test_difference_sort_incomparable   s    rf   c               	   C   sl   t dtddgddgg} t dtddgdd	gg}d
}tjt|d | j|dd W 5 Q R X d S )Nr   r_   r   r:   r;   r    r*   r`   ra   zKThe 'sort' keyword only takes the values of None or False; True was passed.r   Tr   )r   r@   rb   rc   r   r   
ValueErrorr   )r   re   r   r   r   r   &test_difference_sort_incomparable_true   s
    rh   c                 C   s   | d d d d d }| dd  }|j ||d}|d krHt||   t|| sXt| j | |d}t||  | j | d d |d}t||  | j}| d d j |dd  |d}|d krt||  n|| std S )Nr   r   r    r   r   r*   )r
   r#   r$   r"   equalContentsr1   r!   r0   )r   r   piece1piece2Z	the_uniontuplesr6   r   r   r   
test_union   s    rm   z9Length of names must match number of levels in MultiIndex)r\   r   c              	   C   sj   t dddg}|| }d|ks$td|ks0td}tjt|d | |}W 5 Q R X ||sftd S )Nr<   r=   CrM   z'The values in the array are unorderabler   )r   r
   r1   r#   rA   rd   r0   )r   re   r6   r   Zresult2r   r   r   test_union_with_regular_index  s    
ro   c           	      C   s   | d d d d d }| dd  }|j ||d}|d krLt|| dd  t|| dd sdt| j | |d}t||  | d d j | dd  |d}| d d }||st| j}|  |}|| std S )Nr   r   r    r   r   r   )r	   r#   r$   ri   r1   r0   r!   )	r   r   rj   rk   Zthe_intrG   r'   rl   r6   r   r   r   test_intersection  s    
rp   c                 C   s   |   d}d g| j }t| |||d}t| || |d|}t|| t| ||d d |d}t| || d d |d|}t|| d S )Ncategoryr   r   )Zto_flat_indexastypenlevelsr   rD   r#   r$   )r   r   r   re   Z	res_namesr6   r'   r   r   r   test_setop_with_categorical3  s     rt   c              	   C   s   t tddd}| j||d}t| jg g| j d d}tj||dd | jt	|d d |d}t| jg g| j | j
d}tj||dd d	}tjt|d
 | jt	||d W 5 Q R X d S )Nr    rK   )namer   levelscodesr?   T)exactr   r   r   )r   ranger	   r   rw   rs   r#   r$   r2   Zasarrayr?   r   r   r   )r   r   re   r6   r'   r   r   r   r   test_intersection_non_objectC  s    r{   c                  C   sF   t ddgddgg} t| j| dd|  t| j| d d|  d S Nr   r   r:   r;   Fr   r   r@   r#   r$   r	   rH   r   r   r   test_intersect_equal_sortU  s    r~   c                  C   sF   t ddgddgg} t ddgddgg}t| j| dd| d S r]   r}   )r   Zsorted_r   r   r   test_intersect_equal_sort_true\  s    r   slice_c                 C   s\   t ddgddgg}||  }t||| t||| t|j|dd| d S r|   )r   r@   r#   r$   r
   )r   r   re   r   r   r   test_union_sort_other_emptyd  s
    r   c                  C   sV   t ddgddgg} | d d }| j|dd}t ddgddgg}t|| d S r]   )r   r@   r
   r#   r$   )r   re   r6   r'   r   r   r    test_union_sort_other_empty_sortr  s
    r   c               	   C   sv   t dtdgddgg} tt | | d d }W 5 Q R X t||  | j| d d dd}t||  d S )Nr   r_   r:   r;   Fr   )	r   r@   rb   rc   r#   rA   rd   r
   r$   rY   r   r   r   "test_union_sort_other_incomparable}  s    r   c               	   C   sP   t dtdgddgg} tjtdd | j| d d dd W 5 Q R X d S )	Nr   r_   r:   r;   zCannot comparer   Tr   )r   r@   rb   rc   r   r   r   r
   rH   r   r   r   'test_union_sort_other_incomparable_sort  s    r   c               	   C   sL   t ddgddgg} | jd }d}tjt|d | | W 5 Q R X d S )Nr:   r;   r   r   z<Can only union MultiIndex with MultiIndex or Index of tuplesr   )r   r@   rw   r   r   NotImplementedErrorr
   )mir   r   r   r   r   "test_union_non_object_dtype_raises  s
    
r   c                  C   sZ   t g g} t jddgddggddgd}| |}t ddgddgg}t|| d S )Nr   r   r    r*   r:   r;   r>   )r   from_arraysr
   r#   r$   )r   mi2r6   r'   r   r   r   %test_union_empty_self_different_names  s
    
r   c                  C   s`   t jddgddggddgd} td}| |}tj| |d	d
 || }tj| |d	d
 d S )Nr   r   r    r*   r:   r;   r>   r   F)Zcheck_names)r   r   rb   Z
RangeIndexr
   r#   r$   )r   riZresult_leftZresult_rightr   r   r   &test_union_multiindex_empty_rangeindex  s    


r   c              	   C   s\   t ddgddgg}t ddgddgg}tjtdd t|| |dd	 W 5 Q R X d S )
Nr:   r;   r   r   r`   zThe 'sort' keyword only takesr   Tr   )r   r@   r   r   rg   r   )r   Zidx1rE   r   r   r   test_setops_disallow_true  s    r   )rl   
exp_tuplesZval1Ztest1Zval2Ztest2c                 C   sV   t j| ddgd}t jdddgddgd}||}t j|ddgd}t|| d S )Nr%   r&   r>   r   r   )r   rS   r	   r#   r$   )rl   r   leftrightr6   r'   r   r   r   test_intersect_with_duplicates  s    
r   zdata, names, expected)r   r:   r;   )r   r   r`   ra   )r   r   r    c                 C   s<   t jg ddgd}t j| g|d}||}||ks8td S )Nr:   r;   r>   )r   rS   Z_maybe_match_namesr1   )datar?   r'   r   r   r6   r   r   r   test_maybe_match_names  s    
r   c                  C   st   t jddgddggddgd} t jddgddggddgd}| |}t jddgddggd dgd}t|| d S )	Nr   r   r    r*   r`   r;   r>   r:   r   r   r	   r#   r$   )mi1r   r6   r'   r   r   r   'test_intersection_equal_different_names  s
    
r   c                  C   sF   t jdgdggddgd} t dgdgg}| |}t|| d S )Nr   r    r`   r;   r>   r   )r   r   r6   r   r   r   !test_intersection_different_names  s    
r   c                 C   sh   t d| d| gddddgg}t d| dgdddgg}||}t d| gddgg}t|| d S )Nr    r*   r   r         @r   )Znulls_fixturer   r   r6   r'   r   r   r   3test_intersection_with_missing_values_on_both_sides  s
    
r   c                  C   sN   t dtjgddgg} t dtjdgdddgg}| |}t|| d S )Ng      ?r   r    r   r*   )r   r   r2   nanr
   r#   r$   )r   r   r6   r   r   r   test_union_nan_got_duplicated  s    
r   c                 C   s  | j st| ttfrd S | jjdkr>tjjdd}|j	
| |  j }t|dgt| g}t|d g| dgt|d  g}||}| }|jd jtjkr|ddk  r||jd t|jd g}t|| ||}t|| d S )Nr`   z?sort_values() call raises bc complex objects are not comparabler[   r   r   l            )rG   rT   r   r   Zdtypekindr   markxfailnodeZ
add_markeruniquer!   tolistr   r   rU   r
   r"   rw   r2   Zuint64Zget_level_valuesallZ
set_levelsrr   intr#   r$   )indexrequestr   r!   r   r   r6   r'   r   r   r   test_union_duplicates  s&    &
$
r   z'levels1, levels2, codes1, codes2, names r   r   Zname1Zname2c              	   C   sR   t | ||d}t |||d}||}tjtdd |jdksDtW 5 Q R X d S )Nrv   zMultiIndex.lexsort_depthr   r   )r   r	   r#   rA   rB   Zlexsort_depthr1   )Zlevels1Zlevels2Zcodes1Zcodes2r?   r   r   Zmi_intr   r   r   test_intersection_lexsort_depth-  s
    
r   )8Znumpyr2   r   Zpandasrb   r   r   r   r   r   Zpandas._testingZ_testingr#   r   Zparametrizer   r3   r4   r(   Zarm_slowr)   r8   r9   rF   rI   rW   rZ   r   r^   rf   rh   rm   rg   ro   rp   rt   r{   r~   r   slicer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    

B
	
 






	 





	