U
    O8cH                     @   st   d Z ddlZddlmZmZmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZ ddlZG dd dZG dd dZdS )	z-Test functions for 1D array set operations.

    N)assert_array_equalassert_equalassert_raisesassert_raises_regex)ediff1dintersect1dsetxor1dunion1d	setdiff1duniquein1disinc                   @   s0  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dejdddgejddejdfejdddgejdejdddgejdddfejdddgejdejejdfgdd Zej	
dejdddgejdddejddddgejdfejdddgejdejdgejddejdddgejdfejdddgejdddejddddgejdfejdddgejdddejddddgejdfgd d! Zej	
d"dd#d$gd%d& Zej	
d"dd#d$gd'd( Zd)d* Zej	
d"dd#d$gd+d, Zej	
d"dd#d$gd-d. Zd/d0 Zej	
d"dd#d$gd1d2 Zej	
d"dd#gd3d4 Zd5d6 Zej	
d7ejejfejejfejej fej ejfejejfejejfgej	
d"dd#d$gd8d9 Z!ej	
d"dd#d$gd:d; Z"d<d= Z#d>d? Z$d@dA Z%dBdC Z&dDdE Z'dFdG Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dS )R
TestSetOpsc              	   C   s   t ddddg}t dddddg}t dddg}t||dd}t|| t dddddg}t dddddddg}t dddg}t||}t|| tg tg g  d S )	N                  Tassume_unique)nparrayr   r   )selfabeccZed r   D/tmp/pip-unpacked-wheel-fd_gsd75/numpy/lib/tests/test_arraysetops.pytest_intersect1d   s    


zTestSetOps.test_intersect1dc                 C   sR   G dd d}| }t ||}t|| t dddgdddg}t|dddg d S )Nc                   @   s   e Zd Zdd ZdS )z4TestSetOps.test_intersect1d_array_like.<locals>.Testc                 S   s
   t dS )Nr   )r   aranger   r   r   r   	__array__%   s    z>TestSetOps.test_intersect1d_array_like.<locals>.Test.__array__N)__name__
__module____qualname__r#   r   r   r   r   Test$   s   r'   r   r   r   )r   r   )r   r'   r   resr   r   r   test_intersect1d_array_like"   s    

z&TestSetOps.test_intersect1d_array_likec              
   C   s*  t ddddg}t ddddg}t||ddd\}}}t dddg}t|| t|| | t|| | t dddddddg}t ddddddddg}t||dd	\}}}t ddddg}t|| t|| | t|| | t ddd
dgddddgg}t ddddgddddgg}t||ddd\}}}t ||j}t ||j}	t ddddg}
t|
||  t|
||	  t ddd
ddgdddddgg}t ddddgddddgg}t||dd	\}}}t ||j}t ||j}	t dddg}
t|
||  t|
||	  d S )Nr   r   r   r      T)r   return_indices   )r+   r   r      
      	   )r   r   r   r   Zunravel_indexshape)r   r   r   r   i1i2eeZefZui1Zui2Zear   r   r   test_intersect1d_indices.   s<    

"z#TestSetOps.test_intersect1d_indicesc                 C   s   t ddddg}t dddddg}t dddg}t||}t|| t dddg}t dddg}t ddddddg}t||}t|| t ddddg}t ddddg}t ddddddg}t||}t|| tg tg g  d S )	Nr   r   r   r   r   r   r*   r,   )r   r   r   r   r   r   r   r   r   r   r   r   test_setxor1dU   s     





