U
    ¿ÿjg[  ã                   @   s¢  d dl Z d dlmZ d dlZd dl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mZ d dlmZ d dlmZ d dl Z d dlmZ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-d0d1„ Z.d2d3„ Z/d4d5„ Z0d6d7„ Z1d8d9„ Z2d:d;„ Z3d<d=„ Z4d>d?„ Z5d@dA„ Z6dBdC„ Z7dDdE„ Z8dFdG„ Z9dHdI„ Z:dJdK„ Z;dLdM„ Z<dNdO„ Z=dPdQ„ Z>dRdS„ Z?dTdU„ Z@G dVdW„ dWeeƒZAG dXdY„ dYeAƒZBG dZd[„ d[eAƒZCG d\d]„ d]eCƒZDG d^d_„ d_eCƒZEG d`da„ daeCƒZFG dbdc„ dceCƒZGG ddde„ deeCƒZHG dfdg„ dgeAƒZIG dhdi„ dieAƒZJG djdk„ dkeAƒZKeLdlkrže  M¡  dS )mé    N)Ú
namedtuple)ÚTypingError)Úcompile_isolatedÚFlagsÚerrors©Újit)Útypes)ÚTestCaseÚenable_pyobj_flagsÚMemoryLeakMixinÚtagÚ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   ú9/tmp/pip-unpacked-wheel-qtpwf23r/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   s   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   s   d}t || ƒS )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_usecase1   s    r,   c                 C   s$   t | ƒ}g }|D ]}| |¡ q|S r   ©r%   Úappend)r   r)   ÚlÚvr   r   r   Úiterator_usecase5   s
    r1   c                 C   s,   t ƒ }| | ¡ | |¡ | |¡ t|ƒS r   )r%   ÚupdateÚlist)r   r   Úcr)   r   r   r   Úupdate_usecase<   s
    


r5   c                 C   s   t | dd … ƒ}t|ƒS r#   )r%   Úboolr+   r   r   r   Úbool_usecaseC   s    r7   c                 C   s$   t | ƒ}|D ]}| |¡ qt|ƒS r   )r%   Úremover3   ©r   r   r)   r0   r   r   r   Úremove_usecaseH   s    r:   c                 C   s$   t | ƒ}|D ]}| |¡ qt|ƒS r   )r%   Údiscardr3   r9   r   r   r   Údiscard_usecaseN   s    r<   c                 C   s2   t | ƒ}tdƒD ]}| |¡ | |¡ qt|ƒS )Niè  )r%   Úranger&   r;   r3   )r   Úur0   r)   Úir   r   r   Úadd_discard_usecaseT   s
    
r@   c                 C   s,   t | ƒ}g }t|ƒdkr(| | ¡ ¡ q|S ©Nr   )r%   r'   r.   Úpop)r   r)   r/   r   r   r   Úpop_usecase[   s
    rC   c                 C   s(   t | ƒ}g }|D ]}| ||k¡ q|S r   r-   )r   r   r)   r/   r0   r   r   r   Úcontains_usecaseb   s
    rD   c                 C   s   t | ƒ}| t |ƒ¡ t|ƒS r   )r%   Údifference_updater3   ©r   r   r)   r   r   r   Údifference_update_usecasei   s    rG   c                 C   s   t | ƒ}| t |ƒ¡ t|ƒS r   )r%   Úintersection_updater3   rF   r   r   r   Úintersection_update_usecasen   s    rI   c                 C   s   t | ƒ}| t |ƒ¡ t|ƒS r   )r%   Úsymmetric_difference_updater3   rF   r   r   r   Ú#symmetric_difference_update_usecases   s    rK   c                 C   s   t | ƒ t |ƒ¡S r   )r%   Ú
isdisjointr   r   r   r   Úisdisjoint_usecasex   s    rM   c                 C   s   t | ƒ t |ƒ¡S r   )r%   Úissubsetr   r   r   r   Úissubset_usecase{   s    rO   c                 C   s   t | ƒ t |ƒ¡S r   )r%   Ú
issupersetr   r   r   r   Úissuperset_usecase~   s    rQ   c                 C   s    t | ƒ}| ¡  t|ƒt|ƒfS r   )r%   Úclearr'   r3   ©r   r)   r   r   r   Úclear_usecase   s    rT   c                 C   s(   t | ƒ}| ¡ }| ¡  t|ƒt|ƒfS r   )r%   ÚcopyrB   r'   r3   ©r   r)   Ússr   r   r   Úcopy_usecase†   s    rX   c                 C   s6   t | ƒ}| ¡  | ¡ }| | d ¡ t|ƒt|ƒfS rA   )r%   rR   rU   r&   r'   r3   rV   r   r   r   Úcopy_usecase_emptyŒ   s
    rY   c                 C   s2   t | ƒ}| |¡ | ¡ }| ¡  t|ƒt|ƒfS r   )r%   r8   rU   rB   r'   r3   )r   r   r)   rW   r   r   r   Úcopy_usecase_deleted“   s
    
rZ   c                 C   s   t | ƒ}| t |ƒ¡}t|ƒS r   )r%   Ú
differencer3   ©r   r   Úsar)   r   r   r   Údifference_usecaseš   s    r^   c                 C   s   t | ƒ}| t |ƒ¡}t|ƒS r   )r%   Úintersectionr3   r\   r   r   r   Úintersection_usecaseŸ   s    r`   c                 C   s   t | ƒ}| t |ƒ¡}t|ƒS r   )r%   Úsymmetric_differencer3   r\   r   r   r   Úsymmetric_difference_usecase¤   s    rb   c                 C   s   t | ƒ}| t |ƒ¡}t|ƒS r   )r%   Úunionr3   r\   r   r   r   Úunion_usecase©   s    rd   c                 C   s   t | ƒ}|S r   )r%   rS   r   r   r   Úset_return_usecase®   s    re   c                 C   s   d S r   r   )Úxr   r   r   Únoop³   s    rg   c                 C   s   d}| D ]}||7 }q|S )z!
    Expect a set of numbers
    r   r   ©rf   Úresr0   r   r   r   Úunbox_usecase¶   s    
