σ
\K]c           @` sΧ   d  d l  m Z m Z m Z d  d l Z d  d l m Z m Z m	 Z	 d  d l
 m Z d  d l j j j Z d  d l j j Z d e f d     YZ d e f d     YZ d	 e	 f d
     YZ d e f d     YZ d S(   i    (   t   absolute_importt   divisiont   print_functionN(   t   UFuncMechanismt   GenerializedUFunct   GUFuncCallSteps(   t   dgpu_presentt   HsaUFuncDispatcherc           B` s,   e  Z d  Z d   Z d   Z d d  Z RS(   sC   
    Invoke the HSA ufunc specialization for the given inputs.
    c         C` s   | |  _  d  S(   N(   t	   functions(   t   selft   types_to_retty_kernels(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   __init__   s    c         O` s   t  j |  j | |  S(   s?  
        *args: numpy arrays
        **kws:
            stream -- hsa stream; when defined, asynchronous mode is used.
            out    -- output array. Can be a numpy array or DeviceArrayBase
                      depending on the input arguments.  Type must match
                      the input arguments.
        (   t   HsaUFuncMechanismt   callR   (   R	   t   argst   kws(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   __call__   s    	i    c         C` s
   t   d  S(   N(   t   NotImplementedError(   R	   t   argt   stream(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   reduce   s    (   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR      s   		R   c           B` sP   e  Z d  Z d Z d Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s'   
    Provide OpenCL specialization
    i    t   Ac         C` s'   t  r t j |  St | t j  Sd  S(   N(   R   t   devicearrayt   is_hsa_ndarrayt
   isinstancet   npt   ndarray(   R	   t   obj(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   is_device_array)   s    c         C` s   t  r
 t St | t j  Sd  S(   N(   R   t   FalseR   R   R   (   R	   R   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   is_host_array/   s    c         C` s   t  r t j |  S| Sd  S(   N(   R   t   apit	   to_device(   R	   t   hostaryR   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR#   5   s    c         C` sH   d } d } | | d | } | | d | } | | | f |   d  S(   Ni   i@   i   i   i   (    (   R	   t   funct   countR   R   t   ilpt   tpbt
   blockcount(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   launch;   s
    c         C` s6   t  r t j d | d |  St j d | d |  Sd  S(   Nt   shapet   dtype(   R   R"   t   device_arrayR   t   empty(   R	   R+   R,   R   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR-   D   s    c      	   C` sΧ   t  r t d   nΎ g  t t |   D]2 } | | j k sT | j | | | k r( | ^ q( } t |  t | j  } d g | t | j  } x | D] } d | | <q Wt j	 d | d | d | j
 d |  Sd  S(   Ns   device broadcast_device NIYi    R+   t   stridesR,   t   buffer(   R   R   t   ranget   lent   ndimR+   t   listR/   R   R   R,   (   R	   t   aryR+   t   axt
   ax_differst
   missingdimR/   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   broadcast_deviceJ   s    #(   R   R   R   t   DEFAULT_STREAMt   ARRAY_ORDERR   R!   R#   R*   R-   R9   (    (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR   "   s   						t   _HsaGUFuncCallStepsc           B` s;   e  Z d Z d    Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  r t j |  St Sd  S(   N(   R   R   R   t   True(   R	   R   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR   _   s    c         C` s   t  r t j |  S| Sd  S(   N(   R   R"   R#   (   R	   R$   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR#   e   s    c         C` s   t  r | j |  } | Sd  S(   N(   R   t   copy_to_host(   R	   t   devaryR$   t   out(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   to_hostk   s    c         C` s6   t  r t j d | d |  St j d | d |  Sd  S(   NR+   R,   (   R   R"   R-   R   R.   (   R	   R+   R,   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR-   r   s    c         C` s#   | j  | t | d   |   d  S(   Ni@   (   t	   configuret   min(   R	   t   kernelt   nelemR   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   launch_kernelx   s    (    (   R   R   t	   __slots__R   R#   RA   R-   RF   (    (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyR<   \   s   				t   HSAGenerializedUFuncc           B` s)   e  Z e d     Z d   Z d   Z RS(   c         C` s   t  S(   N(   R<   (   R	   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   _call_steps}   s    c      	   C` sT   t  r. t j d | d d d | j d | j  St j j j | d | f d d Sd  S(   NR+   R/   i    R,   t	   dgpu_data(   i    (   i    (	   R   R   t   DeviceNDArrayR,   RJ   R   t   libt   stride_trickst
   as_strided(   R	   R5   R+   (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   _broadcast_scalar_input   s    	
c      	   C` sb   t  |  t  | j  } d | | j } t rX t j d | d | d | j d | j  St  d  S(   Ni    R+   R/   R,   RJ   (   i    (	   R2   R+   R/   R   R   RK   R,   RJ   R   (   R	   R5   t   newshapet   newaxt
   newstrides(    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   _broadcast_add_axis   s    	
(   R   R   t   propertyRI   RO   RS   (    (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyRH   |   s   	
(   t
   __future__R    R   R   t   numpyR   t   numba.npyufunc.deviceufuncR   R   R   t   numba.roc.hsadrv.driverR   t   numba.roc.hsadrv.devicearrayt   roct   hsadrvR   t   numba.roc.apiR"   t   objectR   R   R<   RH   (    (    (    s1   lib/python2.7/site-packages/numba/roc/dispatch.pyt   <module>   s   : 