ó
\K]c           @   sv   d  d l  m Z d  d l m Z m Z d  d l Z d  d l Z d  d l Z d „  Z	 d „  Z
 d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   trace(   t
   deprecatedt   NumbaDeprecationWarningNc         C   sÁ   |  d  k s$ | d  k s$ | d  k r( d  S| d k rM t | ƒ } | j ƒ  n  g  } |  j } x? t t | ƒ d d ƒ D]% } | j | ƒ | | | d 9} qu W| d k r· | j ƒ  n  t | ƒ S(   Nt   Fi    iÿÿÿÿi   t   C(   R   N(   t   Nonet   listt   reverset   itemsizet   ranget   lent   appendt   tuple(   t   dtypet   shapet   ordert   stridesR   t   i(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   _o2s	   s    $	c         C   s   | d  k s | d |  j k r( d } n( | d |  j k rD d } n t d ƒ ‚ t |  | | ƒ } | | k r} t d ƒ ‚ n  | S(   NiÿÿÿÿR   i    R   s3   strides do not correspond to contiguous data layout(   R   R   t
   ValueErrorR   (   R   R   R   R   t   s2(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   _s2o   s    		t
   SmartArrayc           B   sŽ  e  Z d  Z d  Z d! e d! d! d! d d „ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d „  ƒ Z d d	 „ Z e d
 ƒ d „  ƒ Z e d ƒ d „  ƒ Z d d „ Z e d ƒ d „  ƒ Z e d ƒ d „  ƒ Z d „  Z d „  Z e d „  ƒ Z e d! d! d! d! e d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" RS("   s1   An array type that supports host and GPU storage.t   hostt   gpuc   
   	   C   s$  d } d | } t  j t | ƒ d d ƒ| |  j k rK t d | ƒ ‚ n  | d k	 si | rc | si t ‚ d |  _ |  _ t	 |  _
 |  _ |  j | | | | t | | | ƒ | ƒ | d k rÒ t |  _
 |  j }	 n t |  _ |  j }	 |	 j |  _ |	 j |  _ |	 j |  _ |	 j |  _ |	 j |  _ d S(   s]  Construct a SmartArray in the memory space defined by 'where'.
        Valid invocations:

        * SmartArray(obj=<array-like object>, copy=<optional-true-or-false>):

          to create a SmartArray from an existing array-like object.
          The 'copy' argument specifies whether to adopt or to copy it.

        * SmartArray(shape=<shape>, dtype=<dtype>, order=<order>)

          to create a new SmartArray from scratch, given the typical NumPy array
          attributes.

        (The optional 'where' argument specifies where to allocate the array
        initially. (Default: 'host')
        s]   http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-smartarrays9   
SmartArray is deprecated.

For more information visit %st
   stackleveli   s   "%s" is not a valid targetR   N(   t   warningst   warnR   t   _targetsR   R   t   AssertionErrort   _hostt   _gput   Falset   _host_validt
   _gpu_validt	   _allocateR   t   TrueR   t   _shapeR   t   _stridesR   t   _dtypet   ndimt   _ndimt   sizet   _size(
   t   selft   objt   copyR   R   R   t   wheret   urlt   msgt   t(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   __init__/   s(    (			c         C   s   |  j  S(   N(   R%   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   Z   s    c         C   s   |  j  S(   N(   R&   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   ]   s    c         C   s   |  j  S(   N(   R'   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   `   s    c         C   s   |  j  S(   N(   R)   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR(   c   s    c         C   s   |  j  S(   N(   R+   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR*   f   s    c         C   si   | |  j  k r" t d | ƒ ‚ n  |  j | ƒ | d k rB |  j S| d k rU |  j St d | ƒ ‚ d S(   s>   Return the representation of 'self' in the given memory space.s   "%s" is not a valid targetR   R   s   unknown memory space "%s"N(   R   R   t   _syncR   R   (   R,   R/   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   geti   s      s   get('host')c         C   s   |  j  d ƒ S(   NR   (   R5   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   s   s    s
   get('gpu')c         C   s   |  j  d ƒ S(   NR   (   R5   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   u   s    c         C   sÌ   | |  j  k r" t d | ƒ ‚ n  | d k ru |  j d ƒ |  j d k	 rÈ t j |  j ƒ d k rÈ |  j d ƒ qÈ nS | d k rÈ |  j d ƒ |  j d k	 rÈ t j |  j ƒ d k rÈ |  j d ƒ qÈ n  d S(   s@   Mark the given location as changed, broadcast updates if needed.s   "%s" is not a valid targetR   R   i   N(	   R   R   t   _invalidateR   R   t   syst   getrefcountR4   R   (   R,   R/   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   mark_changedx   s    ''s   mark_changed('host')c         C   s   |  j  d ƒ S(   NR   (   R9   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   host_changedˆ   s    s   mark_changed('gpu')c         C   s   |  j  d ƒ S(   NR   (   R9   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   gpu_changedŠ   s    c         G   s    |  j  d ƒ t j |  j | Œ S(   NR   (   R4   t   npt   arrayR   (   R,   t   args(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt	   __array__   s    c         C   s§   | d k rY |  j  d k r@ |  j d d |  j |  j |  j ƒ n  |  j s£ |  j ƒ  q£ nJ |  j d k r |  j d d |  j |  j |  j ƒ n  |  j	 s£ |  j
 ƒ  n  d S(   s1   Sync the data in one memory space with the other.R   R   N(   R   R   R#   R   R   R   R"   t   _copy_to_gpuR   R!   t   _copy_to_host(   R,   R/   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR4   ’   s    %	%	c         C   s%   | d k r t  |  _ n	 t  |  _ d S(   s,   Mark the host / device array as out-of-date.R   N(   R    R"   R!   (   R,   R/   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR6       s    c         C   s  | r t  j | ƒ } n  | d k ru | d  k	 rN t  j | | d | ƒ|  _ q	t  j | | t | | | ƒ ƒ |  _ n” d d l m } | d  k	 rÐ t	 | t  j
 ƒ s» t  j | d t ƒ} n  | j | ƒ |  _ n9 | d  k rñ t | | d ƒ } n  | j | | | ƒ |  _ d  S(   NR   R.   iÿÿÿÿ(   t   devicearrayR   (   R<   R   R   R=   R   t   emptyR   t   numba.cuda.cudadrvRB   t
   isinstancet   ndarrayR    t   from_array_likeR   R   t   DeviceNDArray(   R,   R/   R-   R   R   R   R.   t   da(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR#   ©   s    'c         C   s    |  j  j |  j ƒ t |  _ d  S(   N(   R   t   copy_to_deviceR   R$   R"   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR@   Â   s    c         C   s    |  j  j |  j ƒ t |  _ d  S(   N(   R   t   copy_to_hostR   R$   R!   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyRA   Ç   s    c         C   s*   t  |  t j ƒ r" t |  d t ƒS|  Sd S(   s[   If `value` is an ndarray, wrap it in a SmartArray,
        otherwise return `value` itself.R.   N(   RE   R<   RF   R   R    (   t   value(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   _maybe_wrapÌ   s    c         C   sM   |  j  d k r4 |  j d d |  j |  j |  j ƒ n  |  j t |  j  | ƒ ƒ S(   s9   Transparently forward attribute access to the host array.R   N(   R   R   R#   R   R   R   RM   t   getattr(   R,   t   name(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   __getattr__Ö   s    %c         C   s   |  j  d S(   Ni    (   R   (   R,   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   __len__à   t    c         C   sA   t  |  ƒ t  | ƒ k	 r t S|  j |  j d ƒ | j d ƒ k ƒ S(   NR   (   t   typeR    RM   R5   (   R,   t   other(    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   __eq__á   s     c         G   s   |  j  |  j d ƒ j | Œ  ƒ S(   NR   (   RM   R5   t   __getitem__(   R,   R>   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyRV   å   s    c         G   s   |  j  |  j d ƒ j | Œ  ƒ S(   NR   (   RM   R5   t   __setitem__(   R,   R>   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyRW   ç   s    c         G   s   |  j  |  j d ƒ j | Œ  ƒ S(   NR   (   RM   R5   t   astype(   R,   R>   (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyRX   é   s    (   R   R   N(#   t   __name__t
   __module__t   __doc__R   R   R$   R3   t   propertyR   R   R   R(   R*   R5   R   R   R   R9   R:   R;   R?   R4   R    R6   R#   R@   RA   t   staticmethodRM   RP   RQ   RU   RV   RW   RX   (    (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyR   *   s<   *
			

				(   t   numba.tracingR    t   numba.errorsR   R   R   R7   t   numpyR<   R   R   t   objectR   (    (    (    s/   lib/python2.7/site-packages/numba/smartarray.pyt   <module>   s   		