
\K]c           @` s  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 m	 Z	 d d l
 j j Z d d l
 m Z d d l Z d d l 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 d d l m Z  d d	 l 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, m- Z- d d l. m/ Z/ d d l0 m1 Z1 m2 Z2 m3 Z3 d d l4 m5 Z5 m6 Z6 m7 Z7 d   Z8 d   Z9 d   Z: d   Z; d   Z< d   Z= d   Z> d   Z? d   Z@ eA d  ZB d   ZC e# d e jD  d    ZE d   ZF e# d e jG  e) e- jH  d     ZI d   ZJ d    ZK d!   ZL e# e jM e jD e jN  e# e jM e jD e jO  d"     ZP e# e jM e jD e jQ  d#    ZR e# e jS e jD e jT e jT  d$    ZU e# eV e jD  d%    ZW e# d& e jX  d'    ZY e# d( e jX e jT  d)    ZZ d* e[ f d+     YZ\ d, e\ f d-     YZ] d. e\ f d/     YZ^ d0 e\ f d1     YZ_ d2 e\ f d3     YZ` d4 e\ f d5     YZa d6 e[ f d7     YZb d8   Zc e# e jM e jD e jX  d9    Zd d:   Ze d;   Zf d<   Zg d=   Zh d>   Zi d?   Zj d@   Zk dA   Zl dB   Zm dC   Zn e# dD e jX  dE    Zo dF   Zp e# dD e jX e jQ  dG    Zq e# dD e jX e jr e jT   dH    Zs e2 e jt  eA dI   Zu e$ e jX dJ  dK    Zv dL   Zw dM   Zx e# dN e jX e jQ  dO    Zy e# dN e jX e jr e jT   dP    Zz e2 e j{  dQ    Z| e# dR e jX  dS    Z} e# e j~ e jX  dT    Z e# dU e jX  dV    Z dW   Z e2 e j  dX    Z e2 e j  dY    Z e2 e j  dZ    Z e1 d[    Z e j3 e jX d\  d]    Z e# d^ e jX e j  d_    Z e$ e jX d`  da    Z e$ e jX db  e$ e j db  dc     Z e$ e jX dd  e$ e j dd  de     Z e$ e jX df  e$ e j df  dg     Z e$ e jX dh  di    Z e$ e jX dj  e$ e j dj  dk     Z e$ e j dl  dm    Z e$ e j dn  do    Z e$ e j dp  dq    Z e$ e j dr  ds    Z e$ e j dt  du    Z e$ e jX dv  dw    Z e$ e j dx  dy    Z e' e j e j  e' e j e j  dz     Z d{   Z e$ e jX d|  d}    Z e$ e j dn  e$ e j dp  d~     Z e$ e j dr  d    Z e$ e jX d  d    Z e$ e jX d  d    Z e3 e jX d  e3 e jX d  d     Z d   Z d   Z e$ e j d  e  e$ e j d  e  e% e jX  d    Z e# d e jX e j  d    Z e% e j  d    Z e& e j  d    Z e# d e j e j  d    Z e# d e j e j e jT  d    Z e( e jX  d    Z e( e j  d    Z e# e j e jX e jX  d    Z d   Z d   Z eA eA eA d  Z eA d  Z d   Z d   Z d   Z e$ e jX d  d    Z e# d e j  e) e- jH  d     Z e# e jM e j e jN  d    Z e# e jS e j e jN e jT  d    Z e# eV e j  d    Z e# e j e jX  d    Z e# d e j  e) e- jH  d     Z e# e e jr e jN   e# e j e jr e jN   d     Z e# e e jQ  e# e j e jQ  d     Z e# d e j  e) e- jH  d     Z e# e j e jT  d    Z e# d e j  e) e- jH  d     Z d   Z d   Z d   Z d   Z d   Z e# e j e jT  e# e j e jT e jT  d     Z e# e j e jT  e# e j e jT e j  d     Z e# e j e jT  e# e j e jT e jT  d     Z e# e j e jT  e# e j e jT e j  d     Z e  d d f k rHe# e j e jT e jT  d    Z e# e j e jT e jT e j  d    Z e# e j e jT e jT  d    Z e# e j e jT e jT e j  d    Z n  e# e j e jT  d    Z e# e j e jT e j  d    Z e# e j e jT  d    Z e# e j e jT e j  d    Z e# e j e jN  d    Z e# e j e jN e j  d    Z d   Z e j2 e  d    Z e j2 e j  eA d e d   Z e# e j e jX  d    Z e# e j e jX e jN  d    Z e# e j e jX e jN  e# d e jX e jN  d     Z e# d e jX e jX  e# e j e jX e jX  d     Z e# d e jX e j  e# e j e jX e j  e# d e jX e jQ  e# e j e jX e jQ  d       Z e# e j e j  d    Z e# e j e j e j  d    Z e# e j e j e j e j  d    Z e# e j e j e j e j e j  d    Z e# e j e j e j  d    Z e# e j e j e j e jN  d    Z d   Ze# d e jX  d    Ze# e je jX  d    Zd   Ze# e je jX  d    Ze# e je jX  d    Z	e# d e jX e j  d    Z
e# e je jD  e# e je jD e j  d     Ze# e e jT e jT  e# e e jT e jT e j  e# e e jT e jT  e# e e jT e jT e j  d       Zd   Zd   Zd   Zd   Zd   Ze# e je jT  e# e je jT e j  d     Zd   Zd   Zd   Zd   Ze# e je jX e jN  d    Zd   Zd   Ze# e je jr e jX   d    Ze# e je jr e jX   d    Ze# e j e jr e jX   d    Z!d   Z"d   Z#d   Z$e# e j%e jQ  d    Z&e# e j%e jQ e jN  d    Z'e# e j(e jQ  d    Z)d   Z*e  d d f k re# e j+e jQ  d    Z,e# e j+e jQ e jN  d    Z-n  e# e j.e jQ  d    Z/e# e j0e jQ  d    Z1e# e j2e jQ  d    Z3e j3 e jX d  d    Z4e j3 e jX d  d    Z5i  Z6d   Z7e8d  Z9e# d e jX  d    Z:e# e j;e jX  d    Z<e# d e jX e j  e# e j=e jX e j  d     Z>e' e jX e jX  d    Z?d  Z@e jAe@ d   ZBe# e@e jX e jQ e jQ  d   ZCe j2 e jDjEjF eA eA d  ZFd S(  s[   
Implementation of operations on Array objects and objects supporting
the buffer protocol.
i    (   t   print_functiont   absolute_importt   divisionN(   t   ir(   t   Constant(   t   typest   cgutilst   typingt   utilst	   extendingt   pndindext   errors(   t   as_dtypet   carrayt   farrayt   is_contiguoust
   is_fortran(   t   version(   t   type_can_asarray(   t   lower_builtint   lower_getattrt   lower_getattr_generict   lower_setattr_generict
   lower_castt   lower_constantt   iternext_implt   impl_ret_borrowedt   impl_ret_new_reft   impl_ret_untrackedt   RefType(   t	   signature(   t   register_jitablet   overloadt   overload_methodi   (   t	   quicksortt	   mergesortt   slicingc         C` sP   t  j | j |  t  j | j |  g } |  j j |  } | j d |  d S(   sz   
    Set the "range" metadata on a load instruction.
    Note the interval is in the form [lower_bound, upper_bound).
    t   rangeN(   R   t   intt   typet   modulet   add_metadatat   set_metadata(   t   buildert   loadt   lower_boundt   upper_boundt   range_operandst   md(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   set_range_metadata#   s    c         C` s/   d | j  j d >d } t |  | d |  d S(   sF   
    Mark the result of a load instruction as positive (or zero).
    i   i    N(   R'   t   widthR1   (   R+   R,   R.   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   mark_positive.   s    c         ` sM    j   t j     j  d  f       f d     Y    S(   s   
    Return the Structure representation of the given *array_type*
    (an instance of types.ArrayCompatible).

    Note this does not call __array_wrap__ in case a new array structure
    is being created (rather than populated).
    t   ArrayStructc           ` s5   e  Z     f d    Z e   f d    Z RS(   c         ` s   t     } y |  j j d |  } Wn$ t k
 rN t   |   j |  SX|  j j  } |  j |  } | d  k r t	 j
 |  j | d t } n | } | |  j | f  } | | f S(   Nt	   __array__t   zfill(   R   t   _contextt   get_functiont   NotImplementedErrort   supert
   _make_refst   data_model_managert   _get_be_typet   NoneR   t   alloca_oncet   _buildert   True(   t   selft   reft   sigt
   array_implt	   datamodelt   be_typet	   outer_ref(   R4   t
   array_typet   real_array_type(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR;   D   s    c         ` s   |  j  }  d k r%   j |  d  S|  j d  } g  } xU t   D]G } t j | | d |  } | j |  } | j |  t | |  qG Wt j	 | |  S(   s\   
            Override .shape to inform LLVM that its elements are all positive.
            i    t   shape(
   R@   t   __getattr__t   _get_ptr_by_nameR%   R   t   gep_inboundsR,   t   appendR3   t
   pack_array(   RB   R+   t   ptrt   dimst   it   dimptrR,   (   t   baset   ndim(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRK   W   s    	(   t   __name__t
   __module__R;   t   propertyRK   (    (   R4   RI   RU   RV   RJ   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR4   B   s   (   t   as_arrayR   t   create_struct_proxyRV   (   RI   (    (   R4   RI   RU   RV   RJ   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   make_array6   s
    		(,c         C` s   |  j  | j  } |  j |  S(   sB   
    Return the item size for the given array or buffer type.
    (   t   get_data_typet   dtypet   get_abi_sizeof(   t   contextRI   t   llty(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_itemsizeq   s    c         C` s1   | j  r d n d } |  j | | j | d | S(   s3   
    Load the item at the given array pointer.
    i   t   alignN(   t   alignedR>   t   unpack_valueR^   (   R`   R+   t   arraytyRQ   Rc   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   load_itemy   s    c         C` s4   | j  r d n d } |  j | | j | | d | S(   s4   
    Store the item at the given array pointer.
    i   Rc   N(   Rd   R>   t
   pack_valueR^   (   R`   R+   Rf   t   valRQ   Rc   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   store_item   s    c         C` s[   | j  r< |  j | | | t j  } t j | | |  } n |  j | | | t j  } | S(   sM   
    Fix the integer index' type and value for the given dimension size.
    (   t   signedt   castR   t   intpR$   t	   fix_indext   uintp(   R`   R+   t   idxtyt   idxt   sizet   ind(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   fix_integer_index   s
    	c         C` s   t  | t j  ry | j d k ry t  | j t j  s< t  t |  |  | |  } t |  | | | j	  } | j | f S| | f Sd S(   sS   
    Normalize the index type and value.  0-d arrays are converted to scalars.
    i    N(
   t
   isinstanceR   t   ArrayRV   R^   t   Integert   AssertionErrorR\   Rg   t   data(   R`   R+   Rp   Rq   t   idxaryt   idxval(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   normalize_index   s    !c         C` s\   t  |  rR t g  t | |  D]! \ } } t |  | | |  ^ q   \ } } n  | | f S(   s^   
    Same as normalize_index(), but operating on sequences of
    index types and values.
    (   t   lent   zipR|   (   R`   R+   t   index_typest   indicesRp   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   normalize_indices   s    @c         C` s  |  j  } |  j } |  j }	 t |	 j  }
 | d k rZ t j | j |	 j	 d    } n  | j t
 j  } t | t t f  r t j | | |  } n  t | t t f  r t j | | |  } n  t | t j  r | |  } n  t d | d | d | d | d |  } | d k rBt j | j |	 j	 d    | d <n
 | | d <| j t
 j d  } t j | | | j j  } x) | D]! } | j | | d d	 g } qW| | d
 <t | j    } | |
 k rt d j |
 |    n  x* | j   D] \ } } t |  | |  qW|  S(   s   
    Helper function for populating array structures.
    This avoids forgetting to set fields.

    *shape* and *strides* can be Python tuples or LLVM arrays.
    t   meminfoRK   t   stridesRy   t   itemsizet   parenti   t   flagst   nswt   nitemss   missing {0}N(   R7   R@   t
   _datamodelt   sett   _fieldsR>   R   t   nullt   get_value_typet   get_typeR   Rm   Ru   t   tuplet   listR   RP   R   t	   INT_TYPESt   dictt   get_constantt   unpack_tupleR'   t   countt   mult   keyst
   ValueErrort   formatt   itemst   setattr(   t   arrayRy   RK   R   R   R   R   R`   R+   RF   t   required_fieldst   intp_tt   attrsR   t   unpacked_shapet   axlent
   got_fieldst   kt   v(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   populate_array   sD    				

c         C` s   | j  } | j } | j t j d  } t j | | j |  j  } x) | D]! } | j	 | | d d g } qI W| | _
 | j t j t | |    | _ d S(   s   
    Update some auxiliary information in *array* after some of its fields
    were changed.  `itemsize` and `nitems` are updated.
    i   R   R   N(   R7   R@   R   R   Rm   R   R   RK   RV   R   R   Rb   R   (   t   arytyR   R`   R+   R   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   update_array_info   s    			t   getiterc         C` s   | j  \ } | \ } |  j | | j  } |  j t j d  } t j | |  } | | _ | | _	 |  j
 r |  j j | | |  n  | j   }	 t |  | | j |	  }
 |
 S(   Ni    (   t   argst   make_helpert   return_typeR   R   Rm   R   t   alloca_once_valuet   indexR   t
   enable_nrtt   nrtt   increft	   _getvalueR   (   R`   R+   RD   R   Rf   R   t   iterobjt   zerot   indexptrt   rest   out(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   getiter_array   s    				c         C` s4   t  j | | | | g d | } t |  | | |  S(   s8   
    Look up and return an element from a 1D array.
    t
   wraparound(   R   t   get_item_pointerRg   (   R`   R+   Rf   R   Rq   R   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _getitem_array1d  s    	t   iternextc         C` s8  | j  \ } | \ } | j } | j d k rC t d | j   n  |  j | | d | } t |  |  | d | j }	 t j | |	 j	 d d \ }
 | j
 | j  } | j t j | |
  } | j |  | j |  U t |  | | |	 | d t } | j |  t j | |  } | j | | j  Wd  QXd  S(   Ni   s   iterating over %dD arrayt   valueR   R   (   R   RI   RV   R9   R   R\   R   R   R   RK   R,   R   t   icmpt   lct   ICMP_SLTt	   set_validt   if_thenR   t   Falset   yield_t   increment_indext   store(   R`   R+   RD   R   t   resultt   itertyt   iterRf   R   t   aryR   R   t   is_validR   t   nindex(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_array  s"    			c         C` s  |  j  t j d  } t j | | j | j  } t j | | j | j  } g  }	 g  }
 g  } d } xt | |  D]\ } } | t j	 k r | j t
 |  d } xM t |  D]? } |	 j |  |
 j | |  | j | |  | d 7} q Wqs n  t | t j  r|  j | | d | } t j |  | | |  t j | | | |  |	 j | j  t j | |  } t j | | | |  } |
 j |  | j |  nQ t | t j  rt |  | | | | |  } |	 j |  n t d | f   | d 7} qs W| | j k st  x? | | j k  r_|
 j | |  | j | |  | d 7} q!Wt j | | | |	 d t } | |
 | f S(   s   
    Perform basic indexing on the given array.
    A (data pointer, shapes, strides) tuple is returned describing
    the corresponding view.
    i    i   R   s   unexpected index type: %sR   (   R   R   Rm   R   R   RK   RV   R   R~   t   ellipsisR}   R%   RO   Ru   t	   SliceTypeR   R$   t   guard_invalid_slicet	   fix_slicet   startt   get_slice_lengtht
   fix_strideRw   Rt   R9   Rx   R   R   (   R`   R+   R   R   R   R   R   t   shapesR   t   output_indicest   output_shapest   output_stridest   axt   indexvalRp   t	   n_missingRS   t   slicet   sht   stRs   t   dataptr(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   basic_indexing:  sP    	c   	      C` sP   t  |  |  |  } t | d | d | d | d | j d | j d | j | S(   sF   
    Build a view over the given array with the given parameters.
    Ry   RK   R   R   R   R   (   R\   R   R   R   R   (	   R`   R+   R   R   R   Ry   R   R   t   retary(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   make_viewu  s    			
c      	   C` s   t  |  | | | | |  \ } } }	 t | t j  ra t |  | | | | | | |	  }
 |
 j   S| sn t  t |  | | |  Sd S(   sp   
    Return the result of indexing *ary* with the given *indices*,
    returning either a scalar or a view.
    N(   R   Ru   R   t   BufferR   R   Rx   Rg   (   R`   R+   R   R   R   R   R   R   t   view_shapest   view_stridesR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _getitem_array_generic  s    $
c   	      C` s   | j  \ } } | \ } } | j d k s0 t  t |  |  | |  } t |  | | j | | | f | f  } t |  | | j |  S(   s4   
    Basic indexing with an integer or a slice.
    i   (   R   RV   Rx   R\   R   R   R   (	   R`   R+   RD   R   R   Rp   R   Rq   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   getitem_arraynd_intp  s    c      	   C` s   | j  \ } } | \ } } t |  |  | |  } | j } t j | | d t |  }	 t |  | | |	  \ } }	 t d   | D  r t |  | | | | | | |	  St	 |  | | j
 | | | |	  }
 t |  | | j
 |
  S(   s2   
    Basic or advanced indexing with a tuple.
    R   c         s` s!   |  ] } t  | t j  Vq d  S(   N(   Ru   R   Rv   (   t   .0t   ty(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>  s    (   R   R\   R   R   R   R}   R   t   anyt   fancy_getitemR   R   R   (   R`   R+   RD   R   R   t   tuptyR   t   tupR   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   getitem_array_tuple  s    		c         C` sD  | j  \ } } } | \ } } }	 t | t j  r] | j }
 t j | | d t |  } n | f }
 | f } t |  |  | |  } t |  | |
 |  \ }
 } y( t	 |  | | | |
 |  \ } } } Wn t
 k
 r t } n Xt |  } | rt |  | | | |
 |  S|  j | |	 | | j  }	 t |  | | |	 |  d S(   sH   
    array[a] = scalar_or_array
    array[a,..,b] = scalar_or_array
    R   N(   R   Ru   R   t	   BaseTupleR   R   R}   R\   R   R   R9   RA   t   boolt   fancy_setsliceRl   R^   Rj   (   R`   R+   RD   R   R   Rp   t   valtyR   Rq   Ri   R   R   R   R   R   t   use_fancy_indexing(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   setitem_array  s(    	!			(

c   	      C` sd   | j  \ } | \ } t |  } | |  | |  } | j } | j | d  } t |  | | j |  S(   Ni    (   R   R\   RK   t   extract_valueR   R   (	   R`   R+   RD   R   R   R   t   arysttyt   shapearyR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   array_len  s    		s
   array.itemc         C` s   | j  \ } | \ } t |  |  | |  } | j } | j | j d | | j d   d t $ d } |  j j | t	 | f  Wd  QXt
 |  | | | j  S(   Ns   !=i   t   likelys>   item(): can only convert an array of size 1 to a Python scalar(   R   R\   R   R   t   icmp_signedR'   R   t	   call_convt   return_user_excR   Rg   Ry   (   R`   R+   RD   R   R   R   R   t   msg(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_item  s    		$
s   array.itemsetc   
      C` s   | j  \ } } | \ } } | | j k s0 t  t |  |  | |  } | j } | j | j d | | j d   d t $ d }	 |  j	 j
 | t |	 f  Wd  QXt |  | | | | j  |  j   S(   Ns   !=i   R   s/   itemset(): can only write to an array of size 1(   R   R^   Rx   R\   R   R   R   R'   R   R   R   R   Rj   Ry   t   get_dummy_value(
   R`   R+   RD   R   R   R   R   Ri   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_itemset  s    	$
t   Indexerc           B` sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   sq   
    Generic indexer interface, for generating indices over a fancy indexed
    array on a single dimension.
    c         C` s
   t   d S(   se   
        Prepare the indexer by initializing any required variables, basic
        blocks...
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   prepare   s    c         C` s
   t   d S(   s=   
        Return this dimension's size as an integer.
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_size'  s    c         C` s
   t   d S(   s;   
        Return this dimension's shape as a tuple.
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   get_shape-  s    c         C` s
   t   d S(   s}   
        Return a half-open [lower, upper) range of indices this dimension
        is guaranteed not to step out of.
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_index_bounds3  s    c         C` s
   t   d S(   sW  
        Start indexation loop.  Return a (index, count) tuple.
        *index* is an integer LLVM value representing the index over this
        dimension.
        *count* is either an integer LLVM value representing the current
        iteration count, or None if this dimension should be omitted from
        the indexation result.
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   loop_head:  s    	c         C` s
   t   d S(   s)   
        Finish indexation loop.
        N(   R9   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   loop_tailE  s    (	   RW   RX   t   __doc__R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR     s   					t   EntireIndexerc           B` sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s:   
    Compute indices along an entire array dimension.
    c         C` sI   | |  _  | |  _ | |  _ | |  _ | |  _ |  j  j t j  |  _ d  S(   N(	   R`   R+   R   R   t   dimR   R   Rm   t   ll_intp(   RB   R`   R+   R   R   R	  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   __init__Q  s    					c         C` sa   |  j  } | j |  j j |  j  |  _ t j | |  j  |  _	 | j
   |  _ | j
   |  _ d  S(   N(   R+   R   R   RK   R	  Rr   R   R?   R
  R   t   append_basic_blockt   bb_startt   bb_end(   RB   R+   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  Y  s
    	c         C` s   |  j  S(   N(   Rr   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  `  s    c         C` s
   |  j  f S(   N(   Rr   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  c  s    c         C` s   |  j  d  |  j f S(   Ni    (   R
  Rr   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  f  s    c         C` s   |  j  } |  j  j t j |  j d  |  j  | j |  j  | j |  j  | j	 |  j  } | j
 | j d | |  j  d t  | j |  j  Wd  QX| | f S(   Ni    s   >=R   (   R+   R   R   R&   R
  R   t   branchR  t   position_at_endR,   R   R   Rr   R   R  (   RB   R+   t	   cur_index(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  j  s    	%
c         C` s^   |  j  } t j | | j |  j   } | j | |  j  | j |  j  | j |  j	  d  S(   N(
   R+   R   R   R,   R   R   R  R  R  R  (   RB   R+   t
   next_index(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  v  s
    	(
   RW   RX   R  R  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  L  s   						t   IntegerIndexerc           B` sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s0   
    Compute indices from a single integer.
    c         C` s7   | |  _  | |  _ | |  _ |  j  j t j  |  _ d  S(   N(   R`   R+   Rq   R   R   Rm   R
  (   RB   R`   R+   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    			c         C` s   d  S(   N(    (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   t  j |  j d  S(   Ni   (   R   R&   R
  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   d S(   N(    (    (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s%   |  j  |  j j |  j  |  j    f S(   N(   Rq   R+   t   addR  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   |  j  d  f S(   N(   Rq   R>   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   d  S(   N(    (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (
   RW   RX   R  R  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  ~  s   						t   IntegerArrayIndexerc           B` sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s;   
    Compute indices from an array of integer indices.
    c         C` s^   | |  _  | |  _ | |  _ | |  _ | |  _ | j d k sB t  |  j  j t j	  |  _
 d  S(   Ni   (   R`   R+   Rp   Rz   Rr   RV   Rx   R   R   Rm   R
  (   RB   R`   R+   Rp   Rz   Rr   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    					c         C` sb   |  j  } t j | |  j j  d |  _ t j | |  j  |  _ | j	   |  _
 | j	   |  _ d  S(   Ni    (   R+   R   R   Rz   RK   t   idx_sizeR?   R
  t	   idx_indexR  R  R  (   RB   R+   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s
    	c         C` s   |  j  S(   N(   R  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s
   |  j  f S(   N(   R  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   |  j  d  |  j f S(   Ni    (   R
  Rr   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c      	   C` s   |  j  } |  j  j t j |  j d  |  j  | j |  j  | j |  j  | j	 |  j  } | j
 | j d | |  j  d t  | j |  j  Wd  QXt |  j | |  j |  j | d t } t |  j | |  j j | |  j  } | | f S(   Ni    s   >=R   R   (   R+   R   R   R&   R
  R  R  R  R  R,   R   R   R  R   R  R   R`   Rp   Rz   Rt   R^   Rr   (   RB   R+   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    	%
c         C` s^   |  j  } t j | | j |  j   } | j | |  j  | j |  j  | j |  j	  d  S(   N(
   R+   R   R   R,   R  R   R  R  R  R  (   RB   R+   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    		(
   RW   RX   R  R  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s   							t   BooleanArrayIndexerc           B` sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s>   
    Compute indices from an array of boolean predicates.
    c         C` sm   | |  _  | |  _ | |  _ | |  _ | j d k s9 t  |  j  j t j  |  _	 t
 j |  j	 d  |  _ d  S(   Ni   i    (   R`   R+   Rp   Rz   RV   Rx   R   R   Rm   R
  R   R&   R   (   RB   R`   R+   Rp   Rz   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    				c         C` s   |  j  } t j | |  j j  d |  _ t j | |  j  |  _ t j | |  j  |  _	 | j
   |  _ | j
   |  _ | j
   |  _ d  S(   Ni    (   R+   R   R   Rz   RK   Rr   R?   R
  R  R   R  R  t   bb_tailR  (   RB   R+   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    	c         C` s   |  j  } t j | |  j  } t j | |  j  q } | j |  } t |  j | |  j	 |  j
 | j d t } | j | | j | | j   } | j | |  Wd  QX| j |  S(   NR   (   R+   R   R   R   t	   for_rangeRr   R,   R   R`   Rp   Rz   R   R   R  t   zextR'   R   (   RB   R+   R   t   loopt   ct   pred(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    	!c         C` s   |  j    f S(   N(   R  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   |  j  d  |  j f S(   Ni    (   R
  Rr   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c      	   C` sB  |  j  } |  j  j |  j |  j  |  j  j |  j |  j  | j |  j  | j |  j  | j |  j  } | j |  j  } | j	 | j
 d | |  j  d t  | j |  j  Wd  QXt |  j | |  j |  j | d t } | j	 | j |    | j |  j  Wd  QXt j | |  } | j | |  j  | | f S(   Ns   >=R   R   (   R+   R   R   R  R   R  R  R  R,   R   R   Rr   R   R  R   R`   Rp   Rz   t   not_R  R   R   (   RB   R+   R  t	   cur_countR  t
   next_count(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s$    	
c         C` s~   |  j  } | j |  j  | j |  j  t j | | j |  j   } | j | |  j  | j |  j	  | j |  j
  d  S(   N(   R+   R  R  R  R   R   R,   R  R   R  R  (   RB   R+   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    		(
   RW   RX   R  R  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s   								t   SliceIndexerc           B` sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s(   
    Compute indices along a slice.
    c         C` ss   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |  j  j t j	  |  _
 t j |  j
 d  |  _ d  S(   Ni    (   R`   R+   R   R   R	  Rp   R   R   R   Rm   R
  R   R&   R   (   RB   R`   R+   R   R   R	  Rp   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  +  s    							c         C` s   |  j  } | j |  j j |  j  |  _ t j |  j | |  j	 |  j
  t j | |  j
 |  j  t j | |  j
 j  |  _ t j | |  j  |  _ t j | |  j  |  _ | j   |  _ | j   |  _ d  S(   N(   R+   R   R   RK   R	  t   dim_sizeR$   R   R`   Rp   R   R   R   t
   is_neg_intt   stept   is_step_negativeR?   R
  R   R   R  R  R  (   RB   R+   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  6  s    	
c         C` s   t  j |  j |  j  S(   N(   R$   R   R+   R   (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  D  s    c         C` s   |  j    f S(   N(   R  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  G  s    c         C` s(   t  j |  j |  j  \ } } | | f S(   N(   R$   t   get_slice_boundsR+   R   (   RB   t   lowert   upper(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  J  s    c         C` s   |  j  } |  j  j |  j j |  j  |  j  j |  j |  j  | j |  j  | j	 |  j  | j
 |  j  } | j
 |  j  } | j |  j | j d | |  j j  | j d | |  j j   } | j | d t  | j |  j  Wd  QX| | f S(   Ns   <=s   >=R   (   R+   R   R   R   R   R   R   R  R  R  R,   t   selectR&  R   t   stopR   R   R  (   RB   R+   R  R   t   is_finished(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  N  s    	c         C` s   |  j  } | j | j |  j  |  j j d d g } | j | |  j  t j | | j |  j	   } | j | |  j	  | j
 |  j  | j |  j  d  S(   NR   R   (   R+   R  R,   R   R   R%  R   R   R   R   R  R  R  R  (   RB   R+   R  R!  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  `  s    	!(
   RW   RX   R  R  R  R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR"  &  s   						t   FancyIndexerc           B` sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s4   
    Perform fancy indexing on the given array.
    c      	   C` s"  | |  _  | |  _ | |  _ t j | | j | j  |  _ t j | | j | j  |  _ |  j  j	 t
 j  |  _ g  } d } xt | |  D]\ }	 }
 |
 t
 j k r	| j t |  d } xC t |  D]5 } t | | | | |  } | j |  | d 7} q Wq n  t |
 t
 j  r^| j | |
 |	  } t | | | | | |
 |  } | j |  nt |
 t
 j  rt | | |
 |	 |  j |  } t | | |  } | j |  n t |
 t
 j  r[t |
  | | |	  } t |
 j t
 j  rt | | |
 | |  j |  } n9 t |
 j t
 j  r?t | | |
 |  } n d sKt   | j |  n t  d |
 f   | d 7} q W| | j k st  | | j f   xB | | j k  rt | | | | |  } | j |  | d 7} qWt |  | j k st  t |  | j f   | |  _! d  S(   Ni    i   s   unexpected index type: %s("   R`   R+   R   R   R   RK   RV   R   R   R   R   Rm   R
  R~   R   R}   R%   R  RO   Ru   R   R   R"  Rw   Rt   R  Rv   R\   R^   R  t   BooleanR  Rx   t   indexers(   RB   R`   R+   R   R   R   R   R/  R   R   Rp   R   RS   t   indexerR   Rs   Rz   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  p  s\    					$0c         C` sP   x |  j  D] } | j   q
 Wt g  |  j  D] } | j   ^ q+ d  |  _ d  S(   N(    (   R/  R  t   sumR  t   indexers_shape(   RB   RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s   |  j  S(   s?   
        Get the resulting data shape as Python tuple.
        (   R2  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         C` s  t  |  |  j j k s t  |  j } t j } |  j d  } |  j d  } | } | } x t |  j	 |  j
 |  D] \ }	 }
 } | j | | j d |
 |   } |	 j   \ } } | j | |  } | j | | j | |   } | j d | |  } | j | | j | | |   } | j | | j | | |   } qs W| j | |  } | j | | |  } | j | | |  } | | f S(   s   
        Get a half-open [lower, upper) range of byte offsets spanned by
        the indexer with the given strides and itemsize.  The indexer is
        guaranteed to not go past those bounds.
        i    i   s   ==t   <(   R}   R   RV   Rx   R+   R   t	   false_bitR
  R~   R/  R2  t   or_t   icmp_unsignedR  R   t   subR   R  R*  (   RB   R   R   R+   t   is_emptyR   t   oneR(  R)  R0  RK   t   stridet   lower_indext   upper_indext   lower_offsett   upper_offsett   is_downwards(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_offset_bounds  s.    					c         C` s)   t  d   |  j D   \ } } | | f S(   Nc         s` s   |  ] } | j    Vq d  S(   N(   R  (   R   RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>  s    (   R~   R/  (   RB   R   t   counts(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   begin_loops  s    c         C` s(   x! t  |  j  D] } | j   q Wd  S(   N(   t   reversedR/  R  (   RB   RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   end_loops  s    (	   RW   RX   R  R  R  R  R@  RB  RD  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR-  k  s   	:			"	c      	   C` sy  t  j | | j  } t  j | | j  }	 | j }
 t |  | | | | |  } | j   | j } | j   } t	 |  | | |  } | j } t  j
 | |  j t j d   } | j   \ } } t  j | |
 | |	 | j | d t } t |  | | |  } | j |  } | j | | g  } t |  | | | |  t  j | |  } | j | |  | j   t |  | | | j    S(   Ni    R   (   R   R   RK   R   Ry   R-  R  R   R  t   _empty_nd_implR   R   R   Rm   RB  t   get_item_pointer2t   layoutR   Rg   R,   t   gepRj   R   R   RD  R   R   (   R`   R+   RD   R   R   R   R   R   R   R   Ry   R0  t   out_tyt
   out_shapesR   t   out_datat   out_idxt   _RQ   Ri   t   curt   next_idx(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR     s.    	
			
c   	   	   C` s   | j  \ } } | \ } } t |  |  | |  } | j d k r t |  | | |  \ } } t |  | | j | | | f | f  } t |  | | j |  St |  | | | | | | f | f  Sd S(   s3   
    Advanced or basic indexing with an array.
    i    N(   R   R\   RV   R|   R   R   R   R   (	   R`   R+   RD   R   R   Rp   R   Rq   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   fancy_getitem_array  s    c         C` sU  | j  } | j d  } | j d  } | j d k rT | }	 | j | | j  }
 n | }	 | }
 x t | j  D] } | j | | | j | | |   } | j d | |  } | j	 | | j
 |
 |  |
  }
 | j	 | |	 | j
 |	 |   }	 qp W| j
 |
 |  }
 | j d | j |  } | j	 | | |
  }
 | j	 | | |	  }	 |	 |
 f S(   s   
    Compute a half-open range [lower, upper) of byte offsets from the
    array's data pointer, that bound the in-memory extent of the array.

    This mimicks offset_bounds_from_strides() from numpy/core/src/private/mem_overlap.c
    i    i   t   CFs   >=s   ==(   R   R'   RG  R   R   R%   RV   R7  R   R*  R  (   R`   R+   t   arrtyt   arrR   R   R   R   R9  R(  R)  RS   t   max_axis_offsett
   is_upwardsR8  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   offset_bounds_from_strides  s*    			c         C` sC   | j  | | j  } | j | |  } | j | |  } | | f S(   s   
    Given [lower, upper) byte offsets and a base data pointer,
    compute the memory pointer bounds as pointer-sized integers.
    (   t   ptrtointR'   R  (   R`   R+   R(  R)  Ry   t   data_ptr_as_intR   t   end(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   compute_memory_extentsH  s    c   	      C` s7   t  |  | | | | |  \ } } t |  | | | |  S(   sr   
    Compute a half-open range [start, end) of pointer-sized integers
    which fully contain the array data.
    (   RV  RZ  (	   R`   R+   RR  RS  R   R   Ry   R(  R)  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_array_memory_extentsS  s    c         C` s4   | j  | j d | |  | j d | |   } | S(   s[   
    Whether two memory extents [a_start, a_end) and [b_start, b_end)
    may overlap.
    R3  (   t   and_R6  (   R`   R+   t   a_startt   a_endt   b_startt   b_endt   may_overlap(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   extents_may_overlap]  s    c         ` s~   j   d  t j        d     j  d t    j | j | j  }  j	 j
   |  }	 |	 j     j |	   }	   j |	    j t j  }
 t j    |
  _ } t j     	 
 j |  } t j   |	    |  }   j   j |  |  Wd  QXWd  QX          	 
  f d   }       f d   } | | f S(   Nt   CR   c         ` s   t  |   
 j k s t  t j     }   j  d t  \ } } | <   j t j     j	      |  d t |  Wd  QX| 6   j t j     	 
 j
 |  d t |  Wd  QXWd  QXt    
   j	 |   S(   NR   R   (   R}   RV   Rx   R   R?   t   if_elseR   R   RF  R,   RG  Rg   (   t   source_indicest   src_ptrt   if_copyt	   otherwise(   R+   R`   t	   copy_datat   copy_layoutt   copy_shapest   copy_stridest   ptrtyt   src_datat
   src_shapest   src_stridest   srctyt   use_copy(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   src_getitem  s$    	c          ` sT     j   d t 9   j   }    j |    }   j j   |   Wd  QXd  S(   NR   (   R   R   R,   t   bitcastR   t   free(   Ry   (   R+   R`   Ri  Rr  t	   voidptrty(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   src_cleanup  s    (   R'   R   R   R>   R   R   R   R   R   R   t   allocateRt  R   R   R   Rm   t	   loop_nestRF  RG  R,   (   R`   R+   Rr  Rq  t   srcRo  Rp  Rn  t	   allocsizeRy   R   R   Rf  t   dest_ptrRs  Rw  (    (   R+   R`   Ri  Rj  Rk  Rl  Rm  Rn  Ro  Rp  Rq  Rr  Rv  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   maybe_copy_sourcej  s.    		%0c         C` sW  |  j  t j d  } |  j  t j d  } t |  t |  k r} t |  t |  } | g | | } | g | | } n t |  t |  k  rMt |  t |  } g  | |  D] } | j d | |  ^ q }	 t j | j |	 t j	  }
 | j
 | j |
  d t $ d } |  j j | t | f  Wd QX| | } | | } n  | | f S(   se  
    Preprocess dimension for broadcasting.
    Returns (shapes, strides) such that the ndim match *target_shape*.
    When expanding to higher ndim, the returning shapes and strides are
    prepended with ones and zeros, respectively.
    When truncating to lower ndim, the shapes are checked (in runtime).
    All extra dimension must have size of 1.
    i    i   s   ==R   s,   cannot broadcast source array for assignmentN(   R   R   Ro   R}   R6  t	   functoolst   reduceR\  R   t   true_bitR   R  R   R   R   R   (   R`   R+   R   R   t   target_shapeR   R9  t   nd_diffR   t
   dim_is_onet   acceptedR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _bc_adjust_dimension  s$    	)
c         C` sG  g  } g  } |  j  t j d  } |  j  t j d  } g  t | |  D]! \ }	 }
 | j d |	 |
  ^ qF } g  | D] }
 | j d |
 |  ^ qt } g  t | |  D] \ } } | j | |  ^ q } g  t | | |  D]$ \ } }	 }
 | j | |	 |
  ^ q } g  t | |  D]! \ } }
 | j | | |
  ^ q} | | f S(   s   
    Broadcast shapes and strides to target_shape given that their ndim already
    matches.  For each location where the shape is 1 and does not match the
    dim for target, it is set to the value at the target and the stride is
    set to zero.
    i    i   s   !=s   ==(   R   R   Ro   R~   R   R\  R*  (   R`   R+   R   R   R  t	   bc_shapest
   bc_stridesR   R9  t   tart   oldt   mismatcht
   src_is_onet   xt   yt   predst   p(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _bc_adjust_shape_strides  s    4(4:4c   
      C` s   t  j | | j  } t  j | | j  } t |  | | | |  \ } } t |  | | | |  \ } } | j d t |  d d  } t |  |  |  } t	 d t  j
 | |  d t  j
 | |   }	 t  j | | |	  | | f S(   sX   
    Broadcast the given array to the target_shape.
    Returns (array_type, array)
    RV   RG  t   ARK   R   (   R   R   RK   R   R  R  t   copyR}   R\   R   RP   t   copy_struct(
   R`   R+   t   arrtypeRS  R  R   R   t   new_arrtypet   new_arrt   repl(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _broadcast_to_shape  s    c   %   
   ` s  | j  \ } }  | \ } }  t |     |  } t j   | j  }	 t j   | j  }
 | j } t    | | | |  } | j   t	  t
 j  rf j  | j   } t         t      |  \   t j    j  } t j    j  }  j } t j } t |  t |  k sHt  x> t | |  D]- \ } }   j |   j d | |   } qXW  j | d t $ d }  j j   t | f  Wd QXt      | | |  \ } } | j |
 | j  \ } } t    | | |  \ } } t    | | | |  } t    |   | | |  \ } } nt	  t
 j   rP j  | j   } t |  d k st   j! t t" t
 j#    } |    f  }   j d | d |  }   j | d t $ d }  j j   t | f  Wd QX      f d   } d   } n    f d	   } d
   } | j$   \ }  }! t% d   |! D  }" | |"  }#  j&   |#  | j  }# t j'   | |	 |
 | j( |  d t }$ t)    | |# |$  | j*   |    j+   S(   s   
    Implement slice assignment for arrays.  This implementation works for
    basic as well as fancy indexing, since there's no functional difference
    between the two for indexed assignment.
    s   !=R   s0   cannot assign slice from input of different sizeNi   i    c         ` s@   |  \ }  j  t j t   t j   } |    | f  S(   N(   R8   t   operatort   getitemR   R   Rm   (   Re  Rq   t   getitem_impl(   R+   R`   Rz  t	   src_dtypeRq  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRs  ?  s
    	c           S` s   d  S(   N(    (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRw  G  s    c         ` s     S(   N(    (   Re  (   Rz  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRs  O  s    c           S` s   d  S(   N(    (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRw  R  s    c         s` s!   |  ] } | d  k	 r | Vq d  S(   N(   R>   (   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>Y  s    R   (,   R   R\   R   R   RK   R   Ry   R-  R  Ru   R   R   R^   R  R  R4  R}   Rx   R~   R5  R   R   R   R   R   R   R[  R@  R   RZ  Rb  R}  t   SequenceR8   R   Rm   RB  R   Rl   RF  RG  Rj   RD  R   (%   R`   R+   RD   R   R   R   R   RM  R   t   dest_shapest   dest_stridest	   dest_dataR0  t   index_shapeRo  Rp  Rn  t   shape_errort   uR   R   t	   src_startt   src_endt
   dest_lowert
   dest_uppert
   dest_startt   dest_endRr  Rs  Rw  t   len_implt   seq_lent   dest_indicesRA  Re  Ri   R|  (    (   R+   R`   Rz  R  Rq  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR     sz    	
									
c         C` s   | j  d } | j  d } | d } | d } g  t | |  D]' \ } }	 |  j | |	 | t j  ^ q> } t j | | | d j  }
 t j d t j d t	 |   } t
 j | j | |  } | |
 f } | | f S(   Ni    i   R^   R   (   R   R~   Rl   R   Rm   R   RP   R'   t   UniTupleR}   R   R   R   (   R`   R+   RD   R   R   t   dimtysR   RR   R   Ri   RK   t   shapetyt   new_sigt   new_args(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   vararg_to_tupleq  s    

:!s   array.transposec         C` s   t  |  | | j d | d  S(   Ni    (   t   array_TR   (   R`   R+   RD   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_transpose  s    c         C` s   t  |   t  t |    k r- t d   n  t  |  } x; |  D]3 } | | k sd t |  | k r@ t d   q@ q@ W| |  | (| |  | (d  S(   Ns   repeated axis in transposes2   axis is out of bounds for array of given dimension(   R}   R   R   t   abs(   t   axisRK   R   R	  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   permute_arrays  s    c         C` s  | j  d } t |  |  | | d  } | j  d | d } } | j | j } }	 |  j t j  }
 t j j	 |
 |  } | | j
 | j g } g  | D] } t j | |  ^ q } x- t | |  D] \ } } | j | |  q Wt j d |	 d d d d  } |  j t j |  j |
   } g  | D] } t |  |  |  ^ q(} xl t | |  D][ \ } } t | d | j | |
 j    d |  j t j |  g d	 | g d
 | d d  qYW|  j | t t j t j | | |  g  | D] } | j   ^ q t | j  |  |  } t | d | j d | j | d  d	 | j | d  d
 | j  d | j! d | j" | j   } t# |  | | j |  S(   Ni    i   R^   RV   RG  Rc  Ry   RK   R   R   R   i   R   ($   R   R\   R   R^   R   R   Rm   R   t   TypeR   RK   R   R   R?   R~   R   Rv   R   R_   R   Rt  t
   as_pointerR>   t   compile_internalR  R   R   t   voidR   R   Ry   R,   R   R   R   R   (   R`   R+   RD   R   R   R   t   axistyR  t   num_axisR^   R
  t   ll_ary_sizet   arysRM  t   ll_arysRz  t   dstt	   np_ary_tyt   np_itemsizet   np_aryst   np_aryt   ll_aryt   at   retR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_transpose_tuple  sF    %(		 				
c         C` s.   t  |  | | |  \ } } t |  | | |  S(   N(   R  R  (   R`   R+   RD   R   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_transpose_vararg  s    c         C` sO   t  |  t j  r$ t j d   n  | d  k r? d  d  } n d  d  } | S(   Ns#   np.transpose does not accept tuplesc         S` s
   |  j    S(   N(   t	   transpose(   R  t   axes(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_transpose_impl  s    c         S` s   |  j  |  S(   N(   R  (   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (   Ru   R   R   R   t   UnsupportedErrorR>   (   R  R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_transpose  s    t   Tc   	      C` s  | j  d k r | } n t |  |  | |  } t |  |  |  } t j | | j | j   } t j | | j | j   } t | d | j d t j | | d  d  d   d t j | | d  d  d   d | j	 d | j
 d | j | j   } t |  | | |  S(	   Ni   Ry   RK   iR   R   R   R   (   RV   R\   R   R   RK   R   R   Ry   RP   R   R   R   R   R   (	   R`   R+   t   typR   R   R   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    					
c      
   C` s?  |  j  t j  } | j   } |  j  t j  }	 t j j |	 | | | | | | | |	 g  }
 | j j	 |
 d d } | | j
  } t j | | j d  d d  } t j | | j d  d d  } | |  } t j | | d d  } t j | | d d  } |	 d  } | j | | | | | | | | j | g  } | S(   s  
    Call into Numba_attempt_nocopy_reshape() for the given array type
    and instance, and the specified new shape.

    Return value is non-zero if successful, and the array pointed to
    by *newstrides* will be filled up with the computed results.
    t   namet   numba_attempt_nocopy_reshapeRK   i    R   (   R   R   Rm   R  t   intcR   R  t   functionR(   t   get_or_insert_functionRV   R   RN   RM   t   callR   (   R`   R+   R   R   t   newndt   newshapet
   newstridesR
  t   ll_intp_start   ll_intct   fntyt   fnt   ndRK   R   t
   is_f_orderR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _attempt_nocopy_reshape  s(    				!!	c   	      C` s   d } d } xC t  |  D]5 \ } } | d k  rD | d 7} | } q | | 9} q W| d k r| |  | k r t d   q nu | d k r | d k r d } |  d k } n |  | } |  | d k } | s t d   n  | | | <n t d   d  S(   Ni    i   s)   total size of new array must be unchangeds   multiple negative shape values(   t	   enumerateR   (	   t   origsizeRK   t   num_neg_valuet
   known_sizeR   t   st   neg_axt   inferredt   ok(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   normalize_reshape_value  s(    
	
s   array.reshapec         C` s  | j  d } | j } | j  d } | d } |  j t j  } t j j | | j  }	 t	 |  |  | | d  }
 t
 j | |	  } | j | |  t j d | j d d d d  } t	 |  |  |  } |  j t j |  j |   } t | d | j | | j    d |  j t j | j  g d	 | g d
 | d d  |
 j } |  j | t t j t j t j |  | | j   g  | j } t
 j | |	  } t |  | | |
 | | |  } | j d | | j d   } | j  |  $ d } |  j! j" | t# | f  Wd  QXt	 |  |  |  } t | d |
 j$ d | j% |  d	 | j% |  d
 |
 j& d |
 j' d |
 j( | j   } t) |  | | j |  S(   Ni    i   R^   RV   RG  Rc  Ry   RK   R   R   R   s   ==s   incompatible shape for arrayR   (*   R   R   R   R   Rm   R   R  R   R   R\   R   R?   R   Rv   R^   R   R_   R   Rt  R  R>   R   R  R  R   R   R  Ro   R   R  R6  R'   R   R   R   R9   Ry   R,   R   R   R   R   (   R`   R+   RD   R   R   t   rettyR  RK   R
  t   ll_shapeR   R  t   shape_ary_tyt	   shape_aryt   shape_itemsizeRr   R  R  R  t   failR   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_reshape8  sT    	
!								
c         C` s.   t  |  | | |  \ } } t |  | | |  S(   N(   R  R  (   R`   R+   RD   R   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_reshape_varargy  s    c         C` s   d   } | S(   Nc         S` s   |  j  |  S(   N(   t   reshape(   R  RK   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_reshape_impl  s    (    (   R  RK   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   np_reshape  s    	s   array.ravelc         C` sk   d   } d   } | j  d j d k r1 | } n | } |  j | | | |  } t |  | | j |  } | S(   Nc         S` s   |  j  |  j  S(   s   No copy version(   R  Rr   (   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   imp_nocopy  s    c         S` s
   |  j    S(   s   Copy version(   t   flatten(   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   imp_copy  s    i    Rc  (   R   RG  R  R   R   (   R`   R+   RD   R   R  R  t   impR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_ravel  s    			c         C` s   d   } |  j  | | | |  S(   Nc         S` s
   |  j    S(   N(   t   ravel(   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_ravel_impl  s    (   R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_ravel  s    	s   array.flattenc         C` s=   d   } |  j  | | | |  } t |  | | j |  } | S(   Nc         S` s   |  j    j |  j  S(   N(   R  R  Rr   (   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (   R  R   R   (   R`   R+   RD   R   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_flatten  s    	c         ` s  | j  | j  k s t  | j | j k s0 t  t | j  } t d    t d   t d   t j       f d   } |  j t j t |  |   } |  j t j t |  |   } |  j t j | j   }	 t	 j
 | | j d  d d  }
 t	 j
 | | j d  d d  } t j d t j d	 d
 d d  } |  j |  } t	 j | |  j t j | j   g  } |  j |  j t j   } |  j t j |  } t	 j | | g  } | |  |  } t | d |
 d | d | d | d d | |  |  } t | d | d | d | d | d d | j   } | j   } |	 | | | | |  j t j |  g } t t j t j | | t j t j t j  } |  j | | | |  } t | |  t |  | | j |  } | S(   s  
    Attempt to fix up *ary* for switching from *oldty* to *newty*.

    See Numpy's array_descr_set()
    (np/core/src/multiarray/getset.c).
    Attempt to fix the array's shape and strides for a new dtype.
    False is returned on failure, True on success.
    R  Rc  t   Fc   	      ` s(  |   k rM | d | k r+    } qM | d | k rM    } qM n  | | k ru |   k sq |  d k ru t  S|  k r |  d } n d } | | k  r | | d k r t  S| | } | | c | 9<| | | <nI | | k r$| | | } | | d k r	t  S| | | | <| | | <n  t S(   Nii    i   (   R   RA   (	   R  RR   R   t   old_itemsizet   new_itemsizeRG  RS   t   newdimt
   bytelength(   t
   any_layoutt   c_layoutt   f_layoutt   int8(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s.    $
RK   i    R   R^   RV   i   RG  Ry   R   R   N(   RV   Rx   RG  t   ordR   R  R   Rm   Rb   R   RN   RM   Rv   R\   RP   R_   R]   R   R>   R   R   t   booleanR  R   R   R   (   R`   R+   t   oldtyt   newtyR   t
   new_layoutR  R   R  R  t
   shape_datat   strides_datat   shape_strides_array_typet   aryclst   shape_constantt   sizeof_intpt   strides_constantR  t   strides_aryRK   R   R   RD   R   (    (   R  R  R  R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _change_dtype  sl    		0	!				c         C` s+   t  |   s t j d   n  d   } | S(   Ns+   The argument to np.shape must be array-likec         S` s   t  j |   j S(   N(   t   npt   asarrayRK   (   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   impl3  s    (   R   R   t   TypingError(   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_shape.  s    	c         C` s   d   } | S(   Nc         S` so   t  j |  j    } t | d   } g  t | d  D]" \ } } | | | k r6 | ^ q6 } t  j | |  S(   Ni   (   R  t   sortR  R   R  R   (   R  t   bt   headRS   R  t   tail(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_unique_impl<  s    9(    (   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   np_unique:  s    	c         C` s   d   } t  |  t j t j t j t j t j f  r t  | t j  rL t St  | t j t j f  r t  | j	 t j  r | Sn  t
 j d   n  d  S(   Nc   	      S` s  t  j | d t  j } | j d d k r< t |  | d  St  j | d k   r` t d   n  t  j |   } | j   } | j d } | j | j k r t d   n  t  j t  j	 |  d | j
 } d } x; t |  D]- } | | | | | | | +| | | 7} q W| S(   NR^   i    i   s#   negative dimensions are not alloweds(   operands could not be broadcast together(   R  R  t   int64RK   t   np_repeat_impl_repeats_scalerR   R   R  t   emptyR1  R^   R%   (	   R  t   repeatst   repeats_arrayt   asat   aravelt   nt	   to_returnt   posRS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt!   np_repeat_impl_repeats_array_likeI  s"    !sI   The repeats argument must be an integer or an array-like of integer dtype(   Ru   R   Rv   t   ListR   t   NumberR.  Rw   R"  R^   R   R  (   R  R$  R+  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   np_repeatD  s    	c         C` s   | d k  r t  d   n  t j |   } | j   } | j d } | d k re t j d d | j S| d k r~ t j |  St j | | d | j } x1 t |  D]# } | | | | | | d | +q W| Sd  S(   Ni    s#   negative dimensions are not allowedR^   i   (	   R   R  R  R  RK   R#  R^   R  R%   (   R  R$  R&  R'  R(  R)  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR"  q  s    !t   repeatc         C` s   d   } | S(   Nc         S` s   t  j |  |  S(   N(   R  R/  (   R  R/  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_repeat_impl  s    (    (   R  R$  R0  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_repeat  s    	s
   array.viewc         C` sU  | j  d } | j } t |  |  | | d  } t |  |  |  } t | j j  } xc t |  D]U }	 t | |	  }
 |	 d k r | j j	 } | j
 |
 |  | _ qf t | |	 |
  qf Wt |  | | | |  } | j d | t j j | j	 d   } | j |  $ d } |  j j | t | f  Wd  QX| j   } t |  | | j |  S(   Ni    Ry   s   ==s"   new type not compatible with array(   R   R   R\   R   R   R   t   sortedt   getattrRy   R'   Rt  R   R  R6  R   R   R&   R   R   R   R   R   R   (   R`   R+   RD   R   R   R  R   R  t   fieldsR   Ri   Rm  R  R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_view  s$    	'R^   c         C` s   |  j    } t |  | | |  S(   N(   R   R   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_dtype  s    RK   c         C` s:   t  |  } | |  | |  } | j } t |  | | |  S(   N(   R\   RK   R   (   R`   R+   R  R   Rf   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_shape  s    	R   c         C` s:   t  |  } | |  | |  } | j } t |  | | |  S(   N(   R\   R   R   (   R`   R+   R  R   Rf   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_strides  s    	RV   c         C` s+   |  j  t j | j  } t |  | | |  S(   N(   R   R   Rm   RV   R   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_ndim  s    Rr   c         C` s:   t  |  } | |  | |  } | j } t |  | | |  S(   N(   R\   R   R   (   R`   R+   R  R   Rf   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_size  s    	R   c         C` s:   t  |  } | |  | |  } | j } t |  | | |  S(   N(   R\   R   R   (   R`   R+   R  R   Rf   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_itemsize  s    	t   nbytesc         C` sI   t  |  } | |  | |  } | j | j | j  } t |  | | |  S(   s"   
    nbytes = size * itemsize
    (   R\   R   R   R   R   (   R`   R+   R  R   Rf   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_nbytes  s    t
   contiguousc         C` s+   |  j  t j | j  } t |  | | |  S(   N(   R   R   R	  t	   is_contigR   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_contiguous  s    t   c_contiguousc         C` s+   |  j  t j | j  } t |  | | |  S(   N(   R   R   R	  t   is_c_contigR   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_c_contiguous  s    t   f_contiguousc         C` s+   |  j  t j | j  } t |  | | |  S(   N(   R   R   R	  t   is_f_contigR   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_f_contiguous  s    t   readonlyc         C` s,   |  j  t j | j  } t |  | | |  S(   N(   R   R   R	  t   mutableR   (   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_readonly  s    t   ctypesc   	      C` sv   t  |  } | |  | |  } t j |  } |  j | |  } | j | _ | j | _ | j   } t |  | | |  S(   N(   R\   R   t   ArrayCTypesR   Ry   R   R   R   (	   R`   R+   R  R   Rf   R   t   actt   ctinfoR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_ctypes  s    Ry   c         C` sR   |  j  | | d | } | j } | j | |  j t j   } t |  | | |  S(   NR   (   R   Ry   RW  R   R   Rm   R   (   R`   R+   R  R   RM  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_ctypes_data  s    	c         C` sO   |  j  | | d | } | j } | j | |  j |   } t |  | | |  S(   NR   (   R   Ry   Rt  R   R   (   R`   R+   t   fromtyt   totyRi   RM  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_ctypes_to_pointer  s    	c   
      C` s   t  |  | | d | } t j t j | j  } | j | j | j   } t t j	 | | t j  } | j
 | j | j t j |  g } | j | |  | |  }	 |	 S(   s)  Helper to invoke the contiguous checker function on an array

    Args
    ----
    checker :
        ``numba.numpy_supports.is_contiguous``, or
        ``numba.numpy_supports.is_fortran``.
    context : target context
    builder : llvm ir builder
    aryty : numba type
    ary : llvm value
    R   (   R\   R   R  Rm   RV   R_   R   R^   R   t   bool_RK   R   R   R  (
   t   checkerR`   R+   R   R   t   tup_intpR   t	   check_sigt
   check_argsR?  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _call_contiguous_check  s    	R   c         C` sC   |  j  | t j |   } | | _ | j   } t |  | | |  S(   N(   R   R   t
   ArrayFlagsR   R   R   (   R`   R+   R  R   t   flagsobjR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_flags8  s    	c         C` s   | j  j d k rK |  j | | d | } t t |  | | j  | j  } n' | j  j d k } |  j t j |  } t	 |  | | |  S(   NRc  R   (
   RI   RG  R   RX  R   R   R   R   R	  R   (   R`   R+   R  R   RZ  R   Ri   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_flags_c_contiguous@  s    c         C` s   | j  j d k rK |  j | | d | } t t |  | | j  | j  } nK | j  j } | j  j d k ru | d k n	 | d k } |  j t j	 |  } t
 |  | | |  S(   NR  R   i   RQ  (   RI   RG  R   RX  R   R   RV   R   R   R	  R   (   R`   R+   R  R   RZ  R   RG  Ri   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_flags_f_contiguousN  s    *t   realc         C` sl   | j  t j k r+ t |  | | | d d S| j  t j k rP t |  | | |  St d j t j     d  S(   Nt   attrR^  s   unsupported .real for {}(	   R^   R   t   complex_domaint   array_complex_attrt   number_domainR   R9   R   R'   (   R`   R+   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_real_part_  s
    t   imagc         C` s   | j  t j k r+ t |  | | | d d S| j  t j k rn t | j d t  |  } t |  | | | g  St	 d j
 t j     d  S(   NR_  Rd  RG  s   unsupported .imag for {}(   R^   R   R`  Ra  Rb  R   R  RA   t   numpy_zeros_like_ndR9   R   R'   (   R`   R+   R  R   RD   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_imag_partj  s    t   conjt	   conjugatec         C` s   d   } | S(   Nc         S` s   t  j |   S(   N(   R  Rg  (   RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  y  s    (    (   RS  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_conjv  s    	c         C` sU  | d k s | j  t j k r6 t d j |    n  t |  } | |  | |  } | j  j } |  j |  j |   } | j	 j
 |  }	 |  j |  j   }
 | j | j |
  } | d k r | j | t j d  d  g  } n  | j d | d d  } t |  |  |  } t d	 | d
 |	  } t j | | |  t |  | | | j    S(   s  
    Given a complex array, it's memory layout is:

        R C R C R C
        ^   ^   ^

    (`R` indicates a float for the real part;
     `C` indicates a float for the imaginery part;
     the `^` indicates the start of each element)

    To get the real part, we can simply change the dtype and itemsize to that
    of the underlying float type.  The new layout is:

        R x R x R x
        ^   ^   ^

    (`x` indicates unused)

    A load operation will use the dtype to determine the number of bytes to
    load.

    To get the imaginary part, we shift the pointer by 1 float offset and
    change the dtype and itemsize.  The new layout is:

        x C x C x C
          ^   ^   ^
    R^  Rd  s   cannot get attribute `{}`i    i   R^   RG  R  Ry   R   (   R^  Rd  (   R^   R   R`  R9   R   R\   t   underlying_floatR_   R]   R   R'   R   R  Rt  Ry   RH  R   t   IntTypeR  R   R   R  R   R   (   R`   R+   R  R   R_  Rf   R   t   fltyt   sizeof_fltyR   t
   llfltptrtyR   t   resulttyR   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRa  ~  s     'c         C` s
   |  j    S(   N(   R   (   R`   R+   t   dtypetyt   dtypeval(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   dtype_type  s    R'   t   kindc         C` s\  t  |  } | |  | |  } | j } t | t j  sR t d | | f   n  | j |  } | j |  }	 | j d | d d  }
 t  |
  } | |  |  } |  j	 t j
 |	  } t j | | j | d | j j } |  j |  j |   } t | d | d | j d | j d	 |  j	 t j
 |  d
 | j d | j | j   } t |  | |
 |  S(   sq   
    Generic getattr() implementation for record arrays: fetch the given
    record member, i.e. a subarray.
    s   attribute %r of %s not definedR^   RG  R  R   Ry   RK   R   R   R   R   (   R\   R^   Ru   R   t   RecordR9   t   typeoft   offsetR  R   Rm   R   t   pointer_addRy   R'   R_   R]   R   RK   R   R   R   R   R   (   R`   R+   R  R   R_  Rf   R   t   rectypeR^   Rv  t   restyt   rarytyt   raryt   constoffsett
   newdataptrt   datasizeR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_record_getattr  s.    					
t   static_getitemc         C` sC   | d } t  | t  s" t  n  t |  | | j d | d |  S(   Ni   i    (   Ru   t   strR9   R  R   (   R`   R+   RD   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_record_getitem  s    
	c         C` s  |  j  | |  | j |  } | j |  } t | t j  rRt |  } | |  |  } | j }	 g  | j D] }
 |  j	 t j
 |
  ^ qn } g  | j D] }
 |  j	 t j
 |
  ^ q } t j | | | |  j |	   } t | d | d t j | |  d t j | |  d |  j	 t j
 | j  d d d d | j   } t |  | | |  St j | | | |  j |   } | j rd n d } |  j | | | |  } t |  | | |  Sd S(	   si   
    Generic getattr() implementation for records: fetch the given
    record member, i.e. a scalar.
    Ry   RK   R   R   R   R   i   N(   t   sentry_record_alignmentRv  Ru  Ru   R   t   NestedArrayR\   R^   RK   R   Rm   R   R   t   get_record_memberR]   R   RP   Rr   R>   R   R   Rd   Re   (   R`   R+   R  R   R_  Rv  t   elemtyR   R   R^   R  R  R  t   newdataR   t   dptrRc   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   record_getattr  s8    	((c         C` s   | j  \ } } | \ } } |  j | |  | j |  }	 | j |  }
 t j | | |	 |  j |
   } |  j | | | |
  } | j r d n d } |  j
 | |
 | | d | d S(   sg   
    Generic setattr() implementation for records: set the given
    record member, i.e. a scalar.
    i   Rc   N(   R   R  Rv  Ru  R   R  R]   Rl   Rd   R>   Rh   (   R`   R+   RD   R   R_  R  R   t   targetRi   Rv  R  R  Rc   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   record_setattr	  s    c         C` sB   |  j  | j d | d  } | |  | | j d | d | d  S(   s3   
    Record.__getitem__ redirects to getattr()
    i    i   (   t   get_getattrR   (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   record_getitem0	  s    t   static_setitemc         C` sm   | j  \ } } } | \ } } }	 t | j | |  }
 |  j | |
  } | d k	 sZ t  | | | |	 f  S(   s3   
    Record.__setitem__ redirects to setattr()
    N(   R   R   R   t   get_setattrR>   Rx   (   R`   R+   RD   R   t   rectyRM  R   t   recRq   Ri   t   getattr_sigR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   record_setitem9	  s    c         C` s   |  j  | | |  S(   sB   
    Create a constant array (mechanism is target-dependent).
    (   t   make_constant_array(   R`   R+   R   t   pyval(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   constant_arrayJ	  s    c         C` sF   t  j t  j d  | j  } | t | j     } t j | |  S(   sG   
    Create a record constant as a stack-allocated array of bytes.
    i   (   R   t	   ArrayTypeRk  R<  t	   bytearrayt   tostringR   R   (   R`   R+   R   R  t   ltyRi   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   constant_recordR	  s    c         C` sA   | j  \ } } | | k r" t j Sd   } |  j | | | |  S(   Nc         S` s:   |  j  | j  k o9 |  j | j k o9 |  j j | j j k S(   N(   RK   R   RJ  Ry   (   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_is_imple	  s    (   R   R   R4  R  (   R`   R+   RD   R   t   atyt   btyR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_is_	  s
    	c         C` s   t  |  d  S(   sq   
    Return the Structure representation of the given *flatiterty* (an
    instance of types.NumpyFlatType).
    t   flat(   t   _make_flattening_iter_cls(   t
   flatiterty(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_flat_clsp	  s    c         C` s   t  |  d  S(   sv   
    Return the Structure representation of the given *nditerty* (an
    instance of types.NumpyNdEnumerateType).
    t   ndenumerate(   R  (   t   nditerty(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_ndenumerate_clsx	  s    c         C` sj  |  j  t j d  } | j d  }	 | d  k	 rF | j t j |  n  x t t	 |   D] }
 t j
 | | |
  } t j | | j |   } | |
 } | j d | |  } t j | |  ; | j | |  | d  k	 r | |
  n  | j |	  Wd  QX| j | |  | d  k	 rY | |
  qY qY W| d  k	 rL| j t j |  n  | j |	  | j |	  d  S(   Ni    t   end_incrementR3  (   R   R   Rm   R  R>   R   R   t
   false_byteRC  R%   RN   R   R,   R   t	   if_likelyR  t	   true_byteR  (   R`   R+   RV   RK   R   t   end_flagt   loop_continuet
   loop_breakR   t   bbendR	  t   idxptrRq   R   t	   in_bounds(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _increment_indices	  s*    
c         C` s;   t  j | | j | j  } t |  | | j | | |  d  S(   N(   R   R   RK   RV   R  (   R`   R+   RR  RS  R   R  RK   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _increment_indices_array	  s    c         ` s   j    j  t  j    j r0  n d 	 d t f d     Y} d | f d     Y  d | f  f d     Y d | f d	     Y d
 | f d     Y d | f d     Y d t j   f           	 f
 d     Y} | S(   sq   
    Return the Structure representation of the given *nditerty* (an
    instance of types.NumpyNdIterType).
    i   t   BaseSubIterc           B` sM   e  Z d  Z d   Z d   Z e j d    Z d   Z d   Z	 d   Z
 RS(   sF   
        Base class for sub-iterators of a nditer() instance.
        c         S` s5   | |  _  | |  _ | |  _ | |  _ | | |  _ d  S(   N(   t   nditert   member_namet	   start_dimt   end_dimRV   (   RB   R  R  R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s
    				c         S` s   t  |  j |  j |  d  S(   N(   R   R  R  (   RB   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   set_member_ptr	  s    c         S` s   t  |  j |  j  S(   N(   R3  R  R  (   RB   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   member_ptr	  s    c         S` s   d  S(   N(    (   RB   R`   R+   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   init_specific	  s    c         S` s   d  S(   N(    (   RB   R`   R+   t   logical_dim(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    c         S` s   d  S(   N(    (   RB   R`   R+   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    (   RW   RX   R  R  R  R   t   cached_propertyR  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s   				t   FlatSubIterc           B` s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s   
        Sub-iterator walking a contiguous array in physical order, with
        support for broadcasting (the index is reset on the outer dimension).
        c         S` s2   | j  t j d  } |  j t j | |   d  S(   Ni    (   R   R   Rm   R  R   R   (   RB   R`   R+   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    c         S` s(   | j  |  j  } | j | j | g  S(   N(   R,   R  RH  Ry   (   RB   R`   R+   R   RR  RS  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   compute_pointer	  s    c         S` sQ   | |  j  d k rM | j |  j  } t j | |  } | j | |  j  n  d  S(   Ni   (   RV   R,   R  R   R   R   (   RB   R`   R+   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    c         S` s   | d k r7 | j  t j d  } | j | |  j  nM | |  j d k r | j |  j  } t j | |  } | j | |  j  n  d  S(   Ni    i   (	   R   R   Rm   R   R  RV   R,   R   R   (   RB   R`   R+   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    (   RW   RX   R  R  R  R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s
   			t   TrivialFlatSubIterc           ` s&   e  Z d  Z   f d   Z d   Z RS(   sx   
        Sub-iterator walking a contiguous array in physical order,
        *without* support for broadcasting.
        c         ` s     j  s t  d  S(   N(   t   need_shaped_indexingRx   (   RB   R`   R+   (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    c         S` s7   t  |  d k s$ t t  |    | j | j |  S(   Ni   (   R}   Rx   RH  Ry   (   RB   R`   R+   R   RR  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    $(   RW   RX   R  R  R  (    (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s   t   IndexedSubIterc           B` s   e  Z d  Z d   Z RS(   sA   
        Sub-iterator walking an array in logical order.
        c         S` s7   t  |  |  j k s t  t j | | | | d t S(   NR   (   R}   RV   Rx   R   R   R   (   RB   R`   R+   R   RR  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s    (   RW   RX   R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  	  s   t   ZeroDimSubIterc           B` s   e  Z d  Z d   Z RS(   s5   
        Sub-iterator "walking" a 0-d array.
        c         S` s   | j  S(   N(   Ry   (   RB   R`   R+   R   RR  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    (   RW   RX   R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s   t   ScalarSubIterc           B` s   e  Z d  Z d   Z RS(   s8   
        Sub-iterator "walking" a scalar value.
        c         S` s   | S(   N(    (   RB   R`   R+   R   RR  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    (   RW   RX   R  R  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s   t   NdIterc           ` s   e  Z d  Z e j        f d    Z    	 f d   Z  f d   Z d   Z d   Z	    	 f d   Z
 d   Z d   Z RS(	   s   
        .nditer() implementation.

        Note: 'F' layout means the shape is iterated in reverse logical order,
        so indices and shapes arrays have to be reversed as well.
        c         ` s   g  } i  j  r   n  d 6 d 6 d 6 d 6} x_ t  j  D]N \ } } | \ } } } } d | }	 | | }
 | j |
 |  |	 | |   qG W| S(   NR  t   indexedt   0dt   scalars   index%d(   R  R  R/  RO   (   RB   t   lt	   factoriesRS   R7  Rs  R  R  RM  R  t   factory(   R  R  R  R  R  R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   subiters
  s    


 c      	   ` s?  | j  t j d  } | j | t j |  |  |  _ x_ t |  D]Q \ } } t | t j  sC d | } t	 j
 | | |  }	 t |  | |	  qC qC W|  j | | | |  } t j t j   }
 d } d } x t |  D]K \ } } t | t j  r | j  k r | | j } | | j } Pq q W d k s?t  | j | |
 d
  } | j  t j d  } d   } x t | |  D]p \ } } t | t j  r| j d k r| j | | t t j t j t j | j  |
  | j | f  qqWt	 j | |  }   d k r*| d d d  } n  | j d | |  } | j | t	 j t	 j  }  j so| f } n  t |   k st  t	 j | | j d	  } x9 t    D]+ } t	 j! | | |  } | j" | |  qW| |  _# t	 j$ | | | j  |  _ t	 j
 | |  |  _% x! |  j& D] } | j' | |  q!Wd S(   sY   
            Initialize the nditer() instance for the specific array inputs.
            i    s   scalar%di   c         S` sX   t  |   } xE t |  D]7 } |  | | t  |  | | k r t d   q q Wd  S(   Ns2   nditer(): operands could not be broadcast together(   R}   R%   R   (   RK   t
   main_shapeR(  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   check_shapeN
  s    "R  Nis   ==Rr   (    ((   R   R   Rm   t
   make_tuplet   Tuplet   arraysR  Ru   Rv   R   R   R   t   _arrays_or_scalarsR  R>   RV   RK   R   Rx   R~   R  R   t   noneR   R   R*  R  R  R  R}   R?   R'   R%   RN   R   R   RP   t	   exhaustedR  R  (   RB   R`   R+   t   arrtysR  R   RS   R   R  t   slott   main_shape_tyR  t   main_nitemsRR  R  RS  R   t   shape_is_emptyR  R   R	  R  t   subiter(   RG  RV   R  t   nshapes(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  +
  s\    
!	!			c         ` s  | j  d  } t j | | j |  j   } t j | |   | j t  | j |  Wd QX  j	 } t j
 | |  j	  } |  j | | | |  } |  j } | j t  |  j | | | | |  }	 g  |	 D] }
 |
 j   ^ q }	 t |	  d k r| j |	 d  n | j | j |   j |	   t j
 | |  j  } t | | t |  | | |  j t j |  j | |  t j |  j | |   | j |  | j |  d S(   sJ   
            Compute next iteration of the nditer() instance.
            RY  Ni   i    (   R  R   t   as_bool_bitR,   R  t   if_unlikelyR   R   R  R  R   R  R   RA   t   _make_viewsR   R}   R   R  t
   yield_typeRK   R  R~  t   partialt   _loop_continuet   _loop_breakR  (   RB   R`   R+   R   R  R  R  R  R   t   viewsR   RK   (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_specificy
  s.    		
	c         S` sW   xP |  j  D]E } | j | k o- | j k  n r
 | j | | | | j  q
 q
 Wd  S(   N(   R  R  R  R  (   RB   R`   R+   R	  R7  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    "c         S` sW   xP |  j  D]E } | j | k o- | j k  n r
 | j | | | | j  q
 q
 Wd  S(   N(   R  R  R  R  (   RB   R`   R+   R	  R7  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    "c      
   ` sh  d g  }  j } |  j }  j }	 t |	 t j  rI t |	  }	 n	 |	 g }	 g  t   D]$ }
 | j	 t
 j | | |
   ^ q_ } x t | |  D] \ } } | \ } } } } | | j | j !}   d k r | d d d  } n  xU | D]M }
 | |
 d k st  |  j | | | |	 |
 | |
 | |
 |  | |
 <q Wq Wt d   | D  sdt  | S(   s:   
            Compute the views to be yielded.
            R  Nic         s` s   |  ] } | Vq d  S(   N(    (   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>
  s    (   R>   R/  R  R  Ru   R   R   R   R%   R,   R   RN   R~   R  R  Rx   t
   _make_viewt   all(   RB   R`   R+   R   R  R  R  R/  R  t   rettysRS   R7  R  RM  t   array_indicest   sub_indices(   RG  t   narraysR  R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s*    				4#c         S` s   t  | t j  r! | j d k s' t  | j | | | | |  } | j |  | |  }	 t | |  }
 | j | t j	 t j
 d  d  } | j | t j	 t j
 d  d  } t |	 | | | |
 d d |	 S(   sD   
            Compute a 0d view for a given input array.
            i    R   (    (    N(   Ru   R   Rv   RV   Rx   R  R\   Rb   R  R  Rm   R   R>   (   RB   R`   R+   R   R  RR  RS  R  RQ   t   viewR   RK   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    '$$c   	      S` s   g  } x} t  t | |   D]f \ } \ } } t | t j  rh | j | j |  | | d |  q | j t |  d |   q W| S(   NR   s   scalar%d(   R  R~   Ru   R   Rv   RO   R\   R3  (	   RB   R`   R+   R  R  R  RS   RR  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    (((   RW   RX   R  R   R  R  R  R  R  R  R  R  R  (    (
   R  R  R  R  R  RG  R  RV   R  R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s   'N%			(   RV   RG  R}   R  R  t   objectR   R[   (   R  R  R  (    (
   R  R  R  R  R  RG  R  RV   R  R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_nditer_cls	  s    		 
@c         ` s2   |  j    d t j |   f   f d     Y} | S(   sr   
    Return the Structure representation of the given *nditerty* (an
    instance of types.NumpyNdIndexType).
    t   NdIndexIterc           ` s,   e  Z d  Z   f d   Z   f d   Z RS(   s,   
        .ndindex() implementation.
        c         ` s  | j  t j d  } t j | | j d | j  t j    } t j | t j  } x t    D]y } t j	 | | |  } | j
 | |  | | }	 | j t j |	 |  }
 t j | |
   | j
 t j |  Wd  QXqa W| |  _ | |  _ t j | | | j  |  _ d  S(   Ni    Rr   (   R   R   Rm   R   R?   R'   R   R  R%   RN   R   R   R   t   ICMP_EQR  R  R   R  RP   RK   (   RB   R`   R+   R   R   R   R  R	  R  R#  t   dim_is_empty(   RV   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s    
		c         ` sN  | j  t j d  } | j d  } t j | | j |  j   } t j | |   | j	 t
  | j |  Wd  QXg  t    D]' } | j t j | |  j |   ^ q } x | D] }	 t | |	  q W| j t j | | | j   | j	 t  t j | |  j    }
 t | |   |
 |  j |  j  | j |  | j |  d  S(   Ni    RY  (   R   R   Rm   R  R   R  R,   R  R  R   R   R  R%   RN   R   R3   R   RP   R'   RA   R   RK   R  R  (   RB   R`   R+   R   R   R  R  R	  R   R,   RK   (   RV   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s"    7(   RW   RX   R  R  R  (    (   RV   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  
  s   (   RV   R   R[   (   R  R  (    (   RV   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_ndindex_cls
  s    	%4c         ` s     d k s t   |  j } | j d k rS d t j |   f   f d     Y} | Sd t j |   f   f d     Y} | Sd  S(	   NR  R  Rc  t   CContiguousFlatIterc           ` s>   e  Z d  Z   f d   Z   f d   Z d   Z d   Z RS(   sZ   
            .flat() / .ndenumerate() implementation for C-contiguous arrays.
            c   	      ` s   | j  t j d  } t j | |  |  _ | j |  _   d k r t j | | j	 d | j  t j | j
  } x< t | j
  D]+ } t j | | |  } | j | |  q W| |  _ n  d  S(   Ni    R  Rr   (   R   R   Rm   R   R   R   R   R:  R?   R'   RV   R%   RN   R   R   (	   RB   R`   R+   RR  RS  R   R   R	  R  (   Rs  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  ,  s    c         ` s[  | j  } | j } | j |  j  } | j t j | |  }	 | j |	  t j	 | |	   | j
 | j | g  }
 t | | | |
  }   d k r | j |  n |  j } g  t |  D]$ } | j t j | | |   ^ q } t j | |  } | j t j | | | g   t | | | | |  t j | |  } | j | |  j  Wd  QXd  S(   NR  (   RV   R   R,   R   R   R   R   R   R   R  RH  Ry   Rg   R   R   R%   RN   RP   t   make_anonymous_structR  R   R   (   RB   R`   R+   RR  RS  R   RV   R   R   R   RQ   R   R   R	  t   idxvalst   idxtuple(   Rs  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  E  s&    			4c         S` s+   | j  | j | g  } t | | | |  S(   N(   RH  Ry   Rg   (   RB   R`   R+   RR  RS  R   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  _  s    c         S` s2   | j  | j | g  } t | | | | |  d  S(   N(   RH  Ry   Rj   (   RB   R`   R+   RR  RS  R   R   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   setitemc  s    (   RW   RX   R  R  R  R  R  (    (   Rs  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  '  s
   	t   FlatIterc           ` sA   e  Z d  Z d   Z   f d   Z d   Z d   Z d   Z RS(   s   
            Generic .flat() / .ndenumerate() implementation for
            non-contiguous arrays.
            It keeps track of pointers along each dimension in order to
            minimize computations.
            c         S` s|  | j  t j d  } | j } | j } t j | | j |  } t j | | j	 d | j  t j | j  }	 t j | | j	 d | j  t j | j  }
 t j
 | t j  } x t |  D] } t j | |	 |  } t j | |
 |  } | j | |  | j | |  | | } | j t j | |  } t j | |   | j t j |  Wd  QXq W|	 |  _ |
 |  _ | |  _ d  S(   Ni    Rr   (   R   R   Rm   Ry   RV   R   R   RK   R?   R'   R   R  R%   RN   R   R   R   R  R  R  R   t   pointersR  (   RB   R`   R+   RR  RS  R   Ry   RV   R   R   R  R  R	  R  t   ptrptrR#  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  r  s.    		
		c         ` s  | j  } t j | | j |  } t j | | j |  } |  j }	 |  j }
 | j t j	 d  } | j
 d  } t j | | j |  j   } t j | |   | j t  | j |  Wd  QX| j t  t j | |
 | d  } | j |  } t | | | |  }   d k r&| j |  nh g  t |  D]$ } | j t j | |	 |   ^ q3} t j | |  } | j t j | | | g   xHt t |   D]4} t j | |	 |  } t j | | j |   } | | } | | } | j t j | |  } t j | |   | j | |  t j | |
 |  } | j |  } t j  | | |  } | j | |  x@ t | d |  D]+ } t j | |
 |  } | j | |  qW| j |  Wd  QX| j | |  qW| j t j! |  j  | j |  | j" |  d  S(   Ni    RY  i   R  (#   RV   R   R   RK   R   R   R  R   R   Rm   R  R  R,   R  R  R   R   R  RA   RN   Rg   R   R%   RP   R  RC  R   R   R   R   R  R   Rw  R  R  (   RB   R`   R+   RR  RS  R   RV   R   R   R   R  R   R  t   is_exhaustedt   last_ptrRQ   R   R	  R  R  R  Rq   R   R:  R  R  t	   inner_dim(   Rs  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    sX    			4	

c         S` s   | j  } t j | | j d | } t j | | j d | } g  }	 xM t t |   D]9 }
 |	 j | j | | |
   | j	 | | |
  } qX W|	 j
   t j | | j | | | j |	  } | S(   NR   (   RV   R   R   RK   R   RC  R%   RO   t   uremt   udivt   reverseRF  Ry   RG  (   RB   R`   R+   RR  RS  R   RV   R   R   R   R	  RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _ptr_for_index  s    	
c         S` s.   |  j  | | | | |  } t | | | |  S(   N(   R  Rg   (   RB   R`   R+   RR  RS  R   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         S` s5   |  j  | | | | |  } t | | | | |  d  S(   N(   R  Rj   (   RB   R`   R+   RR  RS  R   R   RQ   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (   RW   RX   R  R  R  R  R  R  (    (   Rs  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  j  s   	 @		(   R  R  (   Rx   RI   RG  R   R[   (   R  Rs  RI   R  R  (    (   Rs  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  !  s    	%@%R  c         C` s   t  t j |   } | |  |  } | | _ |  j |  } | |  | d | j d  } | j |  | | |  | j   } t |  | t j |  |  S(   NRC   R   (	   R  R   t   NumpyFlatTypeR   R\   RM   R  R   R   (   R`   R+   RR  RS  t   flatiterclst   flatitert   arrclsR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_flatiter  s    	c         C` s   | j  \ } | \ } t |  } | |  | d | } | j } |  j |  }	 |	 |  | d | j }
 | j |  | | |
 |  d  S(   NR   (   R   R  RI   R\   R   R  (   R`   R+   RD   R   R   R  R  R  RR  R  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_flatiter  s    		c         C` s   | j  d } | \ } } t |  } | |  | d | } | j } |  j |  }	 |	 |  | d | j }
 | j |  | | |
 |  } t |  | | j |  S(   Ni    R   (   R   R  RI   R\   R   R  R   R   (   R`   R+   RD   R   R  R  R   R  RR  R  RS  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_getitem  s    	c         C` s   | j  d } | \ } } } t |  } | |  | d | } | j }	 |  j |	  }
 |
 |  | d | j } | j |  | |	 | | |  |  j   S(   Ni    R   (   R   R  RI   R\   R   R  R   (   R`   R+   RD   R   R  R  R   R   R  RR  R  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_getitem_any  s    	c   	      C` sc   | j  d } t |  } | |  | d | d } |  j | j  } | |  | d | j } | j S(   Ni    R   (   R   R  R\   RI   R   R   (	   R`   R+   RD   R   R  R  R  R  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_getitem_flat.  s    c   
      C` s   | j  \ } | \ } t t j |   } | |  |  } | | _ |  j |  } | |  | d | j d  } | j |  | | |  | j   }	 t	 |  | | j
 |	  S(   NRC   R   (   R   R  R   t   NumpyNdEnumerateTypeR   R\   RM   R  R   R   R   (
   R`   R+   RD   R   RR  RS  t	   nditerclsR  R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_ndenumerate9  s    		c         C` s   | j  \ } | \ } t |  } | |  | d | } | j } |  j |  }	 |	 |  | d | j }
 | j |  | | |
 |  d  S(   NR   (   R   R  RI   R\   R   R  (   R`   R+   RD   R   R   R  R  R
  RR  R  RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_nditerK  s    		c   
      C` s   g  t  | j |  D]' \ } } |  j | | | t j  ^ q } t t j t |    } | |  |  } | j |  | |  | j	   }	 t
 |  | | j |	  S(   s   ndindex(*shape)(   R~   R   Rl   R   Rm   R  t   NumpyNdIndexTypeR}   R  R   R   R   (
   R`   R+   RD   R   t   argtyt   argRK   R
  R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_ndindex[  s    =c         C` s   | j  j } | d k rx | j d j } | d } t j | | |  } g  | D]! } |  j | | | t j  ^ qN } n g  } t	 t j
 t |    }	 |	 |  |  }
 |
 j |  | |  |
 j   } t |  | | j  |  S(   s   ndindex(shape)i    (   R   RV   R   R^   R   R   Rl   R   Rm   R  R  R}   R  R   R   (   R`   R+   RD   R   RV   Rp   R   RK   Rq   R
  R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_ndindex_tuplej  s    
.c         C` sM   | j  \ } | \ } t |  } | |  | d | } | j |  | |  d  S(   NR   (   R   R  R  (   R`   R+   RD   R   R   R  R  R
  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_ndindex  s
    	c   	      C` s   | j  } | j } t | j d t j  rD t j | | d  } n | d g } t |  |  |  } | j	 |  | | |  | j
   } t |  | | |  S(   s   
    nditer(...)
    i    (   R   R  Ru   R   R   R   R   R   R  R  R   R   (	   R`   R+   RD   R   R  R  R  R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   make_array_nditer  s    		c         C` sG   | j  \ } | \ } t |  |  | d | } | j |  | |  d  S(   NR   (   R   R  R  (   R`   R+   RD   R   R   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   iternext_numpy_nditer2  s    	c         C` sH  t  |  } | |  |  } |  j | j  } |  j t j t |  |   } |  j t j d  } x  | D] }	 | j | |	  } qg W| j d k r d }
 n | j	 d k r | g }
 x5 t
 | d  D]# } |
 j | j |
 d |   q Wt t
 |
   }
 nq | j	 d k rY| g }
 x/ | d  D]# } |
 j | j |
 d |   q#Wt |
  }
 n t d j | j	    | j | |  } |  j | j  } |  j j | d | d | } |  j j | |  } |  j t j  } t j | | d	 | } t j | |
 d	 | } t | d
 | j | | j    d | d | d | d | | S(   s	  Utility function used for allocating a new array during LLVM code
    generation (lowering).  Given a target context, builder, array
    type, and a tuple or list of lowered dimension sizes, returns a
    LLVM value pointing at a Numba runtime allocated array.
    i   i    Rc  iR  s3   Don't know how to allocate array with layout '{0}'.Rr   Rc   R   Ry   RK   R   R   R   (    (   R\   R]   R^   R   R   Rm   Rb   R   RV   RG  RC  RO   R   R9   R   t   get_preferred_array_alignmentR   t   meminfo_alloc_alignedt   meminfo_dataR   R   RP   R   Rt  R  (   R`   R+   R  R   R  R   t   datatypeR   t   arrlenR  R   t   dimension_sizeR{  Rc   R   Ry   R   t   shape_arrayt   strides_array(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRE    sJ    		!	!		c         C` s/   t  j | | j | j | j | j  d  d S(   s<   
    Zero-fill an array.  The array must be contiguous.
    i    N(   R   t   memsetRy   R   R   R   (   R`   R+   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _zero_fill_array  s    c   	   	   C` s   t  | t j  r9 d } |  j | | | t j  g } n9 t  | t j  sQ t  | j } t j	 | | d | } |  j
 | t j d  } x\ t |  D]N } | j d | | |  } t j | |   |  j j | t d  Wd QXq W| S(   s;   
    Parse the shape argument to an array constructor.
    i   R   i    R3  s   negative dimensions not allowedN(   s   negative dimensions not allowed(   Ru   R   Rw   Rl   Rm   R   Rx   R   R   R   t   get_constant_genericR%   R   R  R   R   R   (	   R`   R+   R   Ri   RV   R   R   R	  t   is_neg(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _parse_shape  s    !	c         C` s9   | j  d } | d } | j } | t |  | | |  f S(   sL   
    Parse the arguments of a np.empty(), np.zeros() or np.ones() call.
    i    (   R   R   R!  (   R`   R+   RD   R   t   arrshapetypet   arrshapeR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _parse_empty_args  s    
	c         C` sz   | j  d } t | t j  ri t |  |  | d | d } t j | | j d | j } | j	 | f S| j	 d f Sd S(   s_   
    Parse the arguments of a np.empty_like(), np.zeros_like() or
    np.ones_like() call.
    i    R   R   N(    (
   R   Ru   R   Rv   R\   R   R   RK   RV   R   (   R`   R+   RD   R   t   arytypeR   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _parse_empty_like_args  s    c         C` sL   t  |  | | |  \ } } t |  | | |  } t |  | | j | j    S(   N(   R$  RE  R   R   R   (   R`   R+   RD   R   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_empty_nd  s    c         C` sL   t  |  | | |  \ } } t |  | | |  } t |  | | j | j    S(   N(   R&  RE  R   R   R   (   R`   R+   RD   R   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_empty_like_nd"  s    c         C` s\   t  |  | | |  \ } } t |  | | |  } t |  | |  t |  | | j | j    S(   N(   R$  RE  R  R   R   R   (   R`   R+   RD   R   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_zeros_nd*  s    c         C` s\   t  |  | | |  \ } } t |  | | |  } t |  | |  t |  | | j | j    S(   N(   R&  RE  R  R   R   R   (   R`   R+   RD   R   R  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRe  3  s    i   c         C` sO   t  d k  r d   } n	 d   } |  j | | | |  } t |  | | j |  S(   Ni   i   c         S` sL   t  j |   } t  j | j  } x$ t  j | j  D] } | | | <q4 W| S(   N(   R  R#  t   float64R^  t   ndindexRK   (   RK   R   RS  Ri   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   fullA  s
    c         S` sC   t  j |  t |   } x$ t  j | j  D] } | | | <q+ W| S(   N(   R  R#  R'   R+  RK   (   RK   R   RS  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR,  H  s    (   i   i   (   t   numpy_versionR  R   R   (   R`   R+   RD   R   R,  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_full_nd=  s
    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s=   t  j |  |  } x$ t  j | j  D] } | | | <q% W| S(   N(   R  R#  R+  RK   (   RK   R   R^   RS  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR,  T  s    (   R  R   R   (   R`   R+   RD   R   R,  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_full_dtype_ndQ  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s:   t  j |   }  x$ t  j |  j  D] } | |  | <q" W|  S(   N(   R  t
   empty_likeR+  RK   (   RS  R   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   full_like`  s    (   R  R   R   (   R`   R+   RD   R   R1  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_full_like_nd]  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s=   t  j |  |  }  x$ t  j |  j  D] } | |  | <q% W|  S(   N(   R  R0  R+  RK   (   RS  R   R^   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR1  l  s    (   R  R   R   (   R`   R+   RD   R   R1  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_full_like_nd_type_speci  s    	c      	   C` sP   d   } | j  j } |  j | | | | d i | d 6} t |  | | j  |  S(   Nc         S` s:   t  j |   } x$ t  j | j  D] } d | | <q" W| S(   Ni   (   R  R#  R+  RK   (   RK   RS  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   onesy  s    t   localsR  (   R   R^   R  R   (   R`   R+   RD   R   R4  R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_ones_ndv  s
    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s=   t  j |  |  } x$ t  j | j  D] } d | | <q% W| S(   Ni   (   R  R#  R+  RK   (   RK   R^   RS  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR4    s    (   R  R   R   (   R`   R+   RD   R   R4  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_ones_dtype_nd  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s:   t  j |   }  x$ t  j |  j  D] } d |  | <q" W|  S(   Ni   (   R  R0  R+  RK   (   RS  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   ones_like  s    (   R  R   R   (   R`   R+   RD   R   R8  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_ones_like_nd  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s=   t  j |  |  }  x$ t  j |  j  D] } d |  | <q% W|  S(   Ni   (   R  R0  R+  RK   (   RS  R^   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR8    s    (   R  R   R   (   R`   R+   RD   R   R8  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_ones_like_dtype_nd  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s@   t  j |  |  f  } x$ t |   D] } d | | | f <q" W| S(   Ni   (   R  t   zerosR%   (   R(  RS  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   identity  s    (   R  R   R   (   R`   R+   RD   R   R<  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_identity  s    	c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` sC   t  j |  |  f |  } x$ t |   D] } d | | | f <q% W| S(   Ni   (   R  R;  R%   (   R(  R^   RS  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR<    s    (   R  R   R   (   R`   R+   RD   R   R<  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_identity_type_spec  s    	c         C` s   d  S(   N(    (   t   Nt   M(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _eye_none_handler  s    c         C` s+   t  | t j  r d   } n	 d   } | S(   Nc         S` s   |  S(   N(    (   R?  R@  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         S` s   | S(   N(    (   R?  R@  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (   Ru   R   t   NoneType(   R?  R@  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _eye_none_handler_impl  s    	c         ` s   | d  k s t | t j  r0 t j t    nE t | t j t j f  rf t	 t
 | d |     n t j |    d  d t   f d  } | S(   NR^   i    c         ` s   t  |  |  } t j |  | f    } | d k rt t |  | |  } xi t |  D] } d | | | | f <qS Wn> t |  | |  } x( t |  D] } d | | | | f <q W| S(   Ni    i   (   RA  R  R;  t   minR%   (   R?  R@  R   R^   t   _MRS  t   dRS   (   t   dt(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    (   R>   Ru   R   RB  R  R^   t   floatt	   DTypeSpecR-  R   R3  (   R?  R@  R   R^   R  (    (   RG  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   numpy_eye  s    c         C` s   d   } |  j  | | | |  S(   Nc         S` s   t  j |  d d S(   NR   i    (   R  t   diag(   Ri   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   diag_impl  s    (   R  (   R`   R+   RD   R   RL  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   numpy_diag  s    	c         C` s   | j  d } | j d k r+ d d  } n* | j d k rI d d  } n t d   |  j | | | |  } t |  | | j |  S(   Ni    i   c         S` s   |  j  } | d t |  } t j | | f |  j  } | d k rz xf t | |  D] } |  | | | | | f <qU Wn3 x0 t | |  D] } |  | | | | | f <q W| S(   Ni    (   RK   R  R  R;  R^   R%   (   RS  R   R  R(  R  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRL    s    	i   c         S` s   |  j  \ } } | d k  r( | | } n  | d k rA | | } n  t t | |  d  } t j | |  j  } | d k r x^ t |  D] } |  | | | f | | <q Wn/ x, t |  D] } |  | | | f | | <q W| S(   Ni    (   RK   t   maxRD  R  R#  R^   R%   (   RS  R   t   rowst   colsR(  R  RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRL    s    s   Input must be 1- or 2-d.(   R   RV   R   R  R   R   (   R`   R+   RD   R   R  RL  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_diag_kwarg  s    s
   array.takec         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` sI   | |  j  d k s# | |  j  k  r2 t d   n  |  j   t j |  S(   Ni   s   Index out of bounds(   Rr   t
   IndexErrorR  R  R&   (   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   take_impl$  s    #(   R  R   R   (   R`   R+   RD   R   RS  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_take_1   s    	c         ` sS   | j  d j d k     f d   } |  j | | | |  } t |  | | j |  S(   Ni   R  c         ` s   t  j | j d |  j }   r0 | j   } n | } t  j |  } d } |  j   } xX | D]P } | |  j d k s | |  j k  r t d   n  | | | | <| d } q^ W| j | j	  S(   NR^   i    i   s   Index out of bounds(
   R  R#  Rr   R^   R  R  R  RR  R  RK   (   R  R   R  t   walkert   itRS   R  R  (   t   F_order(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRS  3  s    #(   R   RG  R  R   R   (   R`   R+   RD   R   RS  R   (    (   RW  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_take_2-  s    c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s   t  j |  } t  j | j d |  j } t  j |  } d } |  j   } xX | D]P } | |  j d k s{ | |  j k  r t d   n  | | | | <| d } qR W| j | j	  S(   NR^   i    i   s   Index out of bounds(
   R  R   R#  Rr   R^   R  R  RR  R  RK   (   R  R   t   convertR  RV  RS   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRS  M  s    #(   R  R   R   (   R`   R+   RD   R   RS  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_take_3G  s    	c         ` sO   t  | j j      f d   } |  j | | | |  } t |  | | j |  S(   Nc         ` s   t  j d |  d    S(   Ni    i   (   R  t   arange(   R+  (   R^   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR[  b  s    (   R   R   R^   R  R   (   R`   R+   RD   R   R[  R   (    (   R^   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_arange_1^  s    c         ` sO   t  | j j      f d   } |  j | | | |  } t |  | | j |  S(   Nc         ` s   t  j |  | d    S(   Ni   (   R  R[  (   R   R+  (   R^   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR[  m  s    (   R   R   R^   R  R   (   R`   R+   RD   R   R[  R   (    (   R^   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_arange_2i  s    c         ` sO   t  | j j      f d   } |  j | | | |  } t |  | | j |  S(   Nc         ` s   t  j |  | |    S(   N(   R  R[  (   R   R+  R%  (   R^   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR[  y  s    (   R   R   R^   R  R   (   R`   R+   RD   R   R[  R   (    (   R^   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_arange_3t  s    c      	   C` sl   t  d   | j D  r% d   } n	 d   } |  j | | | | d i t j d 6} t |  | | j |  S(   Nc         s` s!   |  ] } t  | t j  Vq d  S(   N(   Ru   R   t   Complex(   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>  s    c         S` s   | |  | } t  j | j  } t  j | j  } t t | |  d  } t j | |  } |  }	 x( t |  D] }
 |	 | |
 <|	 | 7}	 qo W| S(   Ni    (	   t   matht   ceilR^  Rd  RN  RD  R  R#  R%   (   R   R+  R%  R^   t   nitems_ct   nitems_rt   nitems_iR   RS  Ri   RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR[    s    
c   	      S` sm   t  j | |  |  } t | d  } t j | |  } |  } x( t |  D] } | | | <| | 7} qK W| S(   Ni    (   R`  Ra  RN  R  R#  R%   (	   R   R+  R%  R^   Rc  R   RS  Ri   RS   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR[    s    
R5  R   (   R   R   R  R   Rm   R   R   (   R`   R+   RD   R   R[  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_arange_4  s    	
c         C` s7   d   } |  j  | | | |  } t |  | | j |  S(   Nc         S` s   t  j |  | d  S(   Ni2   (   R  t   linspace(   R   R+  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRf    s    (   R  R   R   (   R`   R+   RD   R   Rf  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_linspace_2  s    	c         ` sO   t  | j j      f d   } |  j | | | |  } t |  | | j |  S(   Nc         ` sd   t  j |    } | d } | |  } |  | d <x- t d |  D] } |  | | | | | <q@ W| S(   Ni   i    (   R  R#  R%   (   R   R+  t   numRS  t   divt   deltaRS   (   R^   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyRf    s    


(   R   R   R^   R  R   (   R`   R+   RD   R   Rf  R   (    (   R^   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   numpy_linspace_3  s    	c         C` s  | j  d } t |  |  | d | d } t j | | j  } | j } t |  | | |  } | j }	 | j }
 | j d k s t	  | j | j k r t j
 | |
 |	 | j | j d d n t j | | j  } t j | | j  } |  j t j  } t j | | |  b } t j | |	 | | | j |  } t j | |
 | | | j |  } | j | j |  |  Wd QXt |  | | j | j    S(   s   
    Array copy.
    i    R   RQ  Rc   i   N(   R   R\   R   R   RK   R   RE  Ry   RG  Rx   t
   raw_memcpyR   R   R   R   R   Rm   Ry  RF  R   R,   R   R   (   R`   R+   RD   R   R%  R   R   t   rettypeR  Rn  R  Rp  R  R   R   Rf  R|  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _array_copy  s.    			s
   array.copyc         C` s   t  |  | | |  S(   N(   Rn  (   R`   R+   RD   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_copy  s    c         C` s   t  |  | | |  S(   N(   Rn  (   R`   R+   RD   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   numpy_copy  s    c         C` sy  | j  } | j d } | j | k s1 t d   | j d k r| j d k sU t  t |  |  | d | d } t |  |  |  } |  j | t j t j	 d  d	  }	 |  j
 | t j t j	 d  | j f  }
 t | | j |	 |
 | j | j | j  t |  | | | j    S| j | j k sH| j d k r_| j d k r_t |  | | | d  S| j d k rb| d k st  | d k rt n t } t | |  | | | d  } | j |  g \ } } | ' t |  | | | d  } | j } Wd QX| # t |  | | |  } | j } Wd QXWd QX| j | j  } | j | |  | j | |  | St |  | | |  Sd S(
   sd   
    Common logic for layout conversion function;
    e.g. ascontiguousarray and asfortranarray
    i    s    return-type has incorrect layouti   R   RQ  R  Rc  N(   i   (   R   R   RG  Rx   RV   R\   R  R   R  Rm   R  R   R   Ry   R   R   R   R   R   R   RX  Rd  t   blockRn  t   phiR'   t   add_incoming(   R`   R+   RD   R   t   output_layoutR  R   R   R  RK   R   t
   check_funcR?  t   thent   orelset   out_thent   then_blkt
   out_orelset
   orelse_blkt   ret_phi(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _as_layout_array  sF    		c         C` s   t  |  | | | d d S(   NRt  R  (   R}  (   R`   R+   RD   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_asfortranarray(  s    c         C` s   t  |  | | | d d S(   NRt  Rc  (   R}  (   R`   R+   RD   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_ascontiguousarray-  s    s   array.astypec         C` sr  | j  d } t |  |  | d | d } t j | | j  } | j } t |  | | |  } | j }	 | j }
 t j | | j  } t j | | j  } |  j	 t
 j  } t j | | |   } t j | |	 | | | j |  } t j | |
 | | | j |  } t |  | | |  } |  j | | | j | j  } t |  | | | |  Wd  QXt |  | | j | j    S(   Ni    R   (   R   R\   R   R   RK   R   RE  Ry   R   R   R   Rm   Ry  RF  RG  Rg   Rl   R^   Rj   R   R   (   R`   R+   RD   R   R%  R   R   Rm  R  Rn  R  Rp  R  R   R   Rf  R|  t   item(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_astype2  s*    			c         C` s  | j  d } | j } t |  |  | d | d } t |  } | |  |  } | j }	 t |  |  }
 t j j | j j	 |
  } | j
 | j | j  } | j | |  } t j | |  } | j | d t $ d } |  j j | t | f  Wd  QXt j | | j | |  g  } t j | | g  } | j | j |  j |	 j d    } t | d | d | d | d | d	 | j d
 | j | j   } t |  | | j |  S(   Ni    R   R   s.   buffer size must be a multiple of element sizeRy   RK   R   R   R   R   (   R   R   R\   R   Rb   R   R   R&   R   R'   R   R   t   sremR   t   is_not_nullR   R   R   R   R   RP   t   sdivRt  Ry   R   R   R   R   R   R   R   (   R`   R+   RD   R   t   buftyR   t   buft
   out_ary_tyt   out_aryt   out_datamodelR   t   ll_itemsizeR<  t   remt   is_incompatibleR   RK   R   Ry   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_frombufferP  s6    		!		
c         C` s  | j  d  \ } } | d  \ } } | j } | j d k sA t  t |  |  |  }	 t |  |  }
 t j |
  } t | t	 j
  r t j | |  } n | f } | f } g  t | |  D]' \ } } |  j | | | t	 j  ^ q } | } g  } | j d k r8xp | D]% } | j |  | j | |  } qWn@ x3 t |  D]% } | j |  | j | |  } qEW| j   | j | |  j | j  j    } t |	 d | d | d | d | d d	 |	 j   } t |  | | j |  S(
   sR   
    numba.numpy_support.carray(...) and
    numba.numpy_support.farray(...).
    i   RQ  R  Ry   RK   R   R   R   N(   R   R   RG  Rx   R\   Rb   R   R   Ru   R   R   R   R~   Rl   Rm   RO   R   RC  R  Rt  R]   R^   R  R   R>   R   R   (   R`   R+   RD   R   Rm  R  RQ   RK   R   R  R   R  R   RP  R   t   offR   R  Ry   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   np_cfarrayw  sB    				:
		c         C` s{   t  | t j  r+ |  j t j t |   St  | t j  rk |  j t t t j |   } | | | f  Sd sw t	  d  S(   Ni    (
   Ru   R   R   R   Rm   R}   R  R8   R   Rx   (   R`   R+   t   seqtyt   seqR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _get_seq_size  s    c         ` sF   | j     j t j t  | t j        f d   } | S(   sK   
    Return a getitem() implementation that doesn't incref its result.
    c         ` s5    |  |  }   j  r1   j j |   |  n  | S(   N(   R   R   t   decref(   R+   R   R  (   R`   R  R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   wrap  s    	(   R^   R8   R  R  R   R   Rm   (   R`   R  R  (    (   R`   R  R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _get_borrowing_getitem  s
    	c         ` s    j  t j  } t j | d       f d   } g  } | | } }	 xT t |  D]F }
 |
 d k r | | |	  \ } }	 n  | j t    | |	   qY Wt |  S(   sF   
    Compute the likely shape of a nested sequence (possibly 0d).
    i    c         ` st   t  |  t j  rE t |   d k r( d S|  d   j | d  f Sn+ t  |   } |  j |   |  f  f Sd  S(   Ni    (   NN(   Ru   R   R   R}   R>   R   R  R^   (   R  R  R  (   R+   R`   R   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_first_item  s    (	   R   R   Rm   R   R&   R%   RO   R  R   (   R`   R+   RV   R  R  R   R  R   t   innertyt   innerRS   (    (   R+   R`   R   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   compute_sequence_shape  s     c         ` s>     f d          f d     | | |  d S(   s?   
    Check the nested sequence matches the given *shapes*.
    c           ` s    j  j   t d  d  S(   Ns   incompatible sequence shape(   s   incompatible sequence shape(   R   R   R   (    (   R+   R`   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _fail  s    c      
   ` so  t  |  d k r d  St   |  |  } | d }  j d | |  }  j | d t      Wd  QXt  |  d k r d  St |  t j  r t  |   } t	 j
  |  < } |  j } |  | | j f  }	  | |	 | d  Wd  QXnt t |  t j  rYx_ t t  |    D]6 }
 |  |
 }  j | |
  }	  | |	 | d  qWn d skt |    d  S(   Ni    s   !=R   i   (   R}   R  R   R   R   Ru   R   R  R  R   R  R^   R   R   R%   R   Rx   (   R  R  R   Rr   t   expectedR  R  R  R  R  RS   (   R  R+   t   check_seq_sizeR`   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s*    
	
N(    (   R`   R+   R  R  R   (    (   R  R+   R  R`   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   check_sequence_shape  s    c         ` sM          f d        f d     | |  d  d S(   sl   
    Assign a nested sequence contents to an array.  The shape must match
    the sequence's structure.
    c      	   ` s\   t  j       j |  d t }  j  | |   j  } t     | |  d  S(   NR   (   R   RF  RG  R   Rl   R^   Rj   (   R   R   Ri   RQ   (   RR  R+   R`   Ry   R   R   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   assign_item  s    c      
   ` sj  t  |  d k rH t |  t j t j f  s4 t   | |  |  d  S| d } t |  t j  r t  |   } t j  |  I } |  j	 } |  | | j
 f  }   | | | d | | j
 f  Wd  QXn t |  t j  rTx~ t t  |    D]U }	 |  |	 }  j | |	  }  j t j |	  }
   | | | d | |
 f  q Wn d sft |    d  S(   Ni    i   (   R}   Ru   R   R  R   Rx   R  R   R  R^   R   R%   R   R   Rm   (   R  R  R   R   Rr   R  R  R  R  RS   R   (   t   assignR  R+   R`   (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s$    "
	*
%N(    (    (   R`   R+   Ry   R   R   RR  R  R  (    (   RR  R  R  R+   R`   Ry   R   R   s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   assign_sequence_to_array  s    c   
   	   C` s   | j  } | j } | j d } | d } t |  | | | |  } t |  | k sY t  t |  | | | |  t |  | | |  }	 t |  | |	 j	 | |	 j
 | | |  t |  | | j  |	 j    S(   Ni    (   R   RV   R   R  R}   Rx   R  RE  R  Ry   R   R   R   (
   R`   R+   RD   R   RR  RV   R  R  R   RS  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_array:  s    		
c   
      C` s   | j  d  } | j  |  } | j d | |  } | j | | j | |  |  } | j | j d | |  | j d | |   } | j | d t ( d | }	 |  j j | t	 |	 f  Wd  QX| S(   Ni    R3  s   >=R   s   %s(): axis out of bounds(
   R'   R   R*  R  R5  R   R   R   R   RR  (
   R`   R+   t	   func_nameRV   R  R   t   ll_ndimt   is_neg_axist   axis_out_of_boundsR   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _normalize_axisM  s    !
c         C` s  t  |  | d k s t  t j t j |  } t j | |  } t j d  } x t | d  D]w } t j |  }	 | j d |	 |  }
 | | } | j	 |
 | j
 |	 |  |	  } | j | t j | | d |   qc W| j | t j | | d |   t j | | j |   S(   s   
    Compute shape with the new axis inserted
    e.g. given original shape (2, 3, 4) and axis=2,
    the returned new shape is (2, 3, 1, 4).
    i   s   >=i    (   R}   Rx   R   R  R   R   R?   R%   R   R*  R  R   RN   R   R,   (   R`   R+   t
   orig_shapeRV   R  t   ll_shtyR   R9  R	  t   ll_dimt
   after_axisR   Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _insert_axis_in_shape`  s    
		&"c         C` s"  t  |  | d k s t  t j t j |  } t j | |  } t j d  } t j d  } x t | d  D]q }	 t j |	  }
 | j d |
 |  } | j	 | | j
 |
 |  |
  } | j | |	 t j | | d |   qr W| j | t j | | d |   t j | | j |   S(   sD   
    Same as _insert_axis_in_shape(), but with a strides array.
    i   i    s   >=(   R}   Rx   R   R  R   R   R?   R%   R   R*  R  R   RN   R   R,   (   R`   R+   t   orig_stridesRV   R  R  R   R9  R   R	  R  R  Rq   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _insert_axis_in_strides}  s    		"c         C` s   | j  } | j } | j d } t |  |  | d | d } t |  |  |  }	 t j | | j  }
 t j | | j  } t |  | |
 | |  } t	 |  | | | |  } t
 |	 d | j d | d | d | j d | j d | j |	 j   S(	   s/   
    np.expand_dims() with the given axis.
    i    R   Ry   RK   R   R   R   R   (   R   RV   R   R\   R   R   RK   R   R  R  R   Ry   R   R   R   R   (   R`   R+   RD   R   R  R  RV   RR  RS  R  R   R   t
   new_shapest   new_strides(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   expand_dims  s"    						
c         C` sr   |  j  | | d | j d t j  } t |  | d | j j |  } t |  | | | |  } t |  | | j |  S(   Ni   s   np.expand_dims(	   Rl   R   R   Rm   R  R   RV   R  R   (   R`   R+   RD   R   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_expand_dims  s
    &c         C` s   | j  } | } t | j t j  r6 t | j  } n | j g } t |  t |  k s` t  g  t | | |  D]' \ } }	 }
 | |  | | |	 |
  ^ qs } t | j t j  r |  j	 | | j |  } n
 | d } t
 |  | | j |  S(   Ni    (   R   Ru   R   R   R   R   R}   Rx   R~   R  R   (   R`   R+   RD   R   t	   transformR  t   arrsR  RS  RR  R  t   retsR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _atleast_nd  s    	=
c         ` s.    t     k s t     f d   } | S(   s`   
    Return a callback successively inserting 1-sized dimensions at the
    following axes.
    c   	      ` s   x t    D]{ } | d } | j | k  r t j   |  } | j d | j d  } t |  | t j | |  | f |  } | } q q W| S(   Ni   RV   (   R%   RV   R   R   R  R  R   R   (	   R`   R+   RS  RR  R  RS   RV   R  t   newarrty(   R  t   min_ndim(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    
		(   R}   Rx   (   R  R  R  (    (   R  R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _atleast_nd_transform  s    c         C` s(   t  d d g  } t |  | | | |  S(   Ni   i    (   R  R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_atleast_1d  s    c         C` s+   t  d d d g  } t |  | | | |  S(   Ni   i    (   R  R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_atleast_2d  s    c         C` s.   t  d d d d g  } t |  | | | |  S(   Ni   i    i   (   R  R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_atleast_3d  s    c	         C` s=  t  |  t  |  k o: t  |  k o: t  |  k n sE t  t j d  }	 t |  | | |  }
 t j | |
 j  } g  } x | D] } |	 } xz t t | |   D]c \ } \ } } | j	 d | j
 |  |  } | j | |  } | j | | j | |  |  } q W| j |  q W|
 j } xt | | | | |  D] \ } } } } } | j } t j | | t j d | j } |  } t j | | | | | j |  } t |  | | |  } |  j | | | j | j  } t j | | | | | j |  } t |  | | | |  Wd QXt j | | |  } qGW|
 S(   s2   
    Concatenate arrays along the given axis.
    i    s   ==t   orderN(   R}   Rx   R   R   RE  R   R   R  R~   R   R'   R   R*  R  RO   Ry   Ry  RG  RF  Rg   Rl   R^   Rj   Rw  (   R`   R+   R  R  R  t
   arr_shapest   arr_stridesR  t
   ret_shapesR   R  t   ret_stridest   copy_offsetst   arr_shRv  R	  Rr   R:  t   is_axist   addendt   ret_dataRR  RS  t   arr_stt   arr_dataRy  R   Rf  Ri   R|  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _do_concatenate   s@    E(				c         C` s  | j  } g  t | |  D]' \ } } t |  |  | d | ^ q } t |  | d | |  } g  | D] }	 t j | |	 j  ^ qe }
 g  | D] }	 t j | |	 j  ^ q } g  |
 d D] } t j | |  ^ q } xMt	 |  D]?} | j
 d | j |  |  } | | } | j |  } g  |
 d D] } | | ^ q,} | j |   \ } } | 1 t j | j | | g  } | j | |  Wd  QX|  t j } x/ | D]' } | j | | j
 d | |   } qW| j | j |  d t " |  j j | t d | f  Wd  QXWd  QXWd  QXq Wg  | D] } | j |  ^ q.} t |  | | | | |
 | | | 	 } t |  | | | j    S(   NR   s   np.concatenatei    s   ==i   R   s<   np.concatenate(): input sizes over dimension %d do not match(   RV   R~   R\   R  R   R   RK   R   R   R%   R   R'   R,   Rd  R~  R  R  R   R  R\  R   R  R   R   R   R   R  R   R   (   R`   R+   R  R  R  R  RV   R  R  RS  R  R  R   R  R	  R  t   ret_shape_ptrt   ret_sht   other_shapest   on_axist   on_other_dimt   is_okR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _np_concatenate=  sB    	:((&
!			$"c      
   C` ss  | j  } t j d  } t j d  } t j t |   }	 g  t | |  D]' \ }
 } t |
  |  | d | ^ qL } t |  | d | |  } t j | | d j  } x | d D] } t j	 } x t t j | | j  |  D]h \ } } | j
 | | j d | |   } | j | j |  d t  |  j j | t d	  Wd  QXq Wq Wg  | D] } t j | | j  ^ qZ} t j t j |  } t j | |  } t j | |  } x t | d  D] } t j |  } | j d | |  } | | } | j | | j | |  |  } | j | t j | | d |   | j | t j | | d |   qW| j | t j | | d |   | j |	 t j | | d |   t j | | j |   g t |  } t j | | j |   } g  t t |   D] } t j | |  ^ q} x t | d  D] } t j |  } | j d | |  } | j | | j | |  |  } xH t t |   D]4 } | j | | | t j | | | d |   qWq+Wx@ t t |   D], } | j | t j | | | d |   qWg  | D]! } t j | | j |   ^ q} t |  | | | | | | | | 	 } t |  | | | j    S(
   Ni    i   R   s   np.stacks   ==R   s5   np.stack(): all input arrays must have the same shapes   >=(   s5   np.stack(): all input arrays must have the same shape(   RV   R   R   R}   R~   R\   R  R   RK   R  R\  R   R   R  R   R   R   R   R   R   R  R?   R%   R*  R  R   RN   R,   R  R   R   (   R`   R+   R  R  R  R  RV   R   R9  t
   ll_narraysR  R  R  RS  R  R   t   orig_shR  R  t   input_shapesR  R	  R  R  Rq   RS   t   input_stridesR   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   _np_stackn  sj    	:	!	(
		"&""(.		%*+c         C` sN   |  j  t j d  } t |  | t | j d  t j | | d  | j |  S(   Ni    (	   R   R   Rm   R  R   R   R   R   R   (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_concatenate  s    	c         C` s_   |  j  | | d | j d t j  } t |  | t | j d  t j | | d  | j |  S(   Ni   i    (	   Rl   R   R   Rm   R  R   R   R   R   (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_concatenate_axis  s    &	c         C` s   t  | j d  } t j | | d  } g  } g  } |  j t j d  } x t | |  D] \ }	 }
 |	 j d k r | j	 |	  | j	 |
  qZ |	 j d k s t
  |	 j d d  } t j | |	  } t |  | | |
 f |  } | j	 |  | j	 |  qZ Wt |  | | | | j |  S(   Ni    i   i   RV   (   R   R   R   R   R   R   Rm   R~   RV   RO   Rx   R  R   R   R  R  R   (   R`   R+   RD   R   t   orig_arrtyst	   orig_arrsR  R  R  RR  RS  R  t
   expand_sigt   newarr(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_column_stack  s"    c         C` s9   t  |  | t | j d  t j | | d  | j |  S(   s/   
    np.stack() with the given axis value.
    i    (   R  R   R   R   R   R   (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   _np_stack_common  s
    	i
   c         C` s+   |  j  t j d  } t |  | | | |  S(   Ni    (   R   R   Rm   R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_stack  s    c         C` s<   |  j  | | d | j d t j  } t |  | | | |  S(   Ni   (   Rl   R   R   Rm   R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_stack_axis  s    &c         ` s   | j  d } | d j } | d k rQ |  j t j d    t |  | | |    S| d k rc d n d     f d   } |  j | | | |  Sd  S(   Ni    i   c         ` s   t  j |  d   S(   NR  (   R  t   concatenate(   R  (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_hstack_impl  s    (   R   RV   R   R   Rm   R  R  (   R`   R+   RD   R   R   RV   R  (    (   R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   np_hstack  s    c         C` s   | j  d } | d j } | d k r2 d   } n@ | d k ri |  j t j d  } t |  | | | |  Sd   } |  j | | | |  S(   Ni    c         S` s   t  j t  j |   d  S(   Ni   (   R  R  t   hstack(   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_vstack_impl"  s    i   c         S` s   t  j |  d d S(   NR  i    (   R  R  (   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  +  s    (   R   RV   R   R   Rm   R  R  (   R`   R+   RD   R   R   RV   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   np_vstack  s    	c         C` sO  | j  d } | j } | d j } | d k rN d   } |  j | | | |  S| d k r |  j t j d  } | j d | j d  }	 t j	 |	 | j   }
 t
 |  | |
 | |  } |  j t j d  } t j	 | |	  } t |  | | | f |  S| d k r,|  j t j d  } t
 |  | | | |  Sd   } |  j | | | |  Sd  S(   Ni    c         S` s   t  j |   j d d d  S(   Ni   i(   R  R  R  (   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  8  s    i   RV   i   c         S` s   t  j |  d d S(   NR  i   (   R  R  (   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR  N  s    (   R   R   RV   R  R   R   Rm   R  R   R   R  R  (   R`   R+   RD   R   R   R  RV   R  R  t   stack_rettyt	   stack_sigt	   stack_retR  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   np_dstack1  s&    			t   fillc         C` s   d   } | S(   Nc         S` s   | |  (d  S(   N(   R>   (   RS  Ri   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   fill_implW  s    (    (   RS  Ri   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   arr_fillT  s    	t   dotc         C` s   d   } | S(   Nc         S` s   t  j |  |  S(   N(   R  R  (   RS  t   other(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   dot_impl`  s    (    (   RS  R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   array_dot^  s    	c         C` s   t  j |  p |  | k  S(   N(   R`  t   isnan(   R  R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt	   lt_floatsl  s    c         C` s   |  | | f } y t  | SWn t k
 r |  d k rg t j d | rL t n d d |  } | j } n< |  d k r t j d | r t n d d |  } | j	 } n  | t  | <| SXd S(   s6   
    Get a sort implementation of the given kind.
    R"   t   ltt
   is_argsortR#   N(
   t   _sortst   KeyErrorR"   t   make_jit_quicksortR  R>   t   run_quicksortR#   t   make_jit_mergesortt   run_mergesort(   Rs  t   is_floatR  t   keyR  t   func(    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_sort_funcp  s     				
s
   array.sortc         ` sV   | j  d } t d d d t | j t j       f d   } |  j | | | |  S(   Ni    Rs  R"   R  c         ` s     |   d  S(   N(    (   RS  (   t	   sort_func(    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_sort_impl  s    (   R   R  Ru   R^   R   t   FloatR  (   R`   R+   RD   R   R%  R  (    (   R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   array_sort  s
    c         C` s   d   } |  j  | | | |  S(   Nc         S` s   |  j    } | j   | S(   N(   R  R  (   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_sort_impl  s    
(   R  (   R`   R+   RD   R   R  (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   np_sort  s    	s   array.argsortc   	      ` s   | j  \ } } t d | j d t | j t j  d t      f d   } | j d | j  d   } | d  } |  j	 | | | |  S(   NRs  R  R  c         ` s
     |   S(   N(    (   RS  (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_argsort_impl  s    R   i   (
   R   R  t   literal_valueRu   R^   R   R   RA   t   replaceR  (	   R`   R+   RD   R   R%  Rs  R  t   innersigt	   innerargs(    (   R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_argsort  s    	
c         C` s+   | j  | j  k s' | j d k s' t  | S(   NR  (   RH  RG  Rx   (   R`   R+   RP  RQ  Ri   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   array_to_array  s    'c         C` s
   t   d S(   sR   
    An intrinsic returning a derived array with the given shape and strides.
    N(   R9   (   R  RK   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   reshape_unchecked  s    c         ` s   d       f d   } | S(   Nc         S` s&   t  |  t j  o% t d   |  D  S(   Nc         s` s!   |  ] } t  | t j  Vq d  S(   N(   Ru   R   Rw   (   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pys	   <genexpr>  s    (   Ru   R   R   R  (   RK   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         ` sl   t  |  t j  s d  S  |  s0   |  r4 d  St |  t |  k rP d  S|  j d t |  d d  S(   NRV   RG  R  (   Ru   R   Rv   R}   R  (   R  RK   R   (   R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   typer  s    (    (   R`   R  (    (   R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   type_reshape_unchecked  s    		c         C` s   | j  d } | j } t |  |  | | d  } t |  |  |  } t j | | d  } t j | | d  }	 t | d | j d | d |	 d | j d | j | j	   }
 t
 |  | | |
  S(	   Ni    i   i   Ry   RK   R   R   R   (   R   R   R\   R   R   R   Ry   R   R   R   R   (   R`   R+   RD   R   R   R  R   R   RK   R   R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   impl_shape_unchecked  s    				
c         ` s   | d  t j f k r' t d      n t d      | d  t j f k rZ t d   n t d     d  d     f d  } | S(   Nc         S` s   |  j  S(   N(   RK   (   R  RK   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    c         S` s   | S(   N(    (   R  RK   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyR    s    s*   as_strided() strides argument is mandatoryc         S` s   | S(   N(    (   R  R   (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   get_strides  s    c         ` s(   t  |    |  |   |  |   }  |  S(   N(   R  (   R  RK   R   (   R  R  (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   as_strided_impl  s    $(   R>   R   R  R   R9   (   R  RK   R   R  (    (   R  R  s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt
   as_strided  s    (G  R  t
   __future__R    R   R   R~  R`  R  t   llvmliteR   t   llvmlite.llvmpy.coret   llvmpyt   coreR   R   t   numpyR  t   numbaR   R   R   R   R	   R
   R   t   numba.numpy_supportR   R   R   R   R   R   R-  R   t   numba.targets.imputilsR   R   R   R   R   R   R   R   R   R   R   t   numba.typingR   t   numba.extendingR   R    R!   t    R"   R#   R$   R1   R3   R\   Rb   Rg   Rj   Rt   R|   R   R>   R   R   R   R   R   t   ArrayIteratort   BORROWEDR   R   R   R   R  Rw   R   R   R   R   R  t   AnyR   R}   R   Rv   R   R   R  R   R  R  R  R  R"  R-  R   RP  RV  RZ  R[  Rb  R}  R  R  R  R   R  R  R  R  t   VarArgR  R  R  R  R  R  R  R  R  R  R  R  R  R  R  RK   R  t   uniqueR   R/  R.  R"  R1  RI  R5  R6  t
   MemoryViewR7  R8  R9  R:  R;  R=  R@  RC  RF  RI  RN  RK  RO  t   CPointert   voidptrRR  RX  R[  RY  R\  R]  Rc  Rf  Ri  Ra  Rr  t   DTypeR  t   StringLiteralR  Rt  R  R  R  R  R  R  t   is_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  t   NumpyNdIterTypeR  RE  R  R!  R$  R&  R#  R'  R0  R(  R;  R)  t
   zeros_likeRe  R,  R.  R/  R1  R2  R3  R4  R6  R7  R8  R9  R:  R<  R=  R>  RA  RC  t   eyeRH  RJ  RK  RM  RQ  t   takeRT  RX  R,  RZ  R[  R-  R\  R]  R^  Re  Rf  Rg  Rk  Rn  Ro  R  Rp  R}  t   asfortranarrayR~  t   ascontiguousarrayR  R  t
   frombufferR  R  R  R  R  R  R  R   R  R  R  R  R  R  R  R  t
   atleast_1dR  t
   atleast_2dR  t
   atleast_3dR  R  R  R  R  R  R  t   column_stackR  R  t   stackR  R  R  R  t   vstackR  t   dstackR  R  R  R  R  R   R  R  R  R  t   argsortR	  R
  R  t   type_callableR  R  t   libt   stride_tricksR  (    (    (    s5   lib/python2.7/site-packages/numba/targets/arrayobj.pyt   <module>   s   4(L			;							8				;		'$*(!22:OEv	*$	)		
		=	%			x		!7*	#	!A*	~
-!	!		:	&!	)!	'$		 	 >	>	$*!	7			
	''''$*$-$$$	$*$'-$$
	%	=!'&05	
			)	)'				$
		'''	=	1	S
$
	'#
	'
	'