ó
\K]c           @` sZ  d  Z  d d l m Z m Z m 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 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 m Z d d l m Z d d	 l m Z m Z d
 „  Z d „  Z d Z  d Z! d Z" d Z# d Z$ e% Z& d „  Z' d „  Z( d „  Z) d „  Z* e j+ d d d d f ƒ Z, d e- f d „  ƒ  YZ. d e- f d „  ƒ  YZ/ d e- f d „  ƒ  YZ0 d „  Z1 e e2 ƒ d  „  ƒ Z3 e e2 e j4 ƒ d! „  ƒ Z5 e e6 e j7 ƒ d" „  ƒ Z8 e e j9 e j7 e j: ƒ d# „  ƒ Z; e d$ e j7 ƒ d% „  ƒ Z< e d& e j= ƒ e e j> ƒ d' „  ƒ ƒ Z? e d( e j7 e j: ƒ d) „  ƒ Z@ e d* e j7 e j: ƒ d+ „  ƒ ZA e d, e j7 ƒ d- „  ƒ ZB e d. e j7 e j: ƒ d/ „  ƒ ZC e d0 e j7 ƒ d1 „  ƒ ZD e d2 e j7 ƒ d3 „  ƒ ZE e d4 e j7 e j4 ƒ d5 „  ƒ ZF e d6 e j7 e j7 ƒ d7 „  ƒ ZG e d8 e j7 e j7 ƒ d9 „  ƒ ZH e d: e j7 e j4 ƒ d; „  ƒ ZI xh e jJ eG f e jK eI f e jL eF f e jM eH f g D]0 \ ZN ZO e eN e j7 e j7 ƒ eO d< „ ƒ ZP qÇWe e jQ e j7 e j7 ƒ e d= e j7 e j7 ƒ d> „  ƒ ƒ ZR e e jS e j7 e j7 ƒ e d? e j7 e j7 ƒ d@ „  ƒ ƒ ZT e e jU e j7 e j7 ƒ e dA e j7 e j7 ƒ dB „  ƒ ƒ ZV e e jW e j7 e j7 ƒ e dC e j7 e j7 ƒ dD „  ƒ ƒ ZX e dE e j7 e j7 ƒ dF „  ƒ ZY e e jZ e j7 e j7 ƒ e dG e j7 e j7 ƒ dH „  ƒ ƒ Z[ e e j\ e j7 e j7 ƒ e dI e j7 e j7 ƒ dJ „  ƒ ƒ Z] e e j^ e j7 e j7 ƒ dK „  ƒ ZY e e j_ e j7 e j7 ƒ dL „  ƒ Z` e e ja e j7 e j7 ƒ dM „  ƒ Zb e e jc e j7 e j7 ƒ dN „  ƒ Zd e e je e j7 e j7 ƒ dO „  ƒ Zf e e j7 e j7 ƒ dP „  ƒ Zg d S(Q   s&   
Support for native homogeneous sets.
i    (   t   print_functiont   absolute_importt   divisionN(   t   ir(   t   typest   cgutilst   typing(	   t   lower_builtint
   lower_castt   iternext_implt   impl_ret_borrowedt   impl_ret_new_reft   impl_ret_untrackedt   for_itert   call_lent   RefType(   t   cached_propertyi   (   t	   quicksortt   slicingc         C` sL   t  j | ƒ } |  j | ƒ j ƒ  } | j | | ƒ } |  j | | d | ƒS(   sx   
    Given a set value and type, get its payload structure (as a
    reference, so that mutations are seen by all).
    t   ref(   R   t
   SetPayloadt   get_data_typet
   as_pointert   bitcastt   make_data_helper(   t   contextt   buildert   set_typet   ptrt   payload_typet   ptrtyt   payload(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   get_payload_struct   s    c         C` s%   |  j  t j | ƒ ƒ } |  j | ƒ S(   s7   
    Return the entry size for the given set type.
    (   R   R   t   SetEntryt   get_abi_sizeof(   R   R   t   llty(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   get_entry_size!   s    iÿÿÿÿiþÿÿÿiÕÿÿÿi   i   c         C` sŽ   |  j  } | j t ƒ } | j | | f i  ƒ } |  j | | ƒ } | | | f ƒ } t |  | | ƒ }	 t j | j t	 ƒ }
 | j
 |	 | |
 ƒ S(   s.   
    Compute the hash of the given value.
    (   t   typing_contextt   resolve_value_typet   hasht   get_call_typet   get_functiont   is_hash_usedR   t   Constantt   typet   FALLBACKt   select(   R   R   t   typt   valuet	   typingctxt   fntyt   sigt   fnt   ht   is_okt   fallback(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   get_hash_value9   s    	c         C` s(   t  j | j t ƒ } | j d | | ƒ S(   s8   
    Whether the hash value denotes an empty entry.
    s   ==(   R   R+   R,   t   EMPTYt   icmp_unsigned(   R   R   R5   t   empty(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   is_hash_emptyG   s    c         C` s(   t  j | j t ƒ } | j d | | ƒ S(   s9   
    Whether the hash value denotes a deleted entry.
    s   ==(   R   R+   R,   t   DELETEDR:   (   R   R   R5   t   deleted(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   is_hash_deletedN   s    c         C` s(   t  j | j t ƒ } | j d | | ƒ S(   s9   
    Whether the hash value denotes an active entry.
    t   <(   R   R+   R,   R=   R:   (   R   R   R5   R>   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR*   U   s    t   SetLoopt   indext   entryt   do_breakt   _SetPayloadc           B` s  e  Z d  „  Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d	 „  ƒ Z	 e	 j d
 „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z d „  Z e d „ Z e j d d „ ƒ Z e j d „  ƒ Z RS(   c         C` sX   t  | | | | ƒ } | |  _ | |  _ | |  _ | |  _ | j d ƒ |  _ | |  _ d  S(   Nt   entries(   R    t   _contextt   _buildert   _tyt   _payloadt   _get_ptr_by_namet   _entriest   _ptr(   t   selfR   R   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   __init__c   s    				c         C` s
   |  j  j S(   N(   RJ   t   mask(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRP   l   s    c         C` s   | |  j  _ d  S(   N(   RJ   RP   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRP   p   s    c         C` s
   |  j  j S(   N(   RJ   t   used(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRQ   u   s    c         C` s   | |  j  _ d  S(   N(   RJ   RQ   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRQ   y   s    c         C` s
   |  j  j S(   N(   RJ   t   fill(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRR   }   s    c         C` s   | |  j  _ d  S(   N(   RJ   RR   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRR      s    c         C` s
   |  j  j S(   N(   RJ   t   finger(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRS   …   s    c         C` s   | |  j  _ d  S(   N(   RJ   RS   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRS   ‰   s    c         C` s
   |  j  j S(   N(   RJ   t   dirty(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRT      s    c         C` s   | |  j  _ d  S(   N(   RJ   RT   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRT   ‘   s    c         C` s   |  j  S(   s>   
        A pointer to the start of the entries array.
        (   RL   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRF   •   s    c         C` s   |  j  S(   sC   
        A pointer to the start of the NRT-allocated area.
        (   RM   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR   œ   s    c         C` sI   t  j |  j |  j | ƒ } |  j j |  j t j |  j ƒ d | ƒ} | S(   s)   
        Get entry number *idx*.
        R   (	   R   t   gepRH   RL   RG   R   R   R!   RI   (   RN   t   idxt	   entry_ptrRC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   get_entry£   s
    	c         ` sx  ˆ
 j  ‰ ˆ
 j ‰ ˆ j } ˆ
 j } ˆ
 j j } ˆ j t j t	 j
 t j | | ƒ ƒ ‰ t j | d ƒ } t j | d ƒ } t j ˆ ˆ ƒ }	 t j ˆ ˆ j ˆ | ƒ ƒ }
 ˆ rÕ | j d ƒ ‰ t j ˆ ˆ ƒ ‰ n  ˆ j d ƒ } ˆ j d ƒ ‰  ˆ j d ƒ ‰ ˆ j d ƒ } ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡	 ‡
 f d †  } t j ˆ t j | t ƒ ƒ R ˆ j |
 ƒ } | | ƒ ˆ j | | ƒ } ˆ j | | ƒ } ˆ j | |
 ƒ Wd	 QXˆ j | ƒ ˆ j | ƒ ¨ ˆ j |
 ƒ } | | ƒ ˆ j |	 ƒ } ˆ j | | ƒ } ˆ j | ˆ j | | ƒ ƒ } ˆ j | ˆ j | | ƒ ƒ } ˆ j | |
 ƒ ˆ j | |	 ƒ ˆ j | ƒ Wd	 QXˆ j ˆ ƒ m ˆ ráˆ j |
 ƒ } ˆ j ˆ ƒ } ˆ j ˆ j d
 | ˆ ƒ | | ƒ } ˆ j | |
 ƒ n  ˆ j | ƒ Wd	 QXˆ j ˆ  ƒ  ˆ j | ƒ Wd	 QXˆ j | ƒ ˆ j t j  d ƒ d ƒ } | j! t j" ˆ  ƒ | j! t j# ˆ ƒ | ˆ j |
 ƒ f S(   sg  
        Lookup the *item* with the given hash values in the entries.

        Return a (found, entry index) tuple:
        - If found is true, <entry index> points to the entry containing
          the item.
        - If found is false, <entry index> points to the empty entry that
          the item can be written to (only if *for_insert* is true)
        i   i   iÿÿÿÿs   lookup.bodys   lookup.founds   lookup.not_founds
   lookup.endc         ` s  ˆ
 j  |  ƒ } | j } ˆ j ˆ j d ˆ | ƒ ƒ @ ˆ ˆ ˆ	 | j f ƒ } ˆ j | ƒ  ˆ j ˆ  ƒ Wd QXWd QXˆ j t ˆ ˆ | ƒ ƒ  ˆ j ˆ ƒ Wd QXˆ rˆ j t ˆ ˆ | ƒ ƒ H ˆ j ˆ ƒ } ˆ j	 ˆ j d | ˆ ƒ |  | ƒ } ˆ j
 | ˆ ƒ Wd QXn  d S(   sO   
            Check entry *i* against the value being searched for.
            s   ==N(   RX   R'   t   if_thenR:   t   keyt   branchR<   R?   t   loadR.   t   store(   t   iRC   t
   entry_hasht   eqt   j(   t   bb_foundt   bb_not_foundR   R   t   eqfnt
   for_insertt
   free_indext   free_index_sentinelR5   t   itemRN   (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   check_entryÓ   s    	Ns   ==t   found($   RG   RH   R,   RP   RI   t   dtypeR)   t   operatorR`   R   t	   signatureR   t   booleanR   R+   R   t   alloca_once_valuet   and_t   append_basic_blockt	   for_ranget   LINEAR_PROBESR\   t   addR]   R[   t
   goto_blockt   lshrt   mulR.   R:   t   position_at_endt   phit   IntTypet   add_incomingt   true_bitt	   false_bit(   RN   Rh   R5   Re   t   intp_tRP   Rk   t   onet   fivet   perturbRB   t   bb_bodyt   bb_endRi   R^   t   pRa   Rj   (    (   Rb   Rc   R   R   Rd   Re   Rf   Rg   R5   Rh   RN   s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _lookup­   sh    
					-

c         c` sÓ   |  j  } |  j } | j t j ƒ } t j | d ƒ } | j |  j | ƒ } t	 j
 | | d | ƒj } |  j | j ƒ } t | | | j ƒ }	 | j |	 ƒ + t d | j d | d | j ƒ }
 |
 VWd QXWd QXd S(   sG   
        Iterate over the payload's entries.  Yield a SetLoop.
        i   t   startRB   RC   RD   N(   RG   RH   t   get_value_typeR   t   intpR   R+   Rt   RP   R   Rr   RX   RB   R*   R'   RY   RA   RD   (   RN   R†   R   R   R~   R   t   sizet
   range_loopRC   t   is_usedt   loop(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _iterate!  s    		c      	   c` sR  |  j  } |  j } | j t j ƒ } t j | d ƒ } t j | d ƒ } |  j } | j d ƒ } | j d ƒ } t	 j
 | |  j ƒ }	 | j | ƒ | j | ƒ y | j |	 ƒ }
 | j | | j |
 | ƒ ƒ }
 | j |
 |	 ƒ |  j |
 ƒ } t | | | j ƒ } | j | | | ƒ Wd QX| j | ƒ | j |	 ƒ }
 |
 |  _ |  j |
 ƒ Vd S(   s‹   
        Yield a random entry from the payload.  Caller must ensure the
        set isn't empty, otherwise the function won't end.
        i    i   t   next_entry_bodyt   next_entry_endN(   RG   RH   R‡   R   Rˆ   R   R+   RP   Rq   R   Ro   RS   R[   Ru   R\   Rp   Rt   R]   RX   R*   R'   t   cbranchRx   (   RN   R   R   R~   t   zeroR   RP   R‚   Rƒ   RB   R^   RC   R‹   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _next_entry5  s*    				N(   t   __name__t
   __module__RO   t   propertyRP   t   setterRQ   RR   RS   RT   RF   R   RX   t   FalseR…   t
   contextlibt   contextmanagert   NoneR   R’   (    (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRE   a   s$   			
tt   SetInstancec           B` s»  e  Z d  „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e j	 d „  ƒ Z d „  Z
 d „  Z e d	 „ Z e d
 „ Z e d „ Z e d „ Z e d „ Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z e  d& d „ ƒ Z" e  d& d „ ƒ Z# e  d „  ƒ Z$ e  d „  ƒ Z% d „  Z& d  „  Z' d! „  Z( d" „  Z) e d# „ Z* d$ „  Z+ d% „  Z, RS('   c         C` sI   | |  _  | |  _ | |  _ t | | ƒ |  _ | j | | | ƒ |  _ d  S(   N(   RG   RH   RI   R$   t
   _entrysizet   make_helpert   _set(   RN   R   R   R   t   set_val(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRO   `  s
    			c         C` s
   |  j  j S(   N(   RI   Rk   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRk   g  s    c         C` sC   |  j  } |  j } |  j  j j | |  j ƒ } t | | |  j | ƒ S(   s/   
        The _SetPayload for this set.
        (   RG   RH   t   nrtt   meminfo_datat   meminfoRE   RI   (   RN   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR   k  s    		c         C` s   |  j  j ƒ  S(   N(   Rž   t	   _getvalue(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR0   w  s    c         C` s
   |  j  j S(   N(   Rž   R¢   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR¢   {  s    c         C` s
   |  j  j S(   N(   Rž   t   parent(   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR¤     s    c         C` s   | |  j  _ d  S(   N(   Rž   R¤   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR¤   ƒ  s    c         C` s
   |  j  j S(   s<   
        Return the number of elements in the size.
        (   R   RQ   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   get_size‡  s    c         C` s1   |  j  j r- | r t j n t j |  j _ n  d  S(   N(   RI   t	   reflectedR   R|   R}   R   RT   (   RN   t   val(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   set_dirty  s    c         C` sË   |  j  } |  j } | j } | | _ | | _ | j }	 t j |	 j d ƒ }
 | j |	 |
 ƒ }	 | _ | j	 t
 | | | ƒ d t ƒ | j | j |
 ƒ | _ Wd  QX| rº |  j |	 ƒ n  |  j t ƒ d  S(   Ni   t   likely(   RG   RH   R'   RZ   RQ   R   R+   R,   Rt   RY   R<   t   TrueRR   t   upsizeR¨   (   RN   R   RC   Rh   R5   t	   do_resizeR   R   t   old_hashRQ   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   _add_entry‘  s    						
c         C` s  |  j  } |  j } | j | | d t ƒ\ } } | j | ƒ }	 | j |	 ƒ É | j | ƒ }
 |
 j } | |
 _ | |
 _ | j	 } t
 j | j d ƒ } | j | | ƒ } | _	 | j t | | | ƒ d t ƒ | j | j | ƒ | _ Wd  QX| r|  j | ƒ n  |  j t ƒ Wd  QXd  S(   NRe   i   R©   (   RG   RH   R…   Rª   t   not_RY   RX   R'   RZ   RQ   R   R+   R,   Rt   R<   RR   R«   R¨   (   RN   R   Rh   R5   R¬   R   R   Rj   R^   t	   not_foundRC   R­   RQ   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _add_key¥  s$    						
c         C` s|   t  j | j j t ƒ | _ | j } t  j | j d ƒ } |  j j | | ƒ } | _ | rk |  j | ƒ n  |  j	 t
 ƒ d  S(   Ni   (   R   R+   R'   R,   R=   RQ   RH   t   subt   downsizeR¨   Rª   (   RN   R   RC   R¬   RQ   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _remove_entry¿  s    	c   
      C` sf   |  j  } |  j } | j | | ƒ \ } } | j | ƒ ' | j | ƒ }	 |  j | |	 | ƒ Wd  QX| S(   N(   RG   RH   R…   RY   RX   R´   (
   RN   R   Rh   R5   R¬   R   R   Rj   R^   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   _remove_keyË  s    		c         C` sP   |  j  } |  j } |  j } t | | |  j j | ƒ } |  j | | | | ƒ d  S(   N(   RG   RH   R   R8   RI   Rk   R±   (   RN   Rh   R¬   R   R   R   R5   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRt   ×  s
    			c         C` sM   |  j  } |  j } |  j } |  j | | | | ƒ } |  j | | | | ƒ d S(   s`   A version of .add for use inside functions following Python calling
        convention.
        N(   RG   RH   R   t   _pyapi_get_hash_valueR±   (   RN   t   pyapiRh   R¬   R   R   R   R5   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   add_pyapiß  s
    			c         ` s¸   ‡  ‡ ‡ f d †  } ˆ j  j g } t j } | | | ƒ } ˆ j j ˆ  | | | | g ƒ \ }	 }
 ˆ  j ˆ  j |	 j ƒ d t	 ƒ. ˆ j j
 ˆ  | |	 ƒ ˆ  j | j ƒ  ƒ Wd QX|
 S(   s=   Python API compatible version of `get_hash_value()`.
        c         ` sª   ˆ j  j |  | ƒ } ˆ  j } t j | | d | j d ƒ ƒ} d | _ t j | j ƒ  ƒ } ˆ j  j	 | | | ƒ \ } t
 ˆ | ˆ j j | ƒ } ˆ j  j | | ƒ | S(   Nt   names   .set_hash_itemt   internal(   t	   call_convt   get_function_typet   moduleR   t   Functiont   get_unique_namet   linkaget	   IRBuilderRq   t   decode_argumentsR8   RI   Rk   t   return_value(   t   restyt   argtypesR2   t   modR4   t   inner_buildert
   inner_itemR5   (   R   R   RN   (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   emit_wrapperí  s    			R©   N(   RI   Rk   R   Rˆ   R»   t   call_functionRY   R¯   R6   R—   t   raise_errort   rett   get_null_object(   RN   R·   R   R   Rh   RÉ   RÅ   RÄ   R4   t   statust   retval(    (   R   R   RN   s3   lib/python2.7/site-packages/numba/targets/setobj.pyR¶   ê  s    		"c         C` sR   |  j  } |  j } |  j } t | | |  j j | ƒ } | j | | ƒ \ } } | S(   N(   RG   RH   R   R8   RI   Rk   R…   (   RN   Rh   R   R   R   R5   Rj   R^   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   contains  s    			c         C` sO   |  j  } |  j } |  j } t | | |  j j | ƒ } |  j | | | ƒ } | S(   N(   RG   RH   R   R8   RI   Rk   Rµ   (   RN   Rh   R   R   R   R5   Rj   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   discard  s    			c         C` s‡   |  j  } |  j } | j |  j j ƒ } t j | | ƒ } |  j } | j ƒ  * } | j	 | j
 | ƒ |  j | | ƒ Wd  QX| j | ƒ S(   N(   RG   RH   R‡   RI   Rk   R   t   alloca_onceR   R’   R]   RZ   R´   R\   (   RN   R   R   t   ltyRZ   R   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   pop#  s    			c         C` sT   |  j  } |  j } | j t j ƒ } t j | t ƒ } |  j | ƒ |  j	 t
 ƒ d  S(   N(   RG   RH   R‡   R   Rˆ   R   R+   t   MINSIZEt   _replace_payloadR¨   Rª   (   RN   R   R   R~   t   minsize(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   clear1  s    		c         C` s‘  |  j  } |  j } |  j } | j } | j } t |  ƒ | | |  j d ƒ } | j d | | ƒ } | j	 | d t
 ƒ\ } }	 | O | j | ƒ }
 | j | j |
 ƒ d t ƒ | j j | t d ƒ Wd QXWd QX|	 ª |  j | | | ƒ } | j | ƒ }
 | j | j |
 ƒ d t ƒ | j j | t d ƒ Wd QX| j } | j ƒ  / } | j } | j | | j | j d t ƒWd QXWd QXWd QX| S(   s,   
        Return a copy of this set.
        s   ==R©   s   cannot copy setNR¬   (   s   cannot copy set(   s   cannot copy set(   RG   RH   R   RQ   RR   R,   RI   Rš   R:   t   if_elseRª   t   _copy_payloadRY   R¯   R—   R»   t   return_user_exct   MemoryErrort   choose_alloc_sizet   _allocate_payloadR   RC   R±   RZ   R'   (   RN   R   R   R   RQ   RR   t   othert   no_deleted_entriest   if_no_deletedt
   if_deletedt   okt   nentriest   other_payloadRŒ   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   copy:  s4    								c   
      C` s©   |  j  } |  j } |  j } | j } | j ƒ  c } | j } | j | j | j ƒ \ } }	 | j | j	 | ƒ ƒ  |  j
 | | d t ƒWd QXWd QX|  j | j ƒ d S(   s9   
        In-place intersection with *other* set.
        R¬   N(   RG   RH   R   R   RC   R…   RZ   R'   RY   R¯   R´   R—   R³   RQ   (
   RN   Rß   R   R   R   Rå   RŒ   RC   Rj   t   _(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   intersecta  s    					"c      
   C` su   |  j  } |  j } |  j } | j } | j ƒ  / } | j } |  j | | j | j d t ƒWd QX|  j	 | j
 ƒ d S(   s7   
        In-place difference with *other* set.
        R¬   N(   RG   RH   R   R   RC   Rµ   RZ   R'   R—   R³   RQ   (   RN   Rß   R   R   R   Rå   RŒ   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   differences  s    					%c         C` sù   |  j  } |  j } | j } | j ƒ  ¹ } | j j } | j j } |  j } | j | | d t ƒ\ }	 }
 | j	 |
 ƒ } | j
 |	 ƒ S \ } } |  |  j | | d t ƒWd QX|  |  j | | | | ƒ Wd QXWd QXWd QX|  j |  j j ƒ d S(   sA   
        In-place symmetric difference with *other* set.
        Re   R¬   N(   RG   RH   R   R   RC   RZ   R'   R…   Rª   RX   RÙ   R´   R—   R®   R³   RQ   (   RN   Rß   R   R   Rå   RŒ   RZ   R5   R   Rj   R^   RC   t	   if_commont   if_not_common(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   symmetric_differenceƒ  s    				(c         C` s0  |  j  } |  j } |  j } | j } | r0 d n d } t j | t j ƒ } | j | j | | j | j ƒ ƒ ² \ }	 }
 |
  | j	 t j
 | ƒ Wd  QX|	 } | j ƒ  j } | j } | j | j | j ƒ \ } } | j | j | ƒ ƒ " | j	 t j
 | ƒ | j ƒ  Wd  QXWd  QXWd  QXWd  QX| j | ƒ S(   NR@   s   <=(   RG   RH   R   R   Ro   R|   RÙ   R:   RQ   R]   R}   R   RC   R…   RZ   R'   RY   R¯   RD   R\   (   RN   Rß   t   strictR   R   R   Rå   t   cmp_opt   rest
   if_smallert	   if_largerRŒ   RC   Rj   Rç   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   issubset›  s&    						"c         ` s¿   |  j  } |  j ‰  |  j } | j } t j ˆ  t j ƒ ‰ ‡  ‡ f d †  } ˆ  j ˆ  j d | j | j ƒ ƒ A \ } } |  | | | ƒ Wd  QX|  | | | ƒ Wd  QXWd  QXˆ  j	 ˆ ƒ S(   Nc         ` ss   |  j  ƒ  a } | j } | j | j | j ƒ \ } } ˆ  j | ƒ " ˆ  j t j ˆ ƒ | j	 ƒ  Wd  QXWd  QXd  S(   N(
   R   RC   R…   RZ   R'   RY   R]   R   R}   RD   (   t   smallert   largerRŒ   RC   Rj   Rç   (   R   Rï   (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   check½  s    	t   >(
   RG   RH   R   R   Ro   R|   RÙ   R:   RQ   R\   (   RN   Rß   R   R   Rå   Rõ   Rñ   t	   otherwise(    (   R   Rï   s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   isdisjointµ  s    						c         C` s  |  j  } |  j } |  j } | j } t j | t j ƒ } | j | j d | j | j ƒ ƒ ² \ } } | } | j	 ƒ  j }	 |	 j
 }
 | j |
 j |
 j ƒ \ } } | j | j | ƒ ƒ " | j t j | ƒ |	 j ƒ  Wd  QXWd  QXWd  QX|  | j t j | ƒ Wd  QXWd  QX| j | ƒ S(   Ns   ==(   RG   RH   R   R   Ro   R|   RÙ   R:   RQ   R   RC   R…   RZ   R'   RY   R¯   R]   R}   RD   R\   (   RN   Rß   R   R   R   Rå   Rï   t   if_same_sizeR÷   RŒ   RC   Rj   Rç   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   equalsÔ  s$    						c   	      C` sš   | j  t j ƒ } | d k r3 t j | t ƒ } n9 t | t ƒ rW t j | | ƒ } n  |  j	 | | | ƒ } |  | | | d ƒ } | j
 | ƒ } | | f S(   sî   
        Allocate a SetInstance with its storage.
        Return a (ok, instance) tuple where *ok* is a LLVM boolean and
        *instance* is a SetInstance object (the object's contents are
        only valid when *ok* is true).
        N(   R‡   R   Rˆ   Rš   R   R+   RÕ   t
   isinstancet   intRÝ   RÞ   (	   t   clsR   R   R   t   nitemsR~   Rä   RN   Rã   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   allocate_exì  s    c         C` s]   |  j  | | | | ƒ \ } } | j | j | ƒ d t ƒ | j j | t d ƒ Wd QX| S(   sø   
        Allocate a SetInstance with its storage.  Same as allocate_ex(),
        but return an initialized *instance*.  If allocation failed,
        control is transferred to the caller using the target's current
        call convention.
        R©   s   cannot allocate setN(   s   cannot allocate set(   Rÿ   RY   R¯   R—   R»   RÛ   RÜ   (   Rý   R   R   R   Rþ   Rã   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   allocate  s
    c         C` sV   |  | | | d ƒ } | | j _ | j t j ƒ | j _ | j j | | | j	 ƒ | S(   s¨   
        Allocate a new set instance pointing to an existing payload
        (a meminfo pointer).
        Note the parent field has to be filled by the caller.
        N(
   Rš   Rž   R¢   t   get_constant_nullR   t   pyobjectR¤   R    t   increfR0   (   Rý   R   R   R   R¢   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   from_meminfo  s
    c      
   C` s(  | j  } t j | d ƒ } t j | t ƒ } | j | | ƒ } t j | | ƒ } | j d ƒ }	 | j d ƒ }
 | j |	 ƒ | j	 |	 ƒ  | j
 | ƒ } | j d | | ƒ } | j | d t ƒ | j |
 ƒ Wd QX| j | | ƒ } | j | | ƒ | j |	 ƒ Wd QX| j |
 ƒ | j
 | ƒ S(   sT   
        Choose a suitable number of entries for the given number of items.
        i   s   calcsize.bodys   calcsize.ends   >=R©   N(   R,   R   R+   RÕ   t   shlR   Ro   Rq   R[   Ru   R\   R:   RY   R—   R]   Rx   (   Rý   R   R   Rþ   R~   R   R×   t   min_entriest   size_pR‚   Rƒ   R‰   t   is_large_enought	   next_size(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRÝ     s$    	c         C` s¤  |  j  } |  j } | j } t j | d ƒ } t j | d ƒ } |  j } | j | | ƒ } | j | j | ƒ }	 | j	 d | |	 ƒ }
 | j
 |
 d t ƒt j | |	 ƒ } | j d ƒ } | j d ƒ } | j | ƒ | j | ƒ ^ | j | ƒ } | j | | ƒ } | j | | ƒ | j	 d | | ƒ } | j | | | ƒ Wd QX| j | ƒ | j | ƒ } t r‡| j | d | |	 | | ƒ n  |  j | | d	 ƒ Wd QXd S(
   ss   
        When adding to the set, ensure it is properly sized for the given
        number of used entries.
        i   i   s   >=R©   s   calcsize.bodys   calcsize.endNsK   upsize to %zd items: current size = %zd, min entries = %zd, new size = %zd
s   cannot grow set(   RG   RH   R,   R   R+   R   R  Rt   RP   R:   RY   R—   R   Ro   Rq   R[   Ru   R\   R]   R   Rx   t   DEBUG_ALLOCSt   printft   _resize(   RN   Rþ   R   R   R~   R   t   twoR   R  R‰   t   need_resizet
   new_size_pR‚   Rƒ   t   new_sizet   is_too_small(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR«   <  s6    					c         C` s$  |  j  } |  j } | j } t j | d ƒ } t j | d ƒ } t j | t ƒ } |  j } | j | | ƒ }	 | j | j	 d |	 | ƒ |	 | ƒ }	 | j |	 | ƒ }
 | j
 | j | ƒ } | j | j	 d |
 | ƒ | j	 d | | ƒ ƒ } | j | d t ƒ"t j | | ƒ } | j d ƒ } | j d ƒ } | j | ƒ | j | ƒ { | j | ƒ } | j | | ƒ } | j	 d	 |	 | ƒ } | j | ƒ  | j | ƒ Wd
 QX| j | | ƒ | j | ƒ Wd
 QX| j | ƒ | j | ƒ } t r| j | d | | |	 | ƒ n  |  j | | d ƒ Wd
 QXd
 S(   sw   
        When removing from the set, ensure it is properly sized for the given
        number of used entries.
        i   i   s   >=s   <=R@   R©   s   calcsize.bodys   calcsize.endRö   NsM   downsize to %zd items: current size = %zd, min entries = %zd, new size = %zd
s   cannot shrink set(   RG   RH   R,   R   R+   RÕ   R   R  R.   R:   Rt   RP   Rp   RY   R—   R   Ro   Rq   R[   Ru   R\   Rv   R]   Rx   R
  R  R  (   RN   Rþ   R   R   R~   R   R  R×   R   R  t   max_sizeR‰   R  R  R‚   Rƒ   R  R  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR³   j  sF    					c   
      C` sÅ   |  j  } |  j } | } |  j | d t ƒ} | j | j | ƒ d t ƒ | j j | t	 | f ƒ Wd QX|  j
 } | j ƒ  / } | j }	 |  j | |	 j |	 j d t ƒWd QX|  j | j ƒ d S(   sw   
        Resize the payload to the given number of entries.

        CAUTION: *nentries* must be a power of 2!
        t   reallocR©   NR¬   (   RG   RH   RÞ   Rª   RY   R¯   R—   R»   RÛ   RÜ   R   R   RC   R±   RZ   R'   t   _free_payloadR   (
   RN   R   Rä   t   errmsgR   R   t   old_payloadRã   RŒ   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR  ¦  s    				c         C` sy   |  j  } |  j } |  j |  j j ƒ |  j | d t ƒ} | j | j | ƒ d t	 ƒ | j
 j | t d ƒ Wd QXd S(   s›   
        Replace the payload with a new empty payload with the given number
        of entries.

        CAUTION: *nentries* must be a power of 2!
        R  R©   s   cannot reallocate setN(   s   cannot reallocate set(   RG   RH   R  R   R   RÞ   Rª   RY   R¯   R—   R»   RÛ   RÜ   (   RN   Rä   R   R   Rã   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRÖ   À  s    		c         C` s¤  |  j  } |  j } t j | t j ƒ } | j t j ƒ } t j	 | d ƒ } t j	 | d ƒ } | j
 t j |  j ƒ ƒ }	 | j |	 ƒ }
 |  j } |
 | 8}
 t j | | t j	 | | ƒ t j	 | |
 ƒ ƒ \ } } | j | d t ƒ | j t j | ƒ Wd QX| j | j | ƒ d t ƒx| r`|  j j } | j j | | d | ƒ} t j | | ƒ } n* | j j | d | ƒ} t j | | ƒ } | j t j | | ƒ d t ƒä \ } } |  | j t j | ƒ Wd QX| ¯ | s| |  j _ | j t j ƒ |  j _ n  |  j  } t j! | | j" | d ƒ | | _# | | _$ | | _% | j& | | ƒ } | | _' t( r…| j) | d | | j" | ƒ n  Wd QXWd QXWd QX| j | ƒ S(   sÃ   
        Allocate and initialize payload for the given number of entries.
        If *realloc* is True, the existing meminfo is reused.

        CAUTION: *nentries* must be a power of 2!
        i    i   R©   NR‰   iÿ   s.   allocated %zd bytes for set at %p: mask = %zd
(*   RG   RH   R   Ro   R|   R‡   R   Rˆ   R   R+   R   R   RI   R"   Rœ   t   muladd_with_overflowRY   R—   R]   R}   R\   Rª   Rž   R¢   R    t   meminfo_varsize_alloct   is_nullt   meminfo_new_varsizeRÙ   R  R  R¤   R   t   memsetR   RQ   RR   RS   R²   RP   R
  R  (   RN   Rä   R  R   R   Rã   R~   R‘   R   R   t   payload_sizet
   entry_sizet	   allocsizet   ovfR¢   R   t   alloc_okt   if_errort   if_okR   t   new_mask(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRÞ   Ò  sV    			
							%c         C` s#   |  j  j j |  j |  j | ƒ d S(   s9   
        Free an allocated old payload at *ptr*.
        N(   RG   R    t   meminfo_varsize_freeRH   R¢   (   RN   R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR    s    c         C` s'  |  j  } |  j } t j | t j ƒ } | j t j ƒ } t j	 | d ƒ } t j	 | d ƒ } | j
 t j |  j ƒ ƒ } | j | ƒ }	 |  j }
 |	 |
 8}	 | j } | j | | ƒ } | j t j	 | |	 ƒ | j t j	 | |
 ƒ | ƒ ƒ } | j | j | ƒ d t ƒ| j j | d | ƒ} t j | | ƒ } | j t j | | ƒ d t ƒ½ \ } } |  | j t j | ƒ Wd QX| ˆ | |  j _ |  j } | j | _ | j  | _  | | _! | | _ t j" | | j# | j# | |
 ƒ t$ r| j% | d | | j& | ƒ n  Wd QXWd QXWd QX| j | ƒ S(   s7   
        Raw-copy the given payload into self.
        i    i   R©   R‰   Ns.   allocated %zd bytes for set at %p: mask = %zd
('   RG   RH   R   Ro   R|   R‡   R   Rˆ   R   R+   R   R   RI   R"   Rœ   RP   Rt   Rw   RY   R\   Rª   R    R  R  RÙ   R—   R]   R}   Rž   R¢   R   RQ   RR   RS   t
   raw_memcpyRF   R
  R  R   (   RN   t   src_payloadR   R   Rã   R~   R‘   R   R   R  R  RP   Rä   R  R¢   R   R!  R"  R   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRÚ     sJ    			
						%N(-   R“   R”   RO   R•   Rk   R   R0   R¢   R¤   R–   R¥   R¨   Rª   R®   R±   R´   Rµ   Rt   R¸   R¶   RÐ   RÑ   RÔ   RØ   Ræ   Rè   Ré   Rì   R—   Rò   Rø   Rú   t   classmethodRš   Rÿ   R   R  RÝ   R«   R³   R  RÖ   RÞ   R  RÚ   (    (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR›   ^  sP   				'								'						.	<		?	t   SetIterInstancec           B` sh   e  Z d  „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e j	 d „  ƒ Z d „  Z
 RS(   c         C` sp   | |  _  | |  _ | |  _ | j | | | ƒ |  _ |  j  j j | |  j ƒ } t | | |  j j	 | ƒ |  _
 d  S(   N(   RG   RH   RI   R   t   _iterR    R¡   R¢   RE   t	   containerRJ   (   RN   R   R   t	   iter_typet   iter_valR   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRO   Q  s    			c         C` sm   t  | | | j | ƒ } |  | | | d  ƒ } | j t j d ƒ } t j | | ƒ | j _	 | j
 | j _
 | S(   Ni    (   R›   R*  Rš   t   get_constantR   Rˆ   R   Ro   R)  RB   R¢   (   Rý   R   R   R+  RŸ   t   set_instRN   RB   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   from_setY  s    c         C` s   |  j  j ƒ  S(   N(   R)  R£   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR0   b  s    c         C` s
   |  j  j S(   N(   R)  R¢   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR¢   f  s    c         C` s   |  j  j |  j j ƒ S(   N(   RH   R\   R)  RB   (   RN   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRB   j  s    c         C` s   |  j  j | |  j j ƒ d  S(   N(   RH   R]   R)  RB   (   RN   R0   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRB   n  s    c         C` s˜   |  j  } |  j } t j | j d ƒ } | j ƒ  | j d | ƒ O } | j } | j ƒ  | j	 | j
 ƒ |  j j | j  | ƒ |  _  | j ƒ  Wd  QXd  S(   Ni   R†   (   RB   RJ   R   R+   R,   t   set_exhaustedR   RC   t	   set_validt   yield_RZ   RH   Rt   RD   (   RN   t   resultRB   R   R   RŒ   RC   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   iternextr  s    		
	
(   R“   R”   RO   R'  R/  R•   R0   R¢   RB   R–   R4  (    (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyR(  O  s   		c      
   C` s¿   t  | ƒ } t j |  | | | ƒ } t j | | ƒ } t j | | ƒ } |  j t j | ƒ } t j	 | | ƒ 8 }	 | j
 t j | | d |	 j ƒ ƒ }
 | j |
 ƒ Wd QXt |  | | | j ƒ S(   sD   
    Build a set of the given type, containing the given items.
    i    N(   t   lenR›   R   R   t
   pack_arrayRo   R-  R   Rˆ   Rr   R\   RU   RB   Rt   R   R0   (   R   R   R   t   itemsRþ   t   instt   arrayt	   array_ptrt   countRŒ   Rh   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   build_set…  s    $c         C` s4   | j  } t j |  | | ƒ } t |  | | | j ƒ S(   N(   t   return_typeR›   R   R   R0   (   R   R   R3   t   argsR   R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_empty_constructor™  s    	c   
      C` s   | j  } | j \ } | \ } t |  | | | ƒ } t j |  | | | ƒ } t |  | | | ƒ  }	 | j |	 j ƒ Wd  QXt |  | | | j ƒ S(   N(	   R=  R>  R   R›   R   R   Rt   R0   R   (
   R   R   R3   R>  R   t
   items_typeR7  t   nR8  RŒ   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_constructorŸ  s    		c         C` s*   t  |  | | j d | d ƒ } | j ƒ  S(   Ni    (   R›   R>  R¥   (   R   R   R3   R>  R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_len²  s     c         C` s1   t  |  | | j d | d ƒ } | j | d ƒ S(   Ni    i   (   R›   R>  RÐ   (   R   R   R3   R>  R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   in_set·  s     t   getiterc         C` s8   t  j |  | | j | d ƒ } t |  | | j | j ƒ S(   Ni    (   R(  R/  R=  R
   R0   (   R   R   R3   R>  R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   getiter_set¼  s    R4  c         C` s1   t  |  | | j d | d ƒ } | j | ƒ d  S(   Ni    (   R(  R>  R4  (   R   R   R3   R>  R3  R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   iternext_listiterÁ  s     s   set.addc         C` sA   t  |  | | j d | d ƒ } | d } | j | ƒ |  j ƒ  S(   Ni    i   (   R›   R>  Rt   t   get_dummy_value(   R   R   R3   R>  R8  Rh   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_addÍ  s     
s   set.discardc         C` sA   t  |  | | j d | d ƒ } | d } | j | ƒ |  j ƒ  S(   Ni    i   (   R›   R>  RÑ   RH  (   R   R   R3   R>  R8  Rh   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_discardÕ  s     
s   set.popc         C` st   t  |  | | j d | d ƒ } | j j } | j t j | | ƒ d t ƒ |  j j	 | t
 d ƒ Wd  QX| j ƒ  S(   Ni    R©   s   set.pop(): empty set(   s   set.pop(): empty set(   R›   R>  R   RQ   RY   R   R  R—   R»   RÛ   t   KeyErrorRÔ   (   R   R   R3   R>  R8  RQ   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_popÝ  s     "s
   set.removec         C` s~   t  |  | | j d | d ƒ } | d } | j | ƒ } | j | j | ƒ d t ƒ |  j j | t d ƒ Wd  QX|  j	 ƒ  S(   Ni    i   R©   s   set.remove(): key not in set(   s   set.remove(): key not in set(
   R›   R>  RÑ   RY   R¯   R—   R»   RÛ   RK  RH  (   R   R   R3   R>  R8  Rh   Rj   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   set_removeç  s     
s	   set.clearc         C` s4   t  |  | | j d | d ƒ } | j ƒ  |  j ƒ  S(   Ni    (   R›   R>  RØ   RH  (   R   R   R3   R>  R8  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   set_clearõ  s     
s   set.copyc         C` sE   t  |  | | j d | d ƒ } | j ƒ  } t |  | | j | j ƒ S(   Ni    (   R›   R>  Ræ   R   R=  R0   (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_copyû  s     s   set.difference_updatec         C` sW   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ |  j ƒ  S(   Ni    i   (   R›   R>  Ré   RH  (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_difference_update  s      s   set.intersection_updatec         C` sW   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ |  j ƒ  S(   Ni    i   (   R›   R>  Rè   RH  (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_intersection_update
  s      s   set.symmetric_difference_updatec         C` sW   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ |  j ƒ  S(   Ni    i   (   R›   R>  Rì   RH  (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_symmetric_difference_update  s      s
   set.updatec   
      C` sÚ   t  |  | | j d | d ƒ } | j d } | d } t |  | | | ƒ } | d  k	 r€ | j | j j | ƒ } | j | ƒ n  t |  | | | ƒ  }	 | j |	 j	 ƒ Wd  QX| d  k	 rÐ | j
 | j j ƒ n  |  j ƒ  S(   Ni    i   (   R›   R>  R   Rš   Rt   R   RQ   R«   R   R0   R³   RH  (
   R   R   R3   R>  R8  R@  R7  RA  R  RŒ   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   set_update  s     
c         C` sM   | j  | j d k s t ‚ | |  | | | ƒ t |  | | j d | d ƒ S(   Ni    (   R=  R>  t   AssertionErrorR
   (   R   R   R3   R>  t   op_impl(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_inplace8  s    s   set.differencec         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` s   |  j  ƒ  } | j | ƒ | S(   N(   Ræ   t   difference_update(   t   at   bt   s(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   difference_implD  s    (   t   compile_internal(   R   R   R3   R>  R[  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_differenceA  s    	s   set.intersectionc         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` sV   t  |  ƒ t  | ƒ k  r5 |  j ƒ  } | j | ƒ | S| j ƒ  } | j |  ƒ | Sd  S(   N(   R5  Ræ   t   intersection_update(   RX  RY  RZ  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   intersection_implN  s    (   R\  (   R   R   R3   R>  R_  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_intersectionK  s    	
s   set.symmetric_differencec         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` sV   t  |  ƒ t  | ƒ k r5 |  j ƒ  } | j | ƒ | S| j ƒ  } | j |  ƒ | Sd  S(   N(   R5  Ræ   t   symmetric_difference_update(   RX  RY  RZ  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   symmetric_difference_impl]  s    (   R\  (   R   R   R3   R>  Rb  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_symmetric_differenceZ  s    	
s	   set.unionc         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` sV   t  |  ƒ t  | ƒ k r5 |  j ƒ  } | j | ƒ | S| j ƒ  } | j |  ƒ | Sd  S(   N(   R5  Ræ   t   update(   RX  RY  RZ  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   union_implm  s    (   R\  (   R   R   R3   R>  Re  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt	   set_unionj  s    	
s   set.isdisjointc         C` sM   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ S(   Ni    i   (   R›   R>  Rø   (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_isdisjoint|  s      s   set.issubsetc         C` sM   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ S(   Ni    i   (   R›   R>  Rò   (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_issubsetƒ  s      s   set.issupersetc         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` s   | j  |  ƒ S(   N(   Rò   (   RX  RY  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   superset_implŽ  s    (   R\  (   R   R   R3   R>  Ri  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_issuperset‹  s    	c         C` sM   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | ƒ S(   Ni    i   (   R›   R>  Rú   (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyRg  “  s      c         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` s   |  | k S(   N(    (   RX  RY  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   ne_implœ  s    (   R\  (   R   R   R3   R>  Rk  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_neš  s    	c         C` sS   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | d t ƒS(   Ni    i   Rí   (   R›   R>  Rò   Rª   (   R   R   R3   R>  R8  Rß   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_lt¡  s      c         C` s   d „  } |  j  | | | | ƒ S(   Nc         S` s
   | |  k  S(   N(    (   RX  RY  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   gt_implª  s    (   R\  (   R   R   R3   R>  Rn  (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_gt¨  s    	c         C` sƒ   t  |  | | j d | d ƒ } t  |  | | j d | d ƒ } | j | j t j ƒ } | j | j t j ƒ } | j d | | ƒ S(   Ni    i   s   ==(   R›   R>  t   ptrtointR¢   R   R~   t   icmp_signed(   R   R   R3   R>  RX  RY  t   mat   mb(    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   set_is¯  s
      c         C` s   | j  | j  k s t ‚ | S(   N(   Rk   RT  (   R   R   t   fromtyt   totyR§   (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt
   set_to_set»  s    (h   t   __doc__t
   __future__R    R   R   t   collectionsR˜   t   mathRl   t   llvmliteR   t   numbaR   R   R   t   numba.targets.imputilsR   R   R	   R
   R   R   R   R   R   t   numba.utilsR   t    R   R   R    R$   R9   R=   R-   RÕ   Rs   R—   R
  R8   R<   R?   R*   t
   namedtupleRA   t   objectRE   R›   R(  R<  t   setR?  t   IterableTypeRB  R5  t   SetRC  RÐ   t   AnyRD  RF  t   SetItert   BORROWEDRG  RI  RJ  RL  RM  RN  RO  RP  RQ  RR  RS  t   iandt   iort   isubt   ixort   op_RU  RV  R²   R]  Rp   R`  t   xorRc  t   or_Rf  Rg  t   leRh  t   geRj  R`   t   neRl  t   ltRm  t   gtRo  t   is_Rt  Rw  (    (    (    s3   lib/python2.7/site-packages/numba/targets/setobj.pyt   <module>   s   @							ýÿ ÿ ó6	$!!
!!	!	!	!$	$$$!$$$$$$$