zTestSetOps.test_setxor1dc                 C   s8  t g }t dg}t ddg}tg t| tdgt|dd tdgt|dd tddgt|ddd tg t| tdgt| tddd	gt|dd	d td
ddddgt|d
dgddgd tdd	gt|d	d tdddgt|ddgd tddgt|dd td
ddgt|d
dgd d S )Nr   r   r   )to_begin)to_end)r8   r9   r   r0   r   r*   r,   )r   r   r   r   )r   Z	zero_elemZone_elemZtwo_elemr   r   r   test_ediff1dm   s"    
zTestSetOps.test_ediff1dzary, prepend, append, expectedr   r   r   dtypeNr9   r   r   r8         ?g      @g      "@c              	   C   s2   d |}tt| t|||d W 5 Q R X d S )Nz dtype of `{}` must be compatiblearyr9   r8   )formatr   	TypeErrorr   )r   r@   prependappendexpectedmsgr   r   r   !test_ediff1d_forbidden_type_casts   s    
z,TestSetOps.test_ediff1d_forbidden_type_castszary,prepend,append,expectedi   i  r   r   ic                 C   s.   t j|||d}t|| |j|jks*td S )Nr?   )r   r   r   r=   AssertionError)r   r@   rC   rD   rE   actualr   r   r   test_ediff1d_scalar_handling   s    
z'TestSetOps.test_ediff1d_scalar_handlingkindsorttablec                    s  dd }t j|tgdhd  fdd}t ddd	d
g}t dddgddd	gdddgg}||| ddg}d}||| t d	}||| ||| ||| |d| ||d |dd dkrg }	||	| |||	 ||	|	 tt jt jfD ]}
dkr|
t jkrq |
t jt jhkrFt jdddg|
d}n|
thkrbt dddg}t jg |
d}||| ||| ||| q d S )Nc                 S   s   t |  }| |kS )N)r   asarrayflattentolist)r   r   r   r   r   
_isin_slow   s    z(TestSetOps.test_isin.<locals>._isin_slowr   )ZotypesZexcludedc                    s&   t | |d} | |}t|| d S )NrK   )r   r   )r   r   xyZ	isin_slowrK   r   r   assert_isin_equal   s    
z/TestSetOps.test_isin.<locals>.assert_isin_equal   r   r   r   r.         r         !   )r0   r,   )r   r*   )r0   r   r   r*   rM   r<   TF)r   Z	vectorizeboolr!   reshaper   int64float64)r   rK   rQ   rV   r   r   r   dfrS   r=   arZempty_arrayr   rU   r   	test_isin   s@    "













zTestSetOps.test_isinc                 C   s  dD ]h}ddddg}dddddg| }t dd	ddg}t||d|d
}t|| d|d< t d	d	ddg}t||d|d
}t|| d\|d< |d< t dd	dd	g}t||d|d
}t|| t ddddddddddddddg}dddg| }d	dd	ddddddd	dd	d	d	g}t|||d}t|| |dddg|  }dddddddddddd	ddg}t|||d}t|| t ddddg}t dddddg| }t dd	ddg}t|||d}t|| t dddddg}t ddddddg| }t dd	dddg}t|||d}t|| t ddg}t ddg| }t d	d	g}t|||d}t|| qt dg}t dg}t d	g}t|||d}t|| |dkrttg g |dg  d S )Nr   r.   r   r   r   r   r   r   TFr   rK   r,   r   )r   r,   rR   >   NrL   r   r   r   r   )r   rK   multr   r   r   r   r   r   r   	test_in1d  sp    



&    
   




zTestSetOps.test_in1dc              
   C   sZ   t ddddddddg}t ddg}t ddddddddg}t||}t|| d S )Nr   r   r   ra   eTFrg   r6   r   r   r   test_in1d_char_arrayA  s
    
zTestSetOps.test_in1d_char_arrayc                 C   s   dD ]^}t ddddddddddddddg}dddg| }tt t|||dt||d|d	 q|d
krdD ]t}t jddddddddddddddgt jd}dddg| }t j|t jd}tt t|||dt||d|d	 qpdS )zTest in1d's invert parameterre   r   r   r   r   r   rR   TinvertrK   >   NrL   r<   N)r   r   r   rm   r   float32)r   rK   rh   r   r   r   r   r   test_in1d_invertJ  s     &"zTestSetOps.test_in1d_invertc                 C   s   t ddd}t dddd}t dddd}t ddddddg}tt||d|d	| tt||d|d	| tt||d|d	| tt||d|d	| d S )
Nr*   r   r   r0   ?   rY   FTrf   )r   r!   r^   r   r   r   )r   rK   r   r   Zlong_br   r   r   r   test_in1d_ravel_  s,    


zTestSetOps.test_in1d_ravelc                 C   s   t jdddddddgt jd}t jddddgt jd}t jdddddddgtd}t|t|| tt |t||d	d
 t jddddgt jd}t jddddddgt jd}t d	dd	d	g}t||d	d}t|| dS )z(Hit the standard isin code with integersr   r   r   g    eAr<   r   r   r   Trm   r   Fr   N)r   r   r_   r]   r   r   rm   )r   r   r   rE   r   r   r   r   r   !test_in1d_hit_alternate_algorithmt  s    z,TestSetOps.test_in1d_hit_alternate_algorithmc                 C   s`   t ddg}t dddg}t ddg}t|t|||d tt |t||d|d dS )z&Test that in1d works for boolean inputTFrR   rl   N)r   r   r   r   rm   )r   rK   r   r   rE   r   r   r   test_in1d_boolean  s    
zTestSetOps.test_in1d_booleanc                 C   sb   t jd}|jdddd}|jdddd}t||}|d}|d}t|t|||d dS )z(Test that in1d works for timedelta inputr   d   r.   )sizetimedelta64[s]rR   N)r   randomZRandomStaterandintr   astyper   )r   rK   Zrstater   r   truthZa_timedeltaZb_timedeltar   r   r   test_in1d_timedelta  s    


zTestSetOps.test_in1d_timedeltac              	   C   s@   t jdddgdd}|}tt t||dd W 5 Q R X d S )Nr   r   r   rw   r<   rM   rR   )r   r   pytestraises
ValueErrorr   r   r   r   r   r   r   test_in1d_table_timedelta_fails  s    z*TestSetOps.test_in1d_table_timedelta_failszdtype1,dtype2c           	   	   C   s   t |t j}t jddddg|d}|r>t jdddg|d}nt jdddg|d}t ddddg}|d	kot|t jko|t jk|t jko|t jkf}|rtjt	d
d t
|||d W 5 Q R X ntt
|||d| dS )z7Test that in1d works as expected for mixed dtype input.r   r   r<   i      TFrM   zexceed the maximum)matchrR   N)r   Z
issubdtypeZsignedintegerr   anyint8int16r}   r~   RuntimeErrorr   r   )	r   Zdtype1Zdtype2rK   Zis_dtype2_signedar1ar2rE   Zexpect_failurer   r   r   test_in1d_mixed_dtype  s    
z TestSetOps.test_in1d_mixed_dtypec                 C   s   t jd D ]}t jdddgtd}t jddddg|d}t jdddgtd}tt|||d| || }}t jddddgtd}tt|||d| q
dS )z4Test that in1d works as expected for bool/int input.
AllIntegerTFr<   r   rR   N)r   	typecodesr   r]   r   r   )r   rK   r=   r   r   rE   r   r   r   test_in1d_mixed_boolean  s    
z"TestSetOps.test_in1d_mixed_booleanc                 C   s<   d g}t dgd }t dg}t ||}t|| d S Nr   r.   Frg   r   r   r   rE   resultr   r   r   test_in1d_first_array_is_object  s
    z*TestSetOps.test_in1d_first_array_is_objectc                 C   s:   d}t d gd }t dg}t ||}t|| d S r   rg   r   r   r   r    test_in1d_second_array_is_object  s
    z+TestSetOps.test_in1d_second_array_is_objectc                 C   s<   d g}t d gd }t dg}t ||}t|| d S )Nr.   Trg   r   r   r   r    test_in1d_both_arrays_are_object  s
    z+TestSetOps.test_in1d_both_arrays_are_objectc                 C   s`   t dtfdtfg}t jdg|d}t jdgd |d}t dg}t ||}t|| d S )NZfield1Zfield2)r   Nr<   r.   T)r   r=   intobjectr   r   r   )r   dtr   r   rE   r   r   r   r   +test_in1d_both_arrays_have_structured_dtype  s    z6TestSetOps.test_in1d_both_arrays_have_structured_dtypec                 C   sf  t jddgtd}t jddgtd}t ddg}t ||}t|| t j||dd}t|t | t jdddgtd}|d d }t jdddgtd}|d d }t ddg}t ||}t|| t j||dd}t|t | t jdd	dgtd}|d d }t jddgtd}t dd
g}t ||}t|| t j||dd}t|t | d S )N)r   r   r<   Trr   )r   r   r   r:   r   r   F)r   r   r   r   r   rm   r   r   r   r   'test_in1d_with_arrays_containing_tuples  s0    


z2TestSetOps.test_in1d_with_arrays_containing_tuplesc                 C   s"  t dddddg}t dddddg}ttt||d	d
 t jdddddgtd}t jdddddgtd}ttt||dd
 t jt jfD ]}t jdddddg|d}t jdt |j	g|d}tt
t||dd
 t j||dd
}t|dgdgd   t j||dd
}t|dgdgd   qdS )z&Test that in1d raises expected errors.r   r   r   r   r   r*   r,   r.   Z	quicksortrR   r   r   r<   rM   r:   NTFrL   )r   r   r   r   r   r   int32r_   Ziinfomaxr   r   )r   r   r   Zobj_ar1Zobj_ar2r=   Zoverflow_ar2r   r   r   r   test_in1d_errors  s(       zTestSetOps.test_in1d_errorsc           	   	   C   s   t dddddg}t dddddddg}t ddddddg}t||}t|| t dddgdddgg}t dddddg}t ddddddg}t||}t|| tg tg g  d S )Nr   r   r   r   r   r   r   )r   r   r	   r   )	r   r   r   r   r   rS   rT   Zezzr   r   r   test_union1d3  s    



zTestSetOps.test_union1dc              
   C   s   t ddddddddg}t dddddddg}t ddg}t||}t|| t d}t d	}t d	d
g}t||}t|| tg tg g  t dt j}tt|g jt j d S )Nr*   r   r   r   r   r   r         rX   r   )r   r   r
   r   r!   Zuint32r   r=   r6   r   r   r   test_setdiff1dE  s    





zTestSetOps.test_setdiff1dc                 C   sJ   t dddg}t dddg}t ddg}t||dd}t|| d S )Nr   r   r   r   r   Tr   )r   r   r
   r   )r   r   r   rE   rI   r   r   r   test_setdiff1d_uniqueW  s
    z TestSetOps.test_setdiff1d_uniquec                 C   s<   t dddg}t dddg}tt||t dg d S )Nr   r   r   s)r   r   r   r
   r   r   r   r   test_setdiff1d_char_array^  s    z$TestSetOps.test_setdiff1d_char_arrayc              	   C   sb   t dddddg}t dddddddg}t||}t||}t||}t||}t|| d S )	Nr   r   r   r   r,   r0   r   r   )r   r   r   r   r	   r
   r   )r   r   r   Zc1Zaux1Zaux2c2r   r   r   test_manywaysc  s    