rj   c                 C   s   d}| D ]}|t |ƒ7 }q|S )z 
    Expect a set of tuples
    r   ©r'   rh   r   r   r   Úunbox_usecase2¿   s    rl   c                 C   s"   | \}}|}|D ]}||7 }q|S )z2
    Expect a (number, set of numbers) tuple.
    r   ©rf   r   r   ri   r0   r   r   r   Úunbox_usecase3È   s
    
rn   c                 C   s&   | \}}|}|D ]}|t |ƒ7 }q|S )z1
    Expect a (number, set of tuples) tuple.
    rk   rm   r   r   r   Úunbox_usecase4Ò   s
    ro   c                 C   s&   |   d¡ |  |¡ | t| ƒt|ƒfS ©Né*   )r&   r2   r'   ©r]   Úsbr   r   r   Úreflect_simpleÝ   s    

rt   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&   r2   rJ   )r]   rs   Zscr   r   r   Úreflect_conditionalâ   s    


ru   c                 C   s   |   d¡ t‚d S rp   )r&   ÚZeroDivisionErrorr(   r   r   r   Úreflect_exceptioní   s    
rw   c                 C   s   |   | ¡ ¡ | |kS r   )r&   rB   rr   r   r   r   Úreflect_dualñ   s    rx   c                 C   s4   t ƒ }g }| D ] }||kr| |¡ | |¡ q|S r   )r%   r&   r.   )ÚsrcÚseenri   r0   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 rp   )Úsuperr|   ÚsetUpÚrandomÚRandomÚrnd©Úself©Ú	__class__r   r   r~     s    zBaseTest.setUpc                 C   s   t  t|ƒ¡S r   )ÚnpÚarangeÚint©rƒ   Ústopr   r   r   Ú_range  s    zBaseTest._rangec                    s<   ‡ ‡fdd„t |ƒD ƒ}tˆtjƒr4tj|ˆjdS |S dS )zD
        Choose *n* possibly duplicate items from sequence.
        c                    s   g | ]}ˆ j  tˆƒ¡‘qS r   )r   Úchoicer3   ©r   r?   ©rƒ   Úseqr   r   Ú
<listcomp>  s     z+BaseTest._random_choice.<locals>.<listcomp>©ÚdtypeN)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   st   t |tƒr8|  |t¡ t||ƒD ]\}}|  ||¡ q n8t |tƒrd|  |t¡ |  t|ƒt|ƒ¡ n|  ||¡ d S r   )r“   ÚtupleZassertIsInstanceÚzipÚ_assert_equal_unorderedr3   ÚassertPreciseEqualÚsorted)rƒ   r   r   r>   r0   r   r   r   r   "  s    

z BaseTest._assert_equal_unorderedc                    s"   t ddˆƒ‰ ‡ ‡‡fdd„}|S )NT©Znopythonc                     s    ˆ| Ž }ˆ | Ž }ˆ  ||¡ d S r   )r   )r   ÚexpectedÚgot©ÚcfuncÚpyfuncrƒ   r   r   Úcheck/  s    z)BaseTest.unordered_checker.<locals>.checkr   ©rƒ   r¥   r¦   r   r£   r   Úunordered_checker-  s    zBaseTest.unordered_checker)Ú__name__Ú
__module__Ú__qualname__r~   r‹   r–   r™   rš   r   r¨   Ú__classcell__r   r   r„   r   r|      s   
r|   c                   @   s,   e Zd Zefdd„Zefdd„Zdd„ ZdS )ÚTestSetLiteralsc                 C   s   t dƒ}| j||d d S )N)r$   é   é   r®   ©Úflags)r!   Úrun_nullary_func)rƒ   r±   r¥   r   r   r   Útest_build_set8  s    zTestSetLiterals.test_build_setc                 C   sP   t dƒ}| j||d t dƒ}| j||d\}}|  t| ¡ ƒt| ¡ ƒ¡ d S )N)r$   ç       @y              @r®   r°   )r´   r®   )r!   r²   ZassertIsÚtyperB   )rƒ   r±   r¥   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 )Né2   Tr    )r3   rš   r"   r   rž   rŸ   )rƒ   r   r¥   r¤   r¡   r¢   r   r   r   Útest_build_set_nopythonD  s    z'TestSetLiterals.test_build_set_nopythonN)r©   rª   r«   r   r³   r¶   r¸   r   r   r   r   r­   6  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¦   W  s    z(TestSets.test_constructor.<locals>.checkéÈ   )r*   r   rž   r,   r™   rš   ©rƒ   r¦   r   r£   r   Útest_constructorP  s    zTestSets.test_constructorc                 C   s4   t }tdd|ƒ}|  d¡}|  ||ƒt|ƒ¡ d S )NTr    r»   )re   r   r™   ÚassertEqualr%   )rƒ   r¥   r¤   r   r   r   r   Útest_set_return]  s    
zTestSets.test_set_returnc                 C   s.   t }|  |¡}||  d¡ƒ ||  d¡ƒ d S ©Nr»   )r1   r¨   r™   rš   r§   r   r   r   Útest_iteratord  s    
zTestSets.test_iteratorc                 C   s<   t }|  |¡}|  d¡}|  d¡}|  d¡}||||ƒ d S ©Nr·   )r5   r¨   rš   r™   )rƒ   r¥   r¦   r   r   r4   r   r   r   Útest_updatek  s    



zTestSets.test_updatec                 C   s4   t }|  |¡}|  d¡}|d d d… }|||ƒ d S )Nr·   é
   )r:   r¨   rš   ©rƒ   r¥   r¦   r   r   r   r   r   Útest_removet  s
    

zTestSets.test_removec              	   C   sf   |   ¡  t}tdd|ƒ}tt|  d¡ƒƒ}|dd … }|d f}|  t¡ |||ƒ W 5 Q R X d S )NTr    r¯   r$   r   )Zdisable_leak_checkr:   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   s@   t }|  |¡}d }}||kr.|  d¡\}}q||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   s    t }|  |¡}||  d¡ƒ d S rÂ   )rC   r¨   rš   r§   r   r   r   Útest_pop¢  s    
zTestSets.test_popc                    sD   t ‰tddˆƒ‰ ‡ ‡‡fdd„}ˆ d¡}ˆ d¡}|||ƒ d S )NTr    c                    s   ˆ  ˆ| |ƒˆ | |ƒ¡ d S r   rº   r   r£   r   r   r¦   «  s    z%TestSets.test_contains.<locals>.checkr·   )rD   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   s   |   t¡ d S r   )rÖ   rG   r‚   r   r   r   Útest_difference_update»  s    zTestSets.test_difference_updatec                 C   s   |   t¡ d S r   )rÖ   rI   r‚   r   r   r   Útest_intersection_update¾  s    z!TestSets.test_intersection_updatec                 C   s   |   t¡ d S r   )rÖ   rK   r‚   r   r   r   Ú test_symmetric_difference_updateÁ  s    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 ]\}}|||ƒ qrd S )	NTr    c                    s   ˆ  ˆ| |ƒˆ | |ƒ¡ d S r   rº   r   r£   r   r   r¦   Æ  s    z(TestSets._test_comparator.<locals>.checkrÄ   é   c                 S   s   g | ]}t |ƒ‘qS r   )r›   ©r   rf   r   r   r   r   Ë  s     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   s   |   t¡ d S r   )rÝ   rM   r‚   r   r   r   Útest_isdisjointÏ  s    zTestSets.test_isdisjointc                 C   s   |   t¡ d S r   )rÝ   rO   r‚   r   r   r   Útest_issubsetÒ  s    zTestSets.test_issubsetc                 C   s   |   t¡ d S r   )rÝ   rQ   r‚   r   r   r   Útest_issupersetÕ  s    zTestSets.test_issupersetc                 C   s    t }|  |¡}||  d¡ƒ d S rÂ   )rT   r¨   rš   r§   r   r   r   Ú
test_clearØ  s    
zTestSets.test_clearc                 C   sx   t }|  |¡}||  d¡ƒ t}|  |¡}|  d¡}||ƒ t}|  |¡}|ddƒ |  d¡}|||t|ƒd  ƒ d S )Nr·   r$   ©r$   r®   é   é   r®   )rX   r¨   rš   rY   rZ   r'   )rƒ   r¥   r¦   r   r   r   r   Ú	test_copyÞ  s    





zTestSets.test_copyc                 C   s.   t }|  |¡}||  d¡ƒ ||  d¡ƒ d S )Nr$   r®   )r7   r¨   rš   r§   r   r   r   Ú	test_boolð  s    
zTestSets.test_boolc                 C   sX   |   |¡}d\}}|||ƒ d}t ||¡D ]&\}}|  |¡}|  |¡}|||ƒ q,d S )N)râ   )r®   r¯   é   rä   rq   rÏ   rÐ   )rƒ   r¥   r¦   r   r   rÓ   rÔ   rÕ   r   r   r   Ú_test_set_operator÷  s    



zTestSets._test_set_operatorc                 C   s   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  s    üzTestSets.make_operator_usecasec                 C   s   dt |d }td|tƒ ƒS )Nz½if 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  s    ùz&TestSets.make_inplace_operator_usecasec                 C   s   dt |d }td|tƒ ƒS )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  s    ýz TestSets.make_comparison_usecasec                 C   s   |   t¡ d S r   )rè   r^   r‚   r   r   r   Útest_difference  s    zTestSets.test_differencec                 C   s   |   t¡ d S r   )rè   r`   r‚   r   r   r   Útest_intersection   s    zTestSets.test_intersectionc                 C   s   |   t¡ d S r   )rè   rb   r‚   r   r   r   Útest_symmetric_difference#  s    z"TestSets.test_symmetric_differencec                 C   s   |   t¡ d S r   )rè   rd   r‚   r   r   r   Ú
test_union&  s    zTestSets.test_unionc                 C   s   |   |  d¡¡ d S )Nú&©rè   rï   r‚   r   r   r   Útest_and)  s    zTestSets.test_andc                 C   s   |   |  d¡¡ d S )Nú|rù   r‚   r   r   r   Útest_or,  s    zTestSets.test_orc                 C   s   |   |  d¡¡ d S )Nú-rù   r‚   r   r   r   Útest_sub/  s    zTestSets.test_subc                 C   s   |   |  d¡¡ d S )Nú^rù   r‚   r   r   r   Útest_xor2  s    zTestSets.test_xorc                 C   s   |   |  d¡¡ d S )Nz==©rè   ró   r‚   r   r   r   Útest_eq5  s    zTestSets.test_eqc                 C   s   |   |  d¡¡ d S )Nz!=r  r‚   r   r   r   Útest_ne8  s    zTestSets.test_nec                 C   s   |   |  d¡¡ d S )Nz<=r  r‚   r   r   r   Útest_le;  s    zTestSets.test_lec                 C   s   |   |  d¡¡ d S )Nú<r  r‚   r   r   r   Útest_lt>  s    zTestSets.test_ltc                 C   s   |   |  d¡¡ d S )Nz>=r  r‚   r   r   r   Útest_geA  s    zTestSets.test_gec                 C   s   |   |  d¡¡ d S )Nú>r  r‚   r   r   r   Útest_gtD  s    zTestSets.test_gtc                 C   s   |   |  d¡¡ d S )Nz&=©rè   rñ   r‚   r   r   r   Ú	test_iandG  s    zTestSets.test_iandc                 C   s   |   |  d¡¡ d S )Nz|=r
  r‚   r   r   r   Útest_iorJ  s    zTestSets.test_iorc                 C   s   |   |  d¡¡ d S )Nz-=r
  r‚   r   r   r   Ú	test_isubM  s    zTestSets.test_isubc                 C   s   |   |  d¡¡ d S )Nz^=r
  r‚   r   r   r   Ú	test_ixorP  s    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¹   N  sV   	
	r¹   c                   @   s   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  T  s   r  c                   @   s   e Zd ZdZdd„ ZdS )Ú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_r3   rœ   )rƒ   rŠ   r   r   r4   Údr   r   r   r‹   c  s
    zTestTupleSets._rangeNr  r   r   r   r   r  _  s   r  c                   @   s   e Zd ZdZdd„ ZdS )Ú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   p  s     z*TestUnicodeSets._range.<locals>.<listcomp>)r=   rˆ   r‰   r   r   r   r‹   o  s    zTestUnicodeSets._rangeNr  r   r   r   r   r  k  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestSetsInvalidDtypec              	   C   sV   t dd|ƒ}tddddgƒ}tddd	gƒ}d
}|  t|¡ |||ƒ W 5 Q R X d S )NTr    r$   r®   rã   rä   r   r   r4   z!All Sets must be of the same type©r   r%   ÚassertRaisesRegexr   ©rƒ   r¥   r¤   r   r   Úmsgr   r   r   rè   u  s    z'TestSetsInvalidDtype._test_set_operatorN)r©   rª   r«   rè   r   r   r   r   r  s  s   r  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   s   |   |¡}t|ƒS r   )ra   r3   rF   r   r   r   rb   ƒ  s    
z,TestSetsInvalid.symmetric_difference_usecasec                 C   s   |   |¡}t|ƒS r   )r[   r3   rF   r   r   r   r^   ‡  s    
z"TestSetsInvalid.difference_usecasec                 C   s   |   |¡}t|ƒS r   )r_   r3   rF   r   r   r   r`   ‹  s    
z$TestSetsInvalid.intersection_usecasec                 C   s   |   |¡}t|ƒS r   )rc   r3   rF   r   r   r   rd     s    
zTestSetsInvalid.union_usecasec              	   C   sL   t dd|ƒ}tddddgƒ}d}d}|  t|¡ |||ƒ W 5 Q R X d S )	NTr    r$   r®   rã   rä   )r$   r®   r¯   zAll arguments must be Setsr  r  r   r   r   rè   “  s    z"TestSetsInvalid._test_set_operatorc                 C   s   |   tj¡ d S r   )rè   r  r^   r‚   r   r   r   rô   ž  s    zTestSetsInvalid.test_differencec                 C   s   |   tj¡ d S r   )rè   r  r`   r‚   r   r   r   rõ   ¡  s    z!TestSetsInvalid.test_intersectionc                 C   s   |   tj¡ d S r   )rè   r  rb   r‚   r   r   r   rö   ¤  s    z)TestSetsInvalid.test_symmetric_differencec                 C   s   |   tj¡ d S r   )rè   r  rd   r‚   r   r   r   r÷   §  s    zTestSetsInvalid.test_unionc                 C   s   dt |d }td|tƒ ƒS )Nzhif 1:
        def operator_usecase(a, b):
            s = a %(op)s b
            return list(s)
        ré   rë   rì   rî   r   r   r   rï   ª  s    üz%TestSetsInvalid.make_operator_usecasec                 C   s   dt |d }td|tƒ ƒS )Nz³if 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ñ   ²  s    ùz-TestSetsInvalid.make_inplace_operator_usecasec                 C   s   dt |d }td|tƒ ƒS )NzWif 1:
        def comparison_usecase(a, b):
            return set(a) %(op)s b
        ré   rò   rì   rî   r   r   r   ró   ½  s    ýz'TestSetsInvalid.make_comparison_usecaseN)r©   rª   r«   rb   r^   r`   rd   rè   rô   rõ   rö   r÷   rï   rñ   ró   r   r   r   r   r    s   r  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   s:   |   t¡}d V  W 5 Q R X |d k	r6|  t|jƒ|¡ d S r   )rÇ   Ú	TypeErrorZassertRegexpMatchesÚstrÚ	exception)rƒ   r  Úraisesr   r   r   Úassert_type_errorÊ  s    zTestUnboxing.assert_type_errorc                    s"   t ddˆƒ‰ ‡ ‡‡fdd„}|S )NTr    c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   rº   )r   r¡   r¢   r£   r   r   r¦   Ó  s    z'TestUnboxing.check_unary.<locals>.checkr   r§   r   r£   r   Úcheck_unaryÑ  s    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   )r#  rj   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              @)r#  rl   r%   r¼   r   r   r   Útest_tuplesà  s    
zTestUnboxing.test_tuplesc                 C   s$   |   t¡}|dtdddgƒfƒ d S )Nr$   r®   r¯   rã   )r#  rn   r%   r¼   r   r   r   Útest_set_inside_tupleå  s    
z"TestUnboxing.test_set_inside_tuplec                 C   s"   |   t¡}|dtddgƒfƒ d S )Nr$   )r®   )r¯   )r#  ro   r%   r¼   r   r   r   Útest_set_of_tuples_inside_tupleé  s    
z,TestUnboxing.test_set_of_tuples_inside_tuplec              	   C   s  d}t }tdd|ƒ}tddgƒ}|  |¡ ||ƒ W 5 Q R X |  |tddgƒ¡ |  |¡ |tddgƒƒ W 5 Q R X |  |¡ |dtddgƒfƒ W 5 Q R X |  |¡ |tdtddgƒƒƒ W 5 Q R X tddgƒ}|  ttf¡}||ƒ W 5 Q R X d S )	Nzcan't unbox heterogeneous setTr    r$   g      @r&  )r$   )r®   r¯   )	rg   r   r%   r"  r¾   r   rÇ   Ú
IndexErrorÚ
ValueError)rƒ   r  r¥   r¤   ÚvalÚlstr!  r   r   r   Útest_errorsí  s      zTestUnboxing.test_errorsN)r©   rª   r«   r  Ú
contextlibÚcontextmanagerr"  r#  r%  r'  r(  r)  r.  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ddddgƒtdgƒftddddgƒtdd	d
ddgƒfg}|D ]|\}}t|ƒ}t|ƒ}|||ƒ}|  ||¡H |||ƒ}	|  |	|¡ |  ||¡ |  |d |k|	d |k¡ ~~	W 5 Q R X qNd S )NTr    g      ð?r´   g      @g      @g        g      @g      @g      @g       @g      "@r   )r   r%   ÚassertRefCountrž   r¾   )
rƒ   r¥   r¤   ZsamplesÚdestry   r¡   r¢   ZpyresZcresr   r   r   Úcheck_reflection  s     ÿ

z"TestSetReflection.check_reflectionc                 C   s   |   t¡ d S r   )r4  rt   r‚   r   r   r   Útest_reflect_simple  s    z%TestSetReflection.test_reflect_simplec                 C   s   |   t¡ d S r   )r4  ru   r‚   r   r   r   Útest_reflect_conditional  s    z*TestSetReflection.test_reflect_conditionalc              
   C   sp   t }tdd|ƒ}tdddgƒ}|  |¡< |  t¡ ||ƒ W 5 Q R X |  |tddddgƒ¡ W 5 Q R X dS )zd
        When the function exits with an exception, sets should still be
        reflected.
        Tr    r$   r®   r¯   rq   N)rw   r   r%   r2  rÇ   rv   rž   )rƒ   r¥   r¤   r)   r   r   r   Útest_reflect_exception"  s    z(TestSetReflection.test_reflect_exceptionc                 C   sd   t }tdd|ƒ}tdddgƒ}| ¡ }|||ƒ}|||ƒ}|  ||¡ |  ||¡ |  ||¡ dS )zf
        When the same set object is reflected twice, behaviour should
        be consistent.
        Tr    r$   r®   r¯   N)rx   r   r%   rU   rž   ZassertRefCountEqual)rƒ   r¥   r¤   ZpysetZcsetr¡   r¢   r   r   r   Útest_reflect_same_set/  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   s   g | ]}t |ƒ‘qS r   ©ÚidrÛ   r   r   r   r   E  s     z8TestSetReflection.test_reflect_clean.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   r9  rÛ   r   r   r   r   G  s     N)r   rg   r%   r¾   )rƒ   r¤   r)   Úidsr   r   r   Útest_reflect_clean>  s
    
z$TestSetReflection.test_reflect_cleanN)
r©   rª   r«   r  r4  r5  r6  r7  r8  r<  r   r   r   r   r1    s   r1  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestExamplesz!
    Examples of using sets.
    c                 C   s.   t }|  |¡}||  d¡ƒ ||  d¡ƒ d S rÀ   )r{   r¨   r™   rš   r§   r   r   r   Útest_uniqueO  s    
zTestExamples.test_uniquec                 C   s   dd„ }|   |¡}|ƒ  d S )Nc                  S   s.   t  d¡} tƒ }| dddh¡ | | ¡ |S )Nr$   r®   r¯   )r†   Zuint64r%   r2   r&   )r?   ÚRr   r   r   ÚimplX  s
    

z9TestExamples.test_type_coercion_from_update.<locals>.impl)r¨   )rƒ   r@  r¦   r   r   r   Útest_type_coercion_from_updateV  s    
z+TestExamples.test_type_coercion_from_updateN)r©   rª   r«   r  r>  rA  r   r   r   r   r=  J  s   r=  Ú__main__)NZunittestÚcollectionsr   r/  rÑ   Úmathr   ÚsysZnumba.core.errorsr   Znumpyr†   Znumba.core.compilerr   r   r   Znumbar   Z
numba.corer	   Znumba.tests.supportr
   r   r   r   r   r   r   r!   r"   r*   r,   r1   r5   r7   r:   r<   r@   rC   rD   rG   rI   rK   rM   rO   rQ   rT   rX   rY   rZ   r^   r`   rb   rd   re   rg   rj   rl   rn   ro   rt   ru   rw   rx   r{   r|   r­   r¹   r  r  r  r  r  r  r1  r=  r©   Úmainr   r   r   r   Ú<module>   s†   
			

6  DBC
