
\K]c           @   s  d  d l  Z  d  d l Z d  d l 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 m Z d  d l m Z m Z m Z m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m  Z  m! Z! m" Z" m# Z# d  d
 l$ m% Z% d  d l& m' Z' d  d l( m) Z) d  d l* m+ Z+ d  d l, m- Z- d d l. m/ Z/ m0 Z0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 e e j7  d e j f d     Y Z8 e	 e j7 d d  e	 e j7 d d  e	 e j7 d d  e	 e j7 d d  e	 e j7 d d  e e j9  d e f d     Y Z: d   Z; d    Z< e e j= e j>  d!    Z? e e j>  d"    Z@ e
 e j7  d#    ZA e e j7  d$    ZB d%   ZC e d&    ZD e d'    ZE e d(    ZF e d)    ZG e d* d+   ZH e d, eI  d-    ZJ d.   ZK e d/    ZL e d0    ZM e d1    ZN e d, eI  d2    ZO e d3    ZP e d4    ZQ e d5    ZR e d, eI  d6    ZS e d, eI  d7    ZT e d8    ZU e d9    ZV e d:    ZW e eX  d;    ZY e e  jZ  d<    Z[ e e  j\  d=    Z] e e  j^  d>    Z_ e e  j`  d?    Za e e  jb  d@    Zc e e  jd  dA    Ze e e  jf  dB    Zg e e j7 dC  dD    Zh e e j7 dE  dF    Zi e e j7 dG  dH    Zj e e j7 dI  d d  dJ   Zl e e j7 dK  dL dM   Zm e e j7 dN  dL dO   Zn e e j7 dP  dL dQ   Zo e dR    Zp e e j7 dS  dT    Zq e e j7 dU  dV    Zr e dW    Zs e dX    Zt dY   Zu e e j7 dZ  d d[   Zv e e j7 d\  d d]   Zw e e j7 d^  d d_   Zx e ey d`   Zz e da    Z{ e db    Z| e d, eI  dc    Z} e dd    Z~ e e  j  de    Z e e  j  e e  j  df     Z e dg    Z e e  j  dh    Z e e  j  di    Z e e j7 dj  dk    Z e e j7 dl  dm    Z e dn e j7  do    Z e dp e j9  e e j  dq     Z d S(r   iN(   t   IntTypet   Constant(
   t   modelst   register_modelt   make_attribute_wrappert   unboxt   boxt   NativeValuet   overloadt   overload_methodt	   intrinsict   register_jitable(   t   lower_constantt
   lower_castt   lower_builtint   iternext_implt   impl_ret_new_reft   RefType(   t   register_defaultt   StructModel(   t   cgutils(   t   types(   t   njit(   t   PY_UNICODE_1BYTE_KINDt   PY_UNICODE_2BYTE_KINDt   PY_UNICODE_4BYTE_KINDt   PY_UNICODE_WCHAR_KIND(   t   slicing(   t	   c_helpers(   t
   _Py_hash_t(   t   memcpy_region(   t   TypingErrori   (   t   _Py_TOUPPERt   _Py_UCS4t   _PyUnicode_ToUpperFullt   _PyUnicode_gettyperecordt   _PyUnicode_TyperecordMaskst   _PyUnicode_IsUppercaset   _PyUnicode_IsLowercaset   _PyUnicode_IsTitlecaset   UnicodeModelc           B   s   e  Z d    Z RS(   c         C   s}   d t  j f d t  j f d t  j f d t  j f d t f d t  j t  j  f d t  j f g } t j	 j
 |  | | |  d  S(   Nt   datat   lengtht   kindt   is_asciit   hasht   meminfot   parent(   R   t   voidptrt   intpt   int32t   uint32R   t   MemInfoPointert   pyobjectR   R   t   __init__(   t   selft   dmmt   fe_typet   members(    (    s,   lib/python2.7/site-packages/numba/unicode.pyR6   .   s    	(   t   __name__t
   __module__R6   (    (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR(   ,   s   R)   t   _dataR*   t   _lengthR+   t   _kindR,   t	   _is_asciiR-   t   _hasht   UnicodeIteratorModelc           B   s   e  Z d    Z RS(   c         C   sG   d t  j t  j  f d | j f g } t t |   j | | |  d  S(   Nt   indexR)   (   R   t   EphemeralPointert   uintpR)   t   superRB   R6   (   R7   R8   R9   R:   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR6   E   s    (   R;   R<   R6   (    (    (    s,   lib/python2.7/site-packages/numba/unicode.pyRB   C   s   c         C   sV  d d l  m } m } m } m } m } m } m } m } m	 }	 t
 d }
 | | | | |  | |  | |  | |   } | |
  } |   } |   } |   } |   } | |  |	 |  |	 |  |	 |  |	 |   } | d k r t d   n  | j } | j } | j } | d t |  } | | j |  } t |  | | | | j f S(   st   Get string data from a python string for use at compile-time to embed
    the string data into the LLVM module.
    i(	   t	   CFUNCTYPEt   c_void_pt   c_intt   c_uintt	   c_ssize_tt   c_ubytet	   py_objectt   POINTERt   byreft   extract_unicodes1   cannot extract unicode data from the given stringi   N(   t   ctypesRG   RH   RI   RJ   RK   RL   RM   RN   RO   R   t   Nonet
   ValueErrort   valuet   _kind_to_byte_widtht   from_addresst   bytes(   t   objRG   RH   RI   RJ   RK   RL   RM   RN   RO   t   extract_unicode_fnt   protot   fnR*   R+   R,   t   hashvR)   t   nbytest   out(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   compile_time_get_string_dataM   s$    @
				0			c         C   s   t  |  \ } } } } } | j }	 |  j |	 |  }
 t j |  |  |  } |
 | _ | j j |  | _ | j j |  | _ | j	 j |  | _	 | j
 j d  | _
 | j   S(   sf   
    Get string data by `compile_time_get_string_data()` and return a
    unicode_type LLVM value
    i(   R_   t   modulet   insert_const_bytesR   t   create_struct_proxyR)   R*   t   typeR+   R,   R-   t	   _getvalue(   t   contextt   buildert   typt   literal_stringt	   databytesR*   R+   R,   R\   t   modt   gvt   uni_str(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   make_string_from_constanti   s    		c         C   s   t  |  | | | j  S(   N(   Rm   t   literal_value(   Re   Rf   t   fromtyt   totyt   val(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   cast_from_literal}   s    c         C   s   t  |  | | |  S(   N(   Rm   (   Re   Rf   Rg   t   pyval(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   constant_unicode   s    c         C   s   | j  j |  \ } } } } } } t j |   | j | j  }	 | |	 _ | |	 _ | |	 _ | |	 _	 | |	 _
 | j  j | |  |	 _ | |	 _ t j | j | j  j    }
 t |	 j   d |
 S(   sE   
    Convert a unicode str object to a native unicode structure.
    t   is_error(   t   pyapit   string_as_string_size_and_kindR   Rb   Re   Rf   R)   R*   R+   R,   R-   t   nrt_meminfo_new_from_pyobjectR.   R/   t   is_not_nullt   err_occurredR   Rd   (   Rg   RX   t   ct   okR)   R*   R+   R,   R\   Rl   Ru   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unbox_unicode_str   s    $							c         C   su   t  j |   | j | j d | } | j j | j | j | j  } | j j	 |  | j j
 j | j |  |  | S(   s@   
    Convert a native unicode structure to a unicode string
    RT   (   R   Rb   Re   Rf   Rv   t   string_from_kind_and_dataR+   R)   R*   t   object_hasht   nrtt   decref(   Rg   Rq   R{   Rl   t   res(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   box_unicode_str   s    $	c            s     f d   } | S(   Nc            s^   | \ } } | j  | t    j    } | j | j | | g   } | j | t d   S(   Ni    (   t   bitcastR    t
   as_pointert   loadt   gept   zext(   Re   Rf   t	   signaturet   argsR)   t   idxt   ptrt   ch(   t   bitsize(    s,   lib/python2.7/site-packages/numba/unicode.pyt   codegen   s    (    (   R   R   (    (   R   s,   lib/python2.7/site-packages/numba/unicode.pyt   make_deref_codegen   s    c         C   s(   t  j t  j t  j  } | t d  f S(   Ni   (   R   R3   R0   R1   R   (   t	   typingctxR)   t   offsett   sig(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   deref_uint8   s    c         C   s(   t  j t  j t  j  } | t d  f S(   Ni   (   R   R3   R0   R1   R   (   R   R)   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   deref_uint16   s    c         C   s(   t  j t  j t  j  } | t d  f S(   Ni    (   R   R3   R0   R1   R   (   R   R)   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   deref_uint32   s    c         C   s7   d   } t  j t  j t  j t  j t  j  } | | f S(   s   make empty string with data buffer of size alloc_bytes.

    Must set length and kind values for string after it is returned
    c         S   s   | \ } } } } t  j t j  } | |  |  }	 | j | | j | t | j d    }
 |  j j	 | |
  |	 _
 | |	 _ | |	 _ | |	 _ |  j t d  |	 _ |  j j | |	 j
  |	 _ t  j |	 j j  |	 _ |	 j   S(   Ni   i(   R   Rb   R   t   unicode_typet   mult   addR   Rc   R   t   meminfo_allocR.   R+   R,   R*   t   get_constantR   R-   t   meminfo_dataR)   t   get_null_valueR/   Rd   (   Re   Rf   R   R   t   kind_valt   char_bytes_valt
   length_valt   is_ascii_valt   uni_str_ctorRl   t
   nbytes_val(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   details   s    					(   R   R   R2   R1   R3   (   R   R+   t
   char_bytesR*   R,   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _malloc_string   s    	$i    c         C   s>   t  |   } t |  | | |  } t | | t j d   | S(   Ni    (   RU   R   t   _set_code_pointt   npR3   (   R+   R*   R,   t
   char_widtht   s(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _empty_string   s    t   _nrtc         C   se   |  j  t k r t |  j |  S|  j  t k r> t |  j |  S|  j  t k r] t |  j |  Sd Sd  S(   Ni    (   R?   R   R   R=   R   R   R   R   (   t   at   i(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _get_code_point   s    c            s     f d   } | S(   Nc            s}   | \ } } }   d k  r6 | j  | t     } n  | j | t    j    } | j | | j | | g   |  j   S(   Ni    (   t   truncR    R   R   t   storeR   t   get_dummy_value(   Re   Rf   R   R   R)   R   R   R   (   R   (    s,   lib/python2.7/site-packages/numba/unicode.pyR     s    (    (   R   R   (    (   R   s,   lib/python2.7/site-packages/numba/unicode.pyt   make_set_codegen  s    c         C   s.   t  j t  j t  j t  j  } | t d  f S(   Ni   (   R   t   voidR0   t   int64R3   R   (   R   R)   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt	   set_uint8  s    c         C   s.   t  j t  j t  j t  j  } | t d  f S(   Ni   (   R   R   R0   R   R3   R   (   R   R)   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   set_uint16  s    c         C   s.   t  j t  j t  j t  j  } | t d  f S(   Ni    (   R   R   R0   R   R3   R   (   R   R)   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   set_uint32$  s    c         C   s   |  j  t k r% t |  j | |  nV |  j  t k rJ t |  j | |  n1 |  j  t k ro t |  j | |  n t d   d  S(   Ns4   Unexpected unicode representation in _set_code_point(	   R?   R   R   R=   R   R   R   R   t   AssertionError(   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR   *  s    c         C   sz   |  t  k s | t  k r' t d   n  |  t k r7 | S|  t k rZ | t k rS | S|  Sn |  t k rj |  St d   d  S(   Ns!   PY_UNICODE_WCHAR_KIND unsupporteds/   Unexpected unicode representation in _pick_kind(   R   R   R   R   R   (   t   kind1t   kind2(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   _pick_kind=  s    c         C   s2   |  d k r% | d k r% t  j d  St  j d  S(   Ni   i    (   R   R3   (   t	   is_ascii1t	   is_ascii2(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _pick_asciiO  s    c         C   s[   |  t  k r d S|  t k r  d S|  t k r0 d S|  t k rK t d   n t d   d  S(   Ni   i   i   s!   PY_UNICODE_WCHAR_KIND unsupporteds'   Unexpected unicode encoding encountered(   R   R   R   R   R   (   R+   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyRU   V  s    c         C   s   | d k r d S| | |  j  k r' d S| | | j  k r> d SxZ t |  D]L } t |  | |  } t | | |  } | | k  r d S| | k rK d SqK Wd S(   Ni    ii   (   R>   t   rangeR   (   R   t   a_offsett   bt   b_offsett   nR   t   a_chrt   b_chr(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _cmp_regiond  s    c         C   sW   xP t  t |  t |   d  D]. } t | | |  d t |    d k r! | Sq! Wd S(   Ni   i    i(   R   t   lenR   (   t   substrR   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _findx  s    '$c         C   sZ  |  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d	 k pY|  d
 k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k pY|  d k S(   Ni	   i
   i   i   i   i   i   i   i   i    i   i   i  i    i   i   i   i   i   i   i   i   i	   i
   i(   i)   i/   i_   i 0  (    (   t
   code_point(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _is_whitespace  s:    c         C   sO   |  d k  r t  S|  d k  r  t Sd } |  | k rG d } t |   n  t Sd S(   sK   
    Compute the minimum unicode kind needed to hold a given codepoint
    i   i   i s;   Invalid codepoint. Found value greater than Unicode maximumN(   R   R   RS   R   (   t   cpt   MAX_UNICODEt   msg(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _codepoint_to_kind  s    c         C   s
   |  d k  S(   s;   
    Returns true if a codepoint is in the ASCII range
    i   (    (   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _codepoint_is_ascii  s    c         C   s#   t  |  t j  r d   } | Sd  S(   Nc         S   s   |  j  S(   N(   R>   (   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   len_impl  s    (   t
   isinstanceR   t   UnicodeType(   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_len  s    	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s>   t  |   t  |  k r t St |  d | d t  |    d k S(   Ni    (   R   t   FalseR   (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   eq_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_eq  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s   |  | k S(   N(    (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   ne_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_ne  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   si   t  t |   t |   } t |  d | d |  } | d k rC t S| d k re t |   t |  k  St S(   Ni    i(   t   minR   R   t   TrueR   (   R   R   t   minlent   eqcode(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   lt_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_lt  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   si   t  t |   t |   } t |  d | d |  } | d k rC t S| d k re t |   t |  k St S(   Ni    i   (   R   R   R   R   R   (   R   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   gt_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_gt  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s   |  | k S(   N(    (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   le_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_le  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s   |  | k  S(   N(    (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   ge_impl   s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   unicode_ge  s    $	c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s   t  d | d |   d k S(   NR   R   i(   R   (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   contains_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_contains  s    $	t   findc         C   s#   t  | t j  r d   } | Sd  S(   Nc         S   s   t  d | d |   S(   NR   R   (   R   (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt	   find_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_find  s    	t
   startswithc         C   s#   t  | t j  r d   } | Sd  S(   Nc         S   s"   t  |  d | d t |   d k S(   Ni    (   R   R   (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   startswith_impl  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_startswith  s    	t   endswithc         C   s#   t  | t j  r d   } | Sd  S(   Nc         S   sH   t  |   t  |  } | d k  r& t St |  | | d t  |   d k S(   Ni    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   endswith_impl!  s    (   R   R   R   (   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_endswith  s    	t   splitc         C   s   | d k p* t  | t j t j t j f  s1 d  St  | t j  rS d d  } | S| d  k s t  | t j  s t | d t	  d  k r d  d d  } | Sd  S(   Nic   
      S   sj  t  |   } t  |  } | d k r3 t d   n  g  } d } d } | d k r | d k r t | d  } x t |  D]< } t |  |  | k ry | j |  | | ! | d } qy qy Wn d }	 x | | k  rE| d k s |	 | k  rEt |  | | d |  d k r8| j |  | | ! | | 7} | } |	 d 7}	 q | d 7} q W| | k rf| j |  |  n  | S(   Ni    s   empty separatori   i(   R   RS   R   R   t   appendR   (
   R   t   sept   maxsplitt   a_lent   sep_lent   partst   lastR   t   sep_code_pointt   split_count(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   split_impl1  s2    
RT   c         S   s   t  |   } g  } d } d } d } t } x t |  D] } t |  |  }	 t |	  }
 | rv |
 rg q | } t } q7 |
 s q7 | j |  | | ! t } | d 7} | d k r7 | | k r7 Pq7 q7 W| | k r | r | j |  |  n  | S(   Ni    i   i(   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   t   in_whitespace_blockR   t   is_whitespace(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   split_whitespace_implV  s0    	
(
   R   R   t   Omittedt   Integert   IntegerLiteralRR   R   t   NoneTypet   getattrR   (   R   R   R   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_split)  s    " t   centert    c         C   sg   t  | t j  s! t d   n  | d k pE t  | t j t j f  sW t d   n  d d  } | S(   Ns   The width must be an IntegerR  s"   The fillchar must be a UnicodeTypec   	      S   s   t  |   } t  |  } | d k r3 t d   n  | | k rC |  S| | } | d | | @d @} | | } | | } | | k r | |  | S| |  | | Sd  S(   Ni   s5   The fill character must be exactly one character longi   (   R   RS   (	   t   stringt   widtht   fillchart   str_lent   fillchar_lent	   allmargint   lmargint   rmargint   l_string(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   center_impl  s    


(   R   R   R  R   R   R   (   R  R	  R
  R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_centery  s    't   ljustc         C   sg   t  | t j  s! t d   n  | d k pE t  | t j t j f  sW t d   n  d d  } | S(   Ns   The width must be an IntegerR  s"   The fillchar must be a UnicodeTypec         S   sY   t  |   } t  |  } | d k r3 t d   n  | | k rC |  S|  | | | } | S(   Ni   s5   The fill character must be exactly one character long(   R   RS   (   R  R	  R
  R  R  t   newstr(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   ljust_impl  s    (   R   R   R  R   R   R   (   R  R	  R
  R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_ljust  s    't   rjustc         C   sg   t  | t j  s! t d   n  | d k pE t  | t j t j f  sW t d   n  d d  } | S(   Ns   The width must be an IntegerR  s"   The fillchar must be a UnicodeTypec         S   sY   t  |   } t  |  } | d k r3 t d   n  | | k rC |  S| | | |  } | S(   Ni   s5   The fill character must be exactly one character long(   R   RS   (   R  R	  R
  R  R  R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   rjust_impl  s    (   R   R   R  R   R   R   (   R  R	  R
  R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_rjust  s    'c         C   sE  t  |  } | d k r d St  |   } | d | } |  j } |  j } xB | D]: } | t  |  7} t | | j  } t | | j  } qO Wt | | |  } | d }	 t | d |	 d t  |	   t  |	  }
 xm t d |  D]\ } t | |
 |  d |  |
 | 7}
 | | }	 t | |
 |	 d t  |	   |
 t  |	  7}
 q W| S(   Ni    t    i   (   R   R?   R@   R   R   R   t   _strncpyR   (   R   R   t	   parts_lenR   R*   R+   R,   t   pt   resultt   partt
   dst_offsetR   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt	   join_list  s,    		


t   joinc         C   sy   t  | t j  r7 t  | j t j  ru d   } | Sn> t  | t j  rV d   } | St  | t j  ru d   } | Sd  S(   Nc         S   s   t  |  |  S(   N(   R!  (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   join_list_impl  s    c         S   s&   g  | D] } | ^ q } t  |  |  S(   N(   R!  (   R   R   R  t
   parts_list(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   join_iter_impl  s    c         S   s6   g  t  t |   D] } | | ^ q } t |  |  S(   N(   R   R   R!  (   R   R   R   R$  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   join_str_impl  s    )(   R   R   t   Listt   dtypeR   t   IterableType(   R   R   R#  R%  R&  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_join  s    			t   zfillc         C   s.   t  | t j  s! t d   n  d   } | S(   Ns   <width> must be an Integerc         S   so   t  |   } | | k r |  S| r, |  d n d } d | | } | d k ra | | |  d } n
 | |  } | S(   Ni    R  t   0t   +t   -i   (   R-  R.  (   R   (   R  R	  R  t
   first_chart   paddingR  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   zfill_impl   s    
(   R   R   R  R   (   R  R	  R1  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_zfill  s    	c         C   sS   | d  k r d n | } t |   } x( t |  D] } |  | | k r1 | Sq1 W| S(   NR  (   RR   R   R   (   R  t   charsR  R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_strip_left_bound  s    c         C   sg   | d  k r d n | } t |   } x< t | d d d  D]$ } |  | | k r; | d 7} Pq; q; W| S(   NR  i   i(   RR   R   R   (   R  R3  R  R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_strip_right_bound  s    
c         C   s^   t  |  t j  r |  j }  n  |  d  k pH t  |  t j t j t j f  sZ t d   n  d  S(   Ns%   The arg must be a UnicodeType or None(	   R   R   t   OptionalRc   RR   R   R   R  R   (   R3  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_strip_types_check+  s    t   lstripc         C   s   t  |  d  d  } | S(   Nc         S   s   |  t  |  |  S(   N(   R4  (   R  R3  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   lstrip_impl8  s    (   R7  RR   (   R  R3  R9  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_lstrip4  s    
t   rstripc         C   s   t  |  d  d  } | S(   Nc         S   s   |  t  |  |   S(   N(   R5  (   R  R3  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   rstrip_implA  s    (   R7  RR   (   R  R3  R<  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_rstrip=  s    
t   stripc         C   s   t  |  d  d  } | S(   Nc         S   s)   t  |  |  } t |  |  } |  | | !S(   N(   R4  R5  (   R  R3  t   lbt   rb(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt
   strip_implJ  s    (   R7  RR   (   R  R3  RA  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_stripF  s    
c         C   sa   |  d k r | r d S| Sn |  d k  r6 |  | 7}  n  |  d k  sN |  | k r] t d   n  |  S(   s%  
    Parameters
    ----------
    idx : int or None
        the index
    length : int
        the string length
    is_start : bool; optional with defaults to True
        Is it the *start* or the *stop* of the slice?

    Returns
    -------
    norm_idx : int
        normalized index
    i    s   string index out of rangeN(   RR   t
   IndexError(   R   R*   t   is_start(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   normalize_str_idxS  s    c         C   s"   | | |  } d   } | | f S(   s   Fix slice object.
    c   	      S   sc   | j  \ } } | \ } } |  j | | |  } t j |  | | |  t j | | |  | j   S(   N(   R   t   make_helperR   t   guard_invalid_slicet	   fix_sliceRd   (	   Re   Rf   R   R   t	   slicetypet
   lengthtypet   sliceobjR*   t   slice(    (    s,   lib/python2.7/site-packages/numba/unicode.pyR   x  s    (    (   R   RK  R*   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _normalize_slicer  s    	c         C   s"   t  j |  } d   } | | f S(   s2   Compute the span from the given slice object.
    c         S   s@   | j  \ } | \ } |  j | | |  } t j | |  } | S(   N(   R   RF  R   t   get_slice_length(   Re   Rf   R   R   RI  RK  RL  t   result_size(    (    s,   lib/python2.7/site-packages/numba/unicode.pyR     s
    	(   R   R1   (   R   RK  R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _slice_span  s    	c   
      C   s   | j  |  j  k rd t | j   } | | } | | } | | } t |  j | | j | | d d n8 x5 t |  D]' }	 t |  | |	 t | | |	   qq Wd  S(   Nt   aligni   (   R?   RU   R   R=   R   R   R   (
   t   dstR   t   srct
   src_offsetR   t
   byte_widtht   src_byte_offsett   dst_byte_offsetR]   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR    s    


c         C   sF   | t  j k s t  d   } t  j t  j t  j t  j  } | | f S(   s_   Create a slice of a unicode string using a view of its data to avoid
    extra allocation.
    c         S   s\  | \ } } } t  j t j  |  | d | } t  j t j  |  |  } | j | _ | j | _ | j | _ | | _ |  j t	 d  | _
 |  j j t  }	 |	 j |  j t j f i   }
 |  j |	 |
  } | | | j f  } | j | |  } | j | j | g  | _ t  j | j j  | _ |  j rR|  j j | | j d |  n  | j   S(   NRT   ii    (   R   Rb   R   R   R.   R+   R,   R*   R   R   R-   t   typing_contextt   resolve_value_typeRU   t   get_call_typeR2   t   get_functionR   R   R)   R   R/   Rc   t
   enable_nrtR   t   increfR   Rd   (   Re   Rf   R   R   RS  t   startR*   t   in_strt   view_strt   bw_typt   bw_sigt   bw_implRU  R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR     s*    		 (   R   R   R   R1   (   R   t   src_tt   start_tt   length_tR   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _get_str_slice_view  s    	c         C   sW   t  |  t j  rS t  | t j  r1 d   } | St  | t j  rS d   } | Sn  d  S(   Nc         S   sJ   t  | t |    } t |  j d |  j  } t | d t |  |   | S(   Ni   i    (   RE  R   R   R?   R@   R   R   (   R   R   t   ret(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   getitem_char  s    c         S   s   t  | t |    } t |  } | j d k rC t |  | j |  St |  j | |  j  } | j } x: t	 |  D], } t
 | | t |  |   | | j 7} qq W| Sd  S(   Ni   (   RM  R   RP  t   stepRg  R^  R   R?   R@   R   R   R   (   R   R   t	   slice_idxt   spanRh  t   curR   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   getitem_slice  s    	(   R   R   R   R  t	   SliceType(   R   R   Ri  Rn  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_getitem  s    		c         C   s5   t  |  t j  r1 t  | t j  r1 d   } | Sd  S(   Nc         S   s   |  j  | j  } t |  j | j  } t |  j | j  } t | | |  } x3 t t |    D] } t | | t	 |  |   q_ Wx= t t |   D]) } t | t |   | t	 | |   q W| S(   N(
   R>   R   R?   R   R@   R   R   R   R   R   (   R   R   t
   new_lengtht   new_kindt	   new_asciiR  R   t   j(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   concat_impl  s    '(   R   R   R   (   R   R   Ru  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_concat  s    $	
c         C   s   |  d k s | d k  r d S| d k r, |  S|  j  | } |  j } t | | |  j  } t |   } t | d |  d |  | } x4 d | | k r t | | | d |  | d 9} q Wd | | k s | | } t | | | | | |  | Sd  S(   NR  i   i    i   (   R>   R?   R   R@   R   R  (   t   str_argt   mult_argRq  Rr  R  t   len_at	   copy_sizet   rest(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   _repeat_impl  s"    	
c         C   sf   t  |  t j  r1 t  | t j  r1 d   } | St  |  t j  rb t  | t j  rb d   } | Sd  S(   Nc         S   s   t  |  |  S(   N(   R|  (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   wrap  s    c         S   s   t  | |   S(   N(   R|  (   R   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR}    s    (   R   R   R   R  (   R   R   R}  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_repeat  s    $	$	c         C   s#   t  |  t j  r d   } | Sd  S(   Nc         S   s   t  |   d k S(   Ni    (   R   (   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   impl  s    (   R   R   R   (   R   R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_not  s    	t   isupperc         C   s   d   } | S(   s   
    Implements .isupper()
    c   	      S   s   t  |   } | d k r t S|  j rv t } xD |  D]< } t |  } | j t j @} | | d k M} | s2 t Sq2 W| S| d k r t |   Sd } x[ t	 |  D]M } t
 |  |  } t |  s t |  r t S| r t |  r d } q q W| d k Sd  S(   Ni    i   (   R   R   R@   R   R#   t   flagsR$   t
   UPPER_MASKR%   R   R   R&   R'   (	   R   t   lR  t   charR)   t   tt   casedR   R   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR  *  s.    	
(    (   R   R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_isupper#  s    	t   upperc         C   s   d   } | S(   s   
    Implements .upper()
    c         S   s  t  |   } |  j rm t |  j | |  j  } x9 t |  D]+ } t |  |  } t | | t |   q: W| St t d | |  j  } t	 j
 d d t } d } d } x t |  D]y } d | (t |  |  } t t |  |  }	 xE t |	  D]7 }
 t | | |
  } t | | | |
  | d 7} q Wq W| } t |  } t | | t |   } x- t |  D] } t | | t | |   qhW| Sd  S(   Ni   R(  i    i   (   i   (   R   R@   R   R?   R   R   R   R    R   R   t   arrayR!   R"   t   maxR   R   (   R   R  Rh  R   R   t   tmpt   mappedt   maxchart   kt   n_resRt  t	   newlengtht   newkindR   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyR  L  s4    		(    (   R   R  (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   unicode_upperG  s    	+t   getiterc   
      C   s   | j  \ } | \ } |  j | | j  } |  j t j d  } t j | |  } | | _ | | _	 |  j
 r |  j j | | |  n  | j   }	 t |  | | j |	  S(   Ni    (   R   RF  t   return_typeR   R   RE   R   t   alloca_once_valueRC   R)   R\  R   R]  Rd   R   (
   Re   Rf   R   R   t   tyR)   t   iterobjt   zerot   indexptrR   (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   getiter_unicodez  s    				t   iternextc         C   sd  | j  \ } | \ } |  j } | j t j  } | j | t j t j f i   }	 |  j	 | |	  }
 | j t
  } | j | t j f i   } |  j	 | |  } |  j | | d | } | | | j f  } | j | j  } | j d | |  } | j |  | j |  O |
 | | j | f  } | j |  t j | |  } | j | | j  Wd  QXd  S(   NRT   t   <(   R   RX  RY  t   operatort   getitemRZ  R   R   RE   R[  R   RF  R)   R   RC   t   icmp_unsignedt	   set_validt   if_thent   yield_R   t   increment_indexR   (   Re   Rf   R   R   R  t   itertyt   itert   tyctxt   fntyt   getitem_sigt   getitem_implt   len_sigR   R  t   strlenRC   t   is_validt   gotitemt   nindex(    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   iternext_unicode  s(    			(   R  t   numpyR   t   llvmlite.irR    R   t   numba.extendingR   R   R   R   R   R   R   R	   R
   R   t   numba.targets.imputilsR   R   R   R   R   R   t   numba.datamodelR   R   t   numbaR   R   R   t   numba.pythonapiR   R   R   R   t   numba.targetsR   t   numba._helperlibR   t   numba.targets.hashingR   t   numba.unsafe.bytesR   t   numba.errorsR   t   unicode_supportR    R!   R"   R#   R$   R%   R&   R'   R   R(   t   UnicodeIteratorTypeRB   R_   Rm   t   StringLiteralR   Rr   Rt   R}   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   RU   R   R   R   R   R   R   R   t   eqR   t   neR   t   ltR   t   gtR   t   leR   t   geR   t   containsR   R   R   R   RR   R  R  R  R  R!  R*  R2  R4  R5  R7  R:  R=  RB  R   RE  RM  RP  R  Rg  R  Rp  R   t   iaddRv  R|  R   R~  t   not_R  R  R  R  t   NEWR  (    (    (    s,   lib/python2.7/site-packages/numba/unicode.pyt   <module>   s   F.":						
		"

	O 		&$3