ó
\K]c           @  s£  d  d l  m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z
 d d l m Z e d d d g ƒ Z e j e j e j e
 j j e
 j j d	 d ƒe
 j j e
 j j d	 d ƒe j e
 j j e
 j j d	 d ƒe
 j j e
 j j d	 d ƒe j e j ƒ	 e j d
 ƒ Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d „ Z d d „ Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   print_functiont   division(   t
   namedtupleNi   (   t
   _helperlibt   Extentt   begint   endt   ndimt   attempt_nocopy_reshapet   Dimc           B  sb   e  Z d  Z d Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d d d d d d „ Z
 d „  Z RS(   sÃ   A single dimension of the array

    Attributes
    ----------
    start:
        start offset
    stop:
        stop offset
    size:
        number of items
    stride:
        item stride
    t   startt   stopt   sizet   stridet   singlec         C  sJ   | |  _  | |  _ | |  _ | |  _ | |  _ | sF | d k sF t ‚ d  S(   Ni   (   R
   R   R   R   R   t   AssertionError(   t   selfR
   R   R   R   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   __init__-   s    					c   	      C  s  t  | t ƒ r½ | j |  j ƒ \ } } } | |  j } |  j | t |  j ƒ } |  j | t |  j ƒ } | d k r€ d } n t | | | ƒ } t d | d | d | d | d t	 ƒ } | S|  | | d !} t d | j d | j
 d | j d | j d t ƒ Sd  S(   Ni    i   R
   R   R   R   R   (   t
   isinstancet   slicet   indicesR   R   R
   t   abst   _compute_sizeR	   t   FalseR   t   True(	   R   t   itemR
   R   t   stepR   R   t   rett   sliced(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   __getitem__5   s,    						c         C  s   |  j  | |  j S(   N(   R
   R   (   R   t   idx(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt
   get_offsetQ   s    c         C  s&   d } | |  j  |  j |  j |  j f S(   Ns*   Dim(start=%s, stop=%s, size=%s, stride=%s)(   R
   R   R   R   (   R   t   strfmt(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   __repr__T   s    c         C  s<   t  d |  j | d |  j | d |  j d |  j d |  j ƒ S(   NR
   R   R   R   R   (   R	   R
   R   R   R   R   (   R   t   base(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt	   normalizeX   s     c         C  sŽ   | d  k r |  j } n  | d  k r0 |  j } n  | d  k rH |  j } n  | d  k r` |  j } n  | d  k rx |  j } n  t | | | | | ƒ S(   N(   t   NoneR
   R   R   R   R   R	   (   R   R
   R   R   R   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   copy\   s    c         C  s   |  j  | k S(   N(   R   (   R   t   itemsize(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   is_contiguousi   s    (   R
   R   R   R   R   N(   t   __name__t
   __module__t   __doc__t	   __slots__R   R   R   R!   R#   R$   R%   R'   (    (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR	      s   					c         C  s   t  d „  t |  | ƒ Dƒ ƒ S(   Nc         s  s$   |  ] \ } } | j  | ƒ Vq d  S(   N(   R   (   t   .0t   it   d(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pys	   <genexpr>n   s    (   t   sumt   zip(   R   t   dims(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   compute_indexm   s    t   Elementc           B  s    e  Z e Z d  „  Z d „  Z RS(   c         C  s   | |  _  d  S(   N(   t   extent(   R   R4   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR   t   s    c         c  s   |  j  Vd  S(   N(   R4   (   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   iter_contiguous_extentw   s    (   R(   R)   R   t   is_arrayR   R5   (    (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR3   q   s   	t   Arrayc           B  s˜   e  Z d  Z e Z e d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e d „  ƒ Z e d „  ƒ Z d	 „  Z d
 „  Z d d „ Z d d „ Z RS(   sû  A dummy numpy array-like object.  Consider it an array without the
    actual data, but offset from the base data pointer.

    Attributes
    ----------
    dims: tuple of Dim
        describing each dimension of the array

    ndim: int
        number of dimension

    shape: tuple of int
        size of each dimension

    strides: tuple of int
        stride of each dimension

    itemsize: int
        itemsize

    extent: (start, end)
        start and end offset containing the memory region
    c   	      C  si   g  } xS t  | | ƒ D]B \ } } t | | | | | | d t ƒ} | j | ƒ d } q W|  | | ƒ S(   NR   i    (   R0   R	   R   t   append(	   t   clst   offsett   shapet   stridesR&   R1   t   ashapet   astridet   dim(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt	   from_desc•   s    	
c         C  s™   t  | ƒ |  _ t |  j ƒ |  _ t  d „  |  j Dƒ ƒ |  _ t  d „  |  j Dƒ ƒ |  _ | |  _ t j |  j ƒ |  _	 |  j
 ƒ  |  _ |  j ƒ  |  _ d  S(   Nc         s  s   |  ] } | j  Vq d  S(   N(   R   (   R,   R?   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pys	   <genexpr>¢   s    c         s  s   |  ] } | j  Vq d  S(   N(   R   (   R,   R?   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pys	   <genexpr>£   s    (   t   tupleR1   t   lenR   R;   R<   R&   t   npt   prodR   t   _compute_extentR4   t   _compute_layoutt   flags(   R   R1   R&   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR   Ÿ   s    	c         C  s¤   i  } |  j  s' t | d <t | d <| S|  j  d j |  j ƒ } |  j  d j |  j ƒ } d „  } | oz | t |  j  ƒ ƒ | d <| o™ | t |  j  ƒ ƒ | d <| S(   Nt   F_CONTIGUOUSt   C_CONTIGUOUSi    iÿÿÿÿc         S  sS   t  |  ƒ } x@ |  D]8 } | j d k rE | j | j | j k rE t S| } q Wt S(   Ni    (   t   nextR   R   R   R   (   t   traverset   lastR?   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt	   is_contigµ   s    (
(   R1   R   R'   R&   t   itert   reversed(   R   RG   t   leftmostt	   rightmostRM   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyRF   ©   s    	

	c         C  sw   d g |  j  } g  |  j D] } | d ^ q } t | |  j ƒ } t | |  j ƒ |  j } t | | ƒ } t | | ƒ S(   Ni    i   (   R   R;   R2   R1   R&   t   maxR   (   R   t   firstidxt   st   lastidxR
   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyRE   Á   s     c         C  s   d |  j  |  j f S(   Ns   <Array dims=%s itemsize=%s>(   R1   R&   (   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR!   É   s    c   
      C  s*  t  | t ƒ s | g } n t | ƒ } t | ƒ } t |  j ƒ } | | k rh t d | | f ƒ ‚ n  x, t | ƒ | k  r– | j t d  d  ƒ ƒ qk Wg  t	 |  j | ƒ D] \ } } | j
 | ƒ ^ qª } g  | D] } | j sÒ | j ^ qÒ } t | |  j ƒ }	 | r|	 j | Œ  d St |	 j ƒ Sd  S(   Ns   %d extra indices giveni    (   R   RA   t   listRB   R1   t
   IndexErrorR8   R   R$   R0   R   R   R   R7   R&   t   reshapeR3   R4   (
   R   R   t   nitemR   R?   t   itR1   R.   t   newshapet   arr(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR   Ì   s    4%c         C  s   |  j  d S(   NRI   (   RG   (   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   is_c_contigä   s    c         C  s   |  j  d S(   NRH   (   RG   (   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   is_f_contigè   s    c   	      c  sh  |  j  s |  j r |  j VnG|  j d j |  j d j k  rg |  j d } |  j d } |  j d } n' |  j d } |  j d  } |  j d  } | j |  j ƒ rg  | D] } t | ƒ ^ q§ } x¢ t	 j
 | Œ  D]. } t | | ƒ } | | j | | j f VqÏ Wn` g  |  j D] } t | ƒ ^ q} x; t	 j
 | Œ  D]* } t | |  j ƒ } | | |  j f Vq6Wd S(   s    Generates extents
        i    iÿÿÿÿi   N(   R]   R^   R4   R1   R   R;   R'   R&   t   ranget	   itertoolst   productR2   R
   R   (	   R   t   innerdimt	   outerdimst
   outershapeRT   t   oslenR   R"   R:   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR5   ì   s$      "c      
   O  s  |  j  } t | ƒ } | |  j k r. |  d  f S| j d d ƒ } | r_ t d | j ƒ  ƒ ‚ n  | d k rz t d ƒ ‚ n  t j	 | ƒ } | d k r­ |  j
 r¤ d n d } n  | |  j k rË t d ƒ ‚ n  |  j sÝ |  j
 r4| d k rt t |  | ƒ ƒ } qÜ| d k r%t t |  | ƒ ƒ } qÜt d	 ƒ ‚ n¨ t j | t j j ƒ } t j |  j d
 t j j ƒ} t j |  j d
 t j j ƒ}	 t j | d
 t j j ƒ} t | | |	 | | | |  j | d k ƒ sÜt d ƒ ‚ n  |  j |  j j d | d | d |  j ƒ}
 |
 t |  j ƒ  ƒ f S(   Nt   ordert   Cs   unknown keyword arguments %st   CFAs   order not C|F|At   At   Fs%   reshape changes the size of the arrayt   unreachablet   dtypes   reshape would require copyR;   R<   R&   (   R   RB   R;   R$   t   popt	   TypeErrort   keyst
   ValueErrorRC   RD   R^   R   R]   RV   t   iter_strides_c_contigt   iter_strides_f_contigR   t   emptyt	   ctypeslibt   c_intpt   arrayR<   R   R&   t   NotImplementedErrorR@   R4   R   R5   (   R   t   newdimst   kwst   oldndt   newndRf   t   newsizet
   newstridest   olddimst
   oldstridesR   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyRX     sJ    	
c   	      C  sT  g  g  } } | d  k rk xø t |  j |  j ƒ D]5 \ } } | d k r/ | j | ƒ | j | ƒ q/ q/ Wn© t | t ƒ s† | f } n  x0 | D]( } |  j | d k r t d ƒ ‚ q q WxX t t |  j |  j ƒ ƒ D]; \ } \ } } | | k rÕ | j | ƒ | j | ƒ qÕ qÕ W|  j	 |  j
 j d | d | d |  j ƒ} | t |  j ƒ  ƒ f S(   Ni   sD   cannot select an axis to squeeze out which has size not equal to oneR;   R<   R&   (   R$   R0   R;   R<   R8   R   RA   Rp   t	   enumerateR@   R4   R   R&   RV   R5   (	   R   t   axisR[   R}   t   lengthR   t   axR-   t   newarr(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   squeeze<  s,    ".Rg   c         C  s·   | d k r t  d ƒ ‚ n  |  j d k r. |  S| d k rC |  j sX | d k r§ |  j r§ |  j f } |  j f } |  j |  j j | | |  j ƒ } | t	 |  j
 ƒ  ƒ f St d ƒ ‚ d  S(   NRh   s   order not C|F|Ai   Rg   Rj   s   ravel on non-contiguous array(   Rp   R   R]   R^   R   R&   R@   R4   R   RV   R5   Rw   (   R   Rf   R[   R}   R\   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   ravelX  s    N(   R(   R)   R*   R   R6   t   classmethodR@   R   RF   RE   R!   R   t   propertyR]   R^   R5   RX   R$   R…   R†   (    (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR7   {   s   
	
						6c         c  s[   | d k r |  j n | } |  j } | Vd } x% | d  D] } | | 9} | | Vq: Wd S(   s#   yields the f-contigous strides
    i   iÿÿÿÿN(   R$   R;   R&   (   R\   R;   R&   R/   RT   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyRr   k  s    	
c         #  s_   ˆ d k r |  j n ˆ ‰ |  j ‰  ‡  ‡ f d †  } x" t t | ƒ  ƒ ƒ D] } | VqL Wd S(   s#   yields the c-contigous strides
    c          3  s=   ˆ  Vd }  x+ t  ˆ d ƒ D] } |  | 9}  |  ˆ  Vq Wd  S(   Ni   (   RO   (   R/   RT   (   R&   R;   (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   gen}  s
    
N(   R$   R;   R&   RO   RV   (   R\   R;   R‰   R-   (    (   R&   R;   s/   lib/python2.7/site-packages/numba/dummyarray.pyRq   w  s
    	c         C  s\   t  |  t ƒ r t St  |  t ƒ rT t |  ƒ | k rX t d „  |  Dƒ ƒ sQ t SqX n t St S(   Nc         s  s   |  ] } t  | t ƒ Vq d  S(   N(   R   R   (   R,   RZ   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pys	   <genexpr>Ž  s    (   R   R   R   RA   RB   t   anyR   (   R   R   (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   is_element_indexingˆ  s    
c         C  sR   | d k r |  } | } n | } |  } | } | | k r> d S| | d | d S(   s1   Algorithm adapted from cpython rangeobject.c
    i    i   (    (   R
   R   R   t   lot   hi(    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyR   —  s    	(    t
   __future__R    R   t   collectionsR   R`   t	   functoolst   operatort   ctypest   numpyRC   t    R   R   t	   CFUNCTYPEt   c_intt   c_longRt   t	   ndpointerRu   t	   c_helpersR   t   objectR	   R2   R3   R7   R$   Rr   Rq   R‹   R   (    (    (    s/   lib/python2.7/site-packages/numba/dummyarray.pyt   <module>   s6   	P	
ð	