o
    1&iV^                     @   sn  d dl 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Z	d dl
mZmZ d dlmZmZmZmZ eddZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8G dTdU dUeeZ9G dVdW dWe9Z:G dXdY dYe9Z;G dZd[ d[e;Z<G d\d] d]e;Z=G d^d_ d_e;Z>G d`da dae;Z?G dbdc dce;Z@G ddde dee9ZAG dfdg dge9ZBG dhdi die9ZCeDdjkr5e E  dS dS )k    N)
namedtuple)TypingError)jitnjit)TestCaseenable_pyobj_flagsMemoryLeakMixincompile_functionPointabc                 C   s*   | dd dd |D i } td| t S )NZinitializerz, c                 s   s    | ]}t |V  qd S N)repr).0arg r   @C:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_sets.py	<genexpr>   s    z-_build_set_literal_usecase.<locals>.<genexpr>Z	build_set)joinr	   globals)codeargsr   r   r   _build_set_literal_usecase   s   r   c                 C      d}t || S )Nz@if 1:
    def build_set():
        return {%(initializer)s}
    r   r   r   r   r   r   set_literal_return_usecase   s   
r   c                 C   r   )Nz^if 1:
    def build_set():
        my_set = {%(initializer)s}
        return list(my_set)
    r   r   r   r   r   set_literal_convert_usecase   s   
r   c                  C   s   t  } | d t| S N   )setaddlensr   r   r   empty_constructor_usecase'   s   
r&   c                 C   s   t | }t|S r   )r!   r#   r   r%   r   r   r   constructor_usecase,   s   r(   c                 C   s$   t | }g }|D ]}|| q|S r   r!   append)r   r%   lvr   r   r   iterator_usecase0   s
   r-   c                 C   s,   t  }||  || || t|S r   )r!   updatelist)r   r   cr%   r   r   r   update_usecase7   s
   


r1   c                 C   s   t | dd  }t|S r   )r!   boolr'   r   r   r   bool_usecase>   s   r3   c                 C   $   t | }|D ]}|| qt|S r   )r!   remover/   r   r   r%   r,   r   r   r   remove_usecaseC      r7   c                 C   r4   r   )r!   discardr/   r6   r   r   r   discard_usecaseI   r8   r:   c                 C   s2   t | }tdD ]}|| || qt|S )Ni  )r!   ranger"   r9   r/   )r   ur,   r%   ir   r   r   add_discard_usecaseO   s
   
r>   c                 C   s6   t | }g }t|dkr||  t|dks|S Nr   )r!   r#   r*   pop)r   r%   r+   r   r   r   pop_usecaseV   s   rA   c                 C   s(   t | }g }|D ]	}|||v  q|S r   r)   )r   r   r%   r+   r,   r   r   r   contains_usecase]   s
   rB   c                 C      t | }|t | t|S r   )r!   difference_updater/   r   r   r%   r   r   r   difference_update_usecased      rF   c                 C   rC   r   )r!   intersection_updater/   rE   r   r   r   intersection_update_usecasei   rG   rI   c                 C   rC   r   )r!   symmetric_difference_updater/   rE   r   r   r   #symmetric_difference_update_usecasen   rG   rK   c                 C      t | t |S r   )r!   
isdisjointr   r   r   r   isdisjoint_usecases      rN   c                 C   rL   r   )r!   issubsetr   r   r   r   issubset_usecasev   rO   rQ   c                 C   rL   r   )r!   
issupersetr   r   r   r   issuperset_usecasey   rO   rS   c                 C   s    t | }|  t|t|fS r   )r!   clearr#   r/   r   r%   r   r   r   clear_usecase|      rV   c                 C   s(   t | }| }|  t|t|fS r   )r!   copyr@   r#   r/   r   r%   ssr   r   r   copy_usecase   s   r[   c                 C   s6   t | }|  | }|| d  t|t|fS r?   )r!   rT   rX   r"   r#   r/   rY   r   r   r   copy_usecase_empty   s
   r\   c                 C   s2   t | }|| | }|  t|t|fS r   )r!   r5   rX   r@   r#   r/   )r   r   r%   rZ   r   r   r   copy_usecase_deleted   s
   
r]   c                 C      t | }|t |}t|S r   )r!   
differencer/   r   r   sar%   r   r   r   difference_usecase   rG   rb   c                 C   r^   r   )r!   intersectionr/   r`   r   r   r   intersection_usecase   rG   rd   c                 C   r^   r   )r!   symmetric_differencer/   r`   r   r   r   symmetric_difference_usecase   rG   rf   c                 C   r^   r   )r!   unionr/   r`   r   r   r   union_usecase   rG   rh   c                 C   s   t | }|S r   )r!   rU   r   r   r   set_return_usecase   s   ri   c                 C   s   d S r   r   )xr   r   r   noop   s   rk   c                 C   s   d}| D ]}||7 }q|S )z!
    Expect a set of numbers
    r   r   rj   resr,   r   r   r   unbox_usecase   s   
rn   c                 C   s   d}| D ]}|t |7 }q|S )z 
    Expect a set of tuples
    r   r#   rl   r   r   r   unbox_usecase2   s   rp   c                 C   s"   | \}}|}|D ]}||7 }q|S )z2
    Expect a (number, set of numbers) tuple.
    r   rj   r   r   rm   r,   r   r   r   unbox_usecase3   s
   
rr   c                 C   s&   | \}}|}|D ]}|t |7 }q|S )z1
    Expect a (number, set of tuples) tuple.
    ro   rq   r   r   r   unbox_usecase4   s
   rs   c                 C   s&   |  d | | | t| t|fS N*   )r"   r.   r#   ra   sbr   r   r   reflect_simple   s   

rx   c                 C   sL   t |dkr
td} | d | | td}| | | t | t |fS )Nr    )g      &@g      6@g     @@g      F@g      E@)g     K@g     P@)r#   r!   r"   r.   rJ   )ra   rw   scr   r   r   reflect_conditional   s   


rz   c                 C   s   |  d trt   )r"   ZeroDivisionErrorr$   r   r   r   reflect_exception   s   
r|   c                 C   s   |  |  | |u S r   )r"   r@   rv   r   r   r   reflect_dual   s   r}   c                 C   s4   t  }g }| D ]}||vr|| || q|S r   )r!   r"   r*   )srcseenrm   r,   r   r   r   unique_usecase   s   

r   c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )BaseTestc                    s   t t|   td| _d S rt   )superr   setUprandomRandomrndself	__class__r   r   r      s   zBaseTest.setUpc                 C   s   t t| S r   )nparangeinttolistr   stopr   r   r   _range  rO   zBaseTest._rangec                    s8    fddt |D }ttjrtj|jdS |S )zD
        Choose *n* possibly duplicate items from sequence.
        c                    s   g | ]
} j tqS r   )r   choicer/   r   r=   r   seqr   r   
<listcomp>  s    z+BaseTest._random_choice.<locals>.<listcomp>dtype)r;   
isinstancer   Zndarrayarrayr   )r   r   nr+   r   r   r   _random_choice  s   zBaseTest._random_choicec                 C   s   |  t|}| ||S )z<
        Get a 1d array with many duplicate values.
        )r   r   sqrtr   r   r   r   r   r   r   duplicates_array  s   zBaseTest.duplicates_arrayc                 C   s   |  |d }| ||S )z;
        Get a 1d array with values spread around.
        g?)r   r   r   r   r   r   sparse_array  s   zBaseTest.sparse_arrayc                 C   sx   t |tr| |t t||D ]
\}}| || qd S t |tr4| |t | t|t| d S | || d S r   )r   tupleZassertIsInstancezip_assert_equal_unorderedr/   assertPreciseEqualsorted)r   r   r   r<   r,   r   r   r   r     s   

z BaseTest._assert_equal_unorderedc                    "   t dd  fdd}|S )NTZnopythonc                     s    |  } |  } || d S r   )r   )r   expectedgotcfuncpyfuncr   r   r   check*  rW   z)BaseTest.unordered_checker.<locals>.checkr   r   r   r   r   r   r   unordered_checker(     zBaseTest.unordered_checker)__name__
__module____qualname__r   r   r   r   r   r   r   __classcell__r   r   r   r   r      s    
r   c                   @   s0   e Zd Zdd Zdd ZefddZdd Zd	S )
TestSetLiteralsc                 C   s(   t |}| }| }| || ||fS r   )r   r   )r   r   r   r   r   r   r   r   r   3  s
   zTestSetLiterals.checkc                 C   s   t d}| | d S )N)r          r   )r   r   )r   r   r   r   r   test_build_set:  s   zTestSetLiterals.test_build_setc                 C   sH   t d}| | t d}| |\}}| t| t|  d S )N)r           @y              @r   )r   r   )r   r   ZassertIstyper@   )r   flagsr   r   r   r   r   r   test_build_heterogeneous_set>  s
   
 z,TestSetLiterals.test_build_heterogeneous_setc                 C   sH   t | d}t|}tdd|}| }| }| t|t| d S )N2   Tr   )r/   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   test_build_set_nopythonE  s   z'TestSetLiterals.test_build_set_nopythonN)r   r   r   r   r   r   r   r   r   r   r   r   r   1  s
    r   c                   @   sd  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWS )XTestSetsc                    sd   t tdd     ttdd  fdd}|d |d d S )NTr   c                    s    |  |  d S r   r   )r   r   r   r   r   X  s   z(TestSets.test_constructor.<locals>.check   )r&   r   r   r(   r   r   r   r   r   r   r   test_constructorQ  s   zTestSets.test_constructorc                 C   s4   t }tdd|}| d}| ||t| d S )NTr   r   )ri   r   r   assertEqualr!   )r   r   r   r   r   r   r   test_set_return^  s   
zTestSets.test_set_returnc                 C   .   t }| |}|| d || d d S Nr   )r-   r   r   r   r   r   r   r   test_iteratore     
zTestSets.test_iteratorc                 C   s<   t }| |}| d}| d}| d}|||| d S Nr   )r1   r   r   r   )r   r   r   r   r   r0   r   r   r   test_updatel  s   



zTestSets.test_updatec                 C   s4   t }| |}| d}|d d d }||| d S )Nr   
   )r7   r   r   r   r   r   r   r   r   r   r   test_removeu  s
   

zTestSets.test_removec                 C   s|   |    t}tdd|}tt| d}|dd  }|d f}| t ||| W d    d S 1 s7w   Y  d S )NTr   r   r    r   )Zdisable_leak_checkr7   r   r   r!   r   assertRaisesKeyError)r   r   r   itemsr   r   r   r   r   test_remove_error}  s   
"zTestSets.test_remove_errorc                 C   s0   t }| |}| d}| d}||| d S r   )r:   r   r   r   r   r   r   test_discard  s
   


zTestSets.test_discardc                 C   sF   t }| |}d }}||kr| d\}}||ks||f|| dS )z
        Check that the insertion logic does not create an infinite lookup
        chain with deleted entries (insertion should happen at the first
        deleted entry, not at the free entry at the end of the chain).
        See issue #1913.
        Nr   )r>   r   r   r   r   r   r   test_add_discard  s   
zTestSets.test_add_discardc                 C       t }| |}|| d d S r   )rA   r   r   r   r   r   r   test_pop     
zTestSets.test_popc                    sD   t tdd  fdd}d}d}||| d S )NTr   c                        | | | | d S r   r   r   r   r   r   r        z%TestSets.test_contains.<locals>.checkr   )rB   r   r   )r   r   r   r   r   r   r   test_contains  s   

zTestSets.test_containsc                 C   sF   |  |}d}t||D ]\}}| |}| |}||| qd S )Nr    r   i  r   	itertoolsproductr   )r   r   r   sizesnanbr   r   r   r   r   _test_xxx_update  s   


zTestSets._test_xxx_updatec                 C      |  t d S r   )r   rF   r   r   r   r   test_difference_update     zTestSets.test_difference_updatec                 C   r   r   )r   rI   r   r   r   r   test_intersection_update  r   z!TestSets.test_intersection_updatec                 C   r   r   )r   rK   r   r   r   r    test_symmetric_difference_update  r   z)TestSets.test_symmetric_difference_updatec                    s   t dd  fdd}ttddg\}}||@ || ||B ||A g}dd |D }t||D ]	\}}||| q9d S )	NTr   c                    r   r   r   r   r   r   r   r     r   z(TestSets._test_comparator.<locals>.checkr      c                 S      g | ]}t |qS r   )r   r   rj   r   r   r   r         z-TestSets._test_comparator.<locals>.<listcomp>)r   mapr!   r   r   r   )r   r   r   r   r   r   r   r   r   _test_comparator  s   zTestSets._test_comparatorc                 C   r   r   )r   rN   r   r   r   r   test_isdisjoint  r   zTestSets.test_isdisjointc                 C   r   r   )r   rQ   r   r   r   r   test_issubset  r   zTestSets.test_issubsetc                 C   r   r   )r   rS   r   r   r   r   test_issuperset  r   zTestSets.test_issupersetc                 C   r   r   )rV   r   r   r   r   r   r   
test_clear  r   zTestSets.test_clearc                 C   sx   t }| |}|| d t}| |}| d}|| t}| |}|dd | d}|||t|d   d S )Nr   r    r    r         r   )r[   r   r   r\   r]   r#   )r   r   r   r   r   r   r   	test_copy  s   





zTestSets.test_copyc                 C   s.   t }| |}|| d || d d S )Nr    r   )r3   r   r   r   r   r   r   	test_bool  r   zTestSets.test_boolc                 C   sX   |  |}d\}}||| d}t||D ]\}}| |}| |}||| qd S )N)r   )r   r      r   ru   r   r   )r   r   r   r   r   r   r   r   r   r   r   _test_set_operator  s   



zTestSets._test_set_operatorc                 C      dt |d }td|t S )Nzrif 1:
        def operator_usecase(a, b):
            s = set(a) %(op)s set(b)
            return list(s)
        opoperator_usecasedictr	   r   r   r   r   r   r   r   make_operator_usecase     zTestSets.make_operator_usecasec                 C   r   )Nzif 1:
        def inplace_operator_usecase(a, b):
            sa = set(a)
            sb = set(b)
            sc = sa
            sc %(op)s sb
            return list(sc), list(sa)
        r   inplace_operator_usecaser   r   r   r   r   make_inplace_operator_usecase     z&TestSets.make_inplace_operator_usecasec                 C   r   )Nz\if 1:
        def comparison_usecase(a, b):
            return set(a) %(op)s set(b)
        r   comparison_usecaser   r   r   r   r   make_comparison_usecase     z TestSets.make_comparison_usecasec                 C   r   r   )r   rb   r   r   r   r   test_difference  r   zTestSets.test_differencec                 C   r   r   )r   rd   r   r   r   r   test_intersection!  r   zTestSets.test_intersectionc                 C   r   r   )r   rf   r   r   r   r   test_symmetric_difference$  r   z"TestSets.test_symmetric_differencec                 C   r   r   )r   rh   r   r   r   r   
test_union'  r   zTestSets.test_unionc                 C      |  | d d S )N&r   r  r   r   r   r   test_and*     zTestSets.test_andc                 C   r  )N|r  r   r   r   r   test_or-  r  zTestSets.test_orc                 C   r  )N-r  r   r   r   r   test_sub0  r  zTestSets.test_subc                 C   r  )N^r  r   r   r   r   test_xor3  r  zTestSets.test_xorc                 C   r  )Nz==r   r  r   r   r   r   test_eq6  r  zTestSets.test_eqc                 C   r  )Nz!=r  r   r   r   r   test_ne9  r  zTestSets.test_nec                 C   r  )Nz<=r  r   r   r   r   test_le<  r  zTestSets.test_lec                 C   r  )N<r  r   r   r   r   test_lt?  r  zTestSets.test_ltc                 C   r  )Nz>=r  r   r   r   r   test_geB  r  zTestSets.test_gec                 C   r  )N>r  r   r   r   r   test_gtE  r  zTestSets.test_gtc                 C   r  )Nz&=r   r  r   r   r   r   	test_iandH  r  zTestSets.test_iandc                 C   r  )Nz|=r!  r   r   r   r   test_iorK  r  zTestSets.test_iorc                 C   r  )Nz-=r!  r   r   r   r   	test_isubN  r  zTestSets.test_isubc                 C   r  )Nz^=r!  r   r   r   r   	test_ixorQ  r  zTestSets.test_ixorN).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  r  r  r  r  r  r  r   r"  r#  r$  r%  r   r   r   r   r   O  sX    	
	r   c                   @      e Zd ZdZdd ZdS )TestFloatSetsz-
    Test sets with floating-point keys.
    c                 C   s   t j|t jdt d S )Nr   g?)r   r   Zfloat32r   r   r   r   r   \  s   zTestFloatSets._rangeNr   r   r   __doc__r   r   r   r   r   r'  U  s    r'  c                   @   r&  )TestTupleSetsz$
    Test sets with tuple keys.
    c                 C   sL   t j|t jd}|d@ }|d@ t j}|d? d@ t j}tt|||S )Nr   l   UU*UU* l   *UU     r    )r   r   Zint64ZastypeZint32Zbool_r/   r   )r   r   r   r   r0   dr   r   r   r   d  s
   zTestTupleSets._rangeNr(  r   r   r   r   r*  `      r*  c                   @   r&  )TestUnicodeSetszR
    Test sets with unicode keys. For the purpose of testing refcounted sets.
    c                 C   s   dd t t|D S )Nc                 S   s   g | ]}d  |qS )zA{})formatr   r   r   r   r   q  s    z*TestUnicodeSets._range.<locals>.<listcomp>)r;   r   r   r   r   r   r   p  s   zTestUnicodeSets._rangeNr(  r   r   r   r   r.  l  r-  r.  c                   @   s   e Zd Zdd ZdS )TestSetsInvalidDtypec                 C   sf   t dd|}tg d}tg d}d}| t| ||| W d    d S 1 s,w   Y  d S )NTr   r   )r   r   r0   z!All Sets must be of the same typer   r!   assertRaisesRegexr   r   r   r   r   r   msgr   r   r   r   v  s   "z'TestSetsInvalidDtype._test_set_operatorN)r   r   r   r   r   r   r   r   r0  t  s    r0  c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestSetsInvalidc                 C      |  |}t|S r   )re   r/   rE   r   r   r   rf        
z,TestSetsInvalid.symmetric_difference_usecasec                 C   r6  r   )r_   r/   rE   r   r   r   rb     r7  z"TestSetsInvalid.difference_usecasec                 C   r6  r   )rc   r/   rE   r   r   r   rd     r7  z$TestSetsInvalid.intersection_usecasec                 C   r6  r   )rg   r/   rE   r   r   r   rh     r7  zTestSetsInvalid.union_usecasec                 C   s^   t dd|}tg d}d}d}| t| ||| W d    d S 1 s(w   Y  d S )NTr   r   r    r   r   zAll arguments must be Setsr1  r3  r   r   r   r     s   "z"TestSetsInvalid._test_set_operatorc                 C      |  tj d S r   )r   r5  rb   r   r   r   r   r	       zTestSetsInvalid.test_differencec                 C   r9  r   )r   r5  rd   r   r   r   r   r
    r:  z!TestSetsInvalid.test_intersectionc                 C   r9  r   )r   r5  rf   r   r   r   r   r    r:  z)TestSetsInvalid.test_symmetric_differencec                 C   r9  r   )r   r5  rh   r   r   r   r   r    r:  zTestSetsInvalid.test_unionc                 C   r   )Nzhif 1:
        def operator_usecase(a, b):
            s = a %(op)s b
            return list(s)
        r   r   r   r   r   r   r   r    r  z%TestSetsInvalid.make_operator_usecasec                 C   r   )Nzif 1:
        def inplace_operator_usecase(a, b):
            sa = a
            sb = b
            sc = sa
            sc %(op)s sb
            return list(sc), list(sa)
        r   r  r   r   r   r   r   r    r  z-TestSetsInvalid.make_inplace_operator_usecasec                 C   r   )NzWif 1:
        def comparison_usecase(a, b):
            return set(a) %(op)s b
        r   r  r   r   r   r   r   r    r  z'TestSetsInvalid.make_comparison_usecaseN)r   r   r   rf   rb   rd   rh   r   r	  r
  r  r  r  r  r  r   r   r   r   r5    s    r5  c                   @   sN   e Zd ZdZejdd Zdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )TestUnboxingz>
    Test unboxing of Python sets into native Numba sets.
    c                 c   sT    |  t}d V  W d    n1 sw   Y  |d ur(| t|j| d S d S r   )r   	TypeErrorassertRegexstr	exception)r   r4  raisesr   r   r   assert_type_error  s   zTestUnboxing.assert_type_errorc                    r   )NTr   c                    s    | } | } || d S r   r   )r   r   r   r   r   r   r     rW   z'TestUnboxing.check_unary.<locals>.checkr   r   r   r   r   check_unary  r   zTestUnboxing.check_unaryc                 C   s>   |  t}|tddg |tddg |ttd d S )Nr    r   y              ?y              @d   )rB  rn   r!   r;   r   r   r   r   test_numbers  s   
zTestUnboxing.test_numbersc                 C   s.   |  t}|tddg |tddg d S )N)r    r   )r   r   )r                   @)r   y              @)rB  rp   r!   r   r   r   r   test_tuples  s   
zTestUnboxing.test_tuplesc                 C   s"   |  t}|dtg df d S )Nr    )r   r   r   )rB  rr   r!   r   r   r   r   test_set_inside_tuple     
z"TestUnboxing.test_set_inside_tuplec                 C   s"   |  t}|dtddgf d S )Nr    )r   )r   )rB  rs   r!   r   r   r   r   test_set_of_tuples_inside_tuple  rH  z,TestUnboxing.test_set_of_tuples_inside_tuplec                 C   sh  d}t }tdd|}tddg}| | || W d    n1 s%w   Y  | |tddg | | |tddg W d    n1 sLw   Y  | | |dtddgf W d    n1 skw   Y  | | |tdtddg W d    n1 sw   Y  tddg}| ttf}|| W d    d S 1 sw   Y  d S )	Nzcan't unbox heterogeneous setTr   r    g      @rE  )r    )r   r   )	rk   r   r!   rA  r   r
   r   
IndexError
ValueError)r   r4  r   r   vallstr@  r   r   r   test_errors  s*   

"zTestUnboxing.test_errorsN)r   r   r   r)  
contextlibcontextmanagerrA  rB  rD  rF  rG  rI  rN  r   r   r   r   r;    s    
r;  c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )TestSetReflectionzE
    Test reflection of native Numba sets on Python set objects.
    c           
   	   C   s   t dd|}tg dtdgftg dtg dfg}|D ]H\}}t|}t|}|||}| ||) |||}	| |	| | || | |d |u |	d |u  ~~	W d    n1 scw   Y  q d S )NTr   )g      ?r   g      @g      @g        )g      @g      @g      @g       @g      "@r   )r   r!   assertRefCountr   r   )
r   r   r   Zsamplesdestr~   r   r   ZpyresZcresr   r   r   check_reflection  s"   

z"TestSetReflection.check_reflectionc                 C   r   r   )rT  rx   r   r   r   r   test_reflect_simple  r   z%TestSetReflection.test_reflect_simplec                 C   r   r   )rT  rz   r   r   r   r   test_reflect_conditional   r   z*TestSetReflection.test_reflect_conditionalc              	   C   s   t }tdd|}tg d}| |, | t || W d   n1 s)w   Y  | |tg d W d   dS 1 sCw   Y  dS )zd
        When the function exits with an exception, sets should still be
        reflected.
        Tr   r8  N)r    r   r   ru   )r|   r   r!   rR  r   r{   r   )r   r   r   r%   r   r   r   test_reflect_exception#  s   
"z(TestSetReflection.test_reflect_exceptionc                 C   sb   t }tdd|}tg d}| }|||}|||}| || | || | || dS )zf
        When the same set object is reflected twice, behaviour should
        be consistent.
        Tr   r8  N)r}   r   r!   rX   r   ZassertRefCountEqual)r   r   r   ZpysetZcsetr   r   r   r   r   test_reflect_same_set0  s   

z'TestSetReflection.test_reflect_same_setc                 C   sH   t ddt}tdg}dd |D }|| | dd |D | dS )zO
        When the set wasn't mutated, no reflection should take place.
        Tr   y              )@c                 S   r   r   idr   r   r   r   r   F  r   z8TestSetReflection.test_reflect_clean.<locals>.<listcomp>c                 S   r   r   rY  r   r   r   r   r   H  r   N)r   rk   r!   r   )r   r   r%   Zidsr   r   r   test_reflect_clean?  s
   
z$TestSetReflection.test_reflect_cleanN)
r   r   r   r)  rT  rU  rV  rW  rX  r[  r   r   r   r   rQ    s    rQ  c                   @   s    e Zd ZdZdd Zdd ZdS )TestExamplesz!
    Examples of using sets.
    c                 C   r   r   )r   r   r   r   r   r   r   r   test_uniqueP  r   zTestExamples.test_uniquec                 C   s   dd }|  |}|  d S )Nc                  S   s,   t d} t }|h d ||  |S )Nr    >   r    r   r   )r   Zuint64r!   r.   r"   )r=   Rr   r   r   implY  s
   

z9TestExamples.test_type_coercion_from_update.<locals>.impl)r   )r   r_  r   r   r   r   test_type_coercion_from_updateW  s   

z+TestExamples.test_type_coercion_from_updateN)r   r   r   r)  r]  r`  r   r   r   r   r\  K  s    r\  __main__)FZunittestcollectionsr   rO  r   r   Znumba.core.errorsr   numpyr   Znumbar   r   Znumba.tests.supportr   r   r   r	   r
   r   r   r   r&   r(   r-   r1   r3   r7   r:   r>   rA   rB   rF   rI   rK   rN   rQ   rS   rV   r[   r\   r]   rb   rd   rf   rh   ri   rk   rn   rp   rr   rs   rx   rz   r|   r}   r   r   r   r   r'  r*  r.  r0  r5  r;  rQ  r\  r   mainr   r   r   r   <module>   s    
			

6  DBC