zTestSetOps.test_manyways).r$   r%   r&   r    r)   r5   r7   r;   r}   markparametrizer   r   r_   nanrn   r   rG   r   r`   r   rJ   rd   ri   rk   ro   rq   rs   rt   r|   r   uint8Zuint16r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   '


<
=	













!"r   c                   @   sn   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgdd Z
dd Zdd Zdd Zdd Zdd ZdS )
TestUniquec                 C   s  dd }dddddddgd }ddddg}ddd	dg}ddd	dd	ddgd }t ddddgd}g }|t jd
  |t jd  |d |d |D ].}t ||}	t ||}
||	|
|||| qd}t t||}	||	d d < t t||}
||
d d < ||	|
|||| ddg}t tt	|||}	t tt	|||}
||	|
|||| dddg}	t
t |	ddg dddg}dddg}d	dd	dddg}t|}t
|| t|dd\}}t
|| t
|| t d}d|d< t j|dd\}}t
|t d g }t j|ddd }t j|ddd }t j|ddddd  \}}t|jt j t|jt j t|jt j t|jt j dt jdt jg}ddt jg}dd	dg}ddd	dg}dddg}tt || tt j|dd||f tt j|dd||f tt j|dd||f dt jdtdt jtdt jg}ddtdt jg}dd	dg}ddd	ddg}dddg}tt || tt j|dd||f tt j|dd||f tt j|dd||f t d }t d!|t d"|g}t d"t d!|g}dd	dg}ddd	dg}dddg}tt || tt j|dd||f tt j|dd||f tt j|dd||f t d }t dd#|t dd$|g}t dd$t dd#|g}dd	dg}ddd	dg}dddg}tt || tt j|dd||f tt j|dd||f tt j|dd||f t jgd% }t jg}d	g}d	d	d	d	g}d%g}tt || tt j|dd||f tt j|dd||f tt j|dd||f d S )&Nc                 S   s  d}| d|}t| }t||| | d|}t| ddd\}}	t||| t|	|| | d|}t| ddd\}}	t||| t|	|| | d|}t| ddd\}}	t||| t|	|| | d|}t| ddd\}}
}t||| t|
|| t||| | d	|}t| ddd\}}
}t||| t|
|| t||| | d
|}t| ddd\}}
}t||| t|
|| t||| | d|}t| ddd\}}
}}t||| t|
|| t||| t||| d S )Nzcheck {0} failed for type {1}valuesreturn_indexTFreturn_inversereturn_countszreturn_index and return_inversezreturn_index and return_countsz return_inverse and return_countsz.return_index, return_inverse and return_counts)rA   r   r   )r   r   r2   r3   r   r   Zbase_msgrF   vjZj1Zj2Zj3r   r   r   	check_allr  sN    z,TestUnique.test_unique_1d.<locals>.check_allr   r   r   r   r.   r   r   r   AllFloatdatetime64[D]timedelta64[D]O) iy      ?        y      ?      )r   r   r   T)r   r   .)r   )r   r   g       @r>   )r   y       @      y      ?      ?        natz
2020-12-26z
2020-12-24Dhr   )r   multiplyextendr   rD   r   emptylenlistzipr   r   Z	chararrayzerosr   r=   Zintpr   complexZ
datetime64Ztimedelta64)r   r   r   r   r2   r3   r   typesr   ZaaZbbunqinvZa1Za2Za2_invZa1_idxZa3_idxZa3_invZuaZua_idxZua_invZua_cntr   Zall_nansr   r   r   test_unique_1dp  s    0










 







zTestUnique.test_unique_1dc                 C   s\   t t| jt t t| jdtfdtfg t tjttddd t tjttddd d S )Nr   r   r.   r   axis)	r   rB   _run_axis_testsr   r   r   Z	AxisErrorr   r!   r"   r   r   r   test_unique_axis_errors  s    z"TestUnique.test_unique_axis_errorsc                 C   s^   d}dddgdddgg}t |}tt|ddt|dd| tt|ddt|dd| d S )NzUnique failed on list of listsr   r   r   )r   rN   r   r   )r   rF   inpZinp_arrr   r   r   test_unique_axis_list!  s
    
z TestUnique.test_unique_axis_listc                 C   s  g }| tjd  | tjd  |d |d |dtfdtfg |dtfdtfg |D ]}| | qhd}tjdtjd		d
d
t}tjddgddggtd	}tt|dd|| d}tddgddgddgddgg}tddgg}tt|dd|| d S )Nr   r   r   r   r   r   z&Non-bitwise-equal booleans test failedr.   r<   r:   r   FTr   r   z"Negative zero equality test failedg       r   )r   r   r   rD   r   floatr   r!   r   r^   viewr]   r   r   r   )r   r   r=   rF   datar   r   r   r   test_unique_axis(  s"    

"zTestUnique.test_unique_axisr   r   r:   c              
   C   s<   t ddddddddg}t||d}t|ddddg d S )Nr   r   r   r   r   r   r   r   r   )r   r   rS   uniqr   r   r   test_unique_1d_with_axis>  s    z#TestUnique.test_unique_1d_with_axisc           
      C   sV  t jdt jd}t|ddddd\}}}}t|j|j t|t jdd t|t dg t|t ddg t|t dg t|d	dddd\}}}}t|j|j t|t jdd t|t g  t|t g  t|t g  d
}t j|d}tt	|D ]H}t
|}	|| dkr,d|	|< nd	|	|< tt||dt j|	d qd S )N)r   r   )r1   r=   r   T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   ranger   r   )
r   Zsingle_zeror   idxr   cntr1   Zmultiple_zerosr   Zexpected_shaper   r   r   test_unique_axis_zerosD  s:      

z!TestUnique.test_unique_axis_zerosc                 C   s   t jdddddddddddddddgdd}t j|d}t |}t j|d	d	d
\}}}d}t|j|j| t|j|j| d S )N@   r   r   r   r   rp   r   r<   T)r   r   z6Unique returned different results when asked for index)r   r   maZmasked_equalr   r   r   mask)r   rS   rT   r   Zv2r   r   rF   r   r   r   test_unique_maskedh  s    $
zTestUnique.test_unique_maskedc                 C   sD   d}dD ]6}t dgdgg|}t j|dd}t||||  qd S )Nz*sort order incorrect for integer type '%s'Zbhilqr:   r   r   r   )r   fmtr   r   r   r   r   r    test_unique_sort_order_with_axisu  s
    z+TestUnique.test_unique_sort_order_with_axisc           
   	   C   s  t ddddgddddgddddgddddgg|}d}t ddg}tt|||| d}t ddddgddddgg}tt|dd||| d}t dddgdddgdddgdddgg}tt|dd||| d}t ddgddggddgddggg|}t j|ddgdd}tt|dd|| t|dd	d	d	d
\}}}}	d}t|| || d}t|| | d}t|	t ddg| t|dd	d	d	d
\}}}}	d}t|d d |f | d}t|d d |f | d}t|	t dddg| d S )Nr   r   z&Unique with 1d array and axis=0 failedz&Unique with 2d array and axis=0 failedr   z&Unique with 2d array and axis=1 failedz&Unique with 3d array and axis=2 failedr   Tr   z-Unique's return_index=True failed with axis=0z/Unique's return_inverse=True failed with axis=0z.Unique's return_counts=True failed with axis=0z-Unique's return_index=True failed with axis=1z/Unique's return_inverse=True failed with axis=1z.Unique's return_counts=True failed with axis=1)r   r   rz   r   r   Ztake)
r   r=   r   rF   r   Zdata3dr   r   r   r   r   r   r   r   ~  s`    


*
  zTestUnique._run_axis_testsc                 C   sj   t ddt jt jt jg}t |}t j|dd}t|t dt jg t|t dt jt jt jg d S )Nr   F)Z	equal_nan)r   r   r   r   r   )r   r   r   Znot_unqr   r   r   test_unique_nanequals  s
    
z TestUnique.test_unique_nanequalsN)r$   r%   r&   r   r   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   n  s    *
$	,r   )__doc__Znumpyr   Znumpy.testingr   r   r   r   Znumpy.lib.arraysetopsr   r   r   r	   r
   r   r   r   r}   r   r   r   r   r   r   <module>   s   (    d