
    `i                     |    d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ dZdd	d	g dd
d	d	fdZd ZdS )    )warn)typesconfigsigutils)DeprecationErrorNumbaInvalidConfigWarning)declare_device_function)CUDADispatcherFakeCUDAKernelz`Deprecated keyword argument `{0}`. Signatures should be passed as the first positional argument.NFTc                 T   rt           j        rt          d                              d          rt          d                              d          )t                              d          }	t          |	                              d          )t                              d          }	t          |	                              d          )t                              d          }	t          |	          t           j        n                    dd	                              d
g           r rd}	t          t          |	                     r rd}	t          t          |	                     r$                    d          rt          d          t          j        |           r| gdnt          | t                    r| d	nd%t           j        rfd}
|
S fd}|S |  t           j        rfd}nfd}|S t           j        rt          |           S                                 }|d<   |d<   |d<   |d<   |d<   |d<   |d
<   t#          | |          }r|                                 |S )a  
    JIT compile a Python function for CUDA GPUs.

    :param func_or_sig: A function to JIT compile, or *signatures* of a
       function to compile. If a function is supplied, then a
       :class:`Dispatcher <numba.cuda.dispatcher.CUDADispatcher>` is returned.
       Otherwise, ``func_or_sig`` may be a signature or a list of signatures,
       and a function is returned. The returned function accepts another
       function, which it will compile and then return a :class:`Dispatcher
       <numba.cuda.dispatcher.CUDADispatcher>`. See :ref:`jit-decorator` for
       more information about passing signatures.

       .. note:: A kernel cannot have any return value.
    :param device: Indicates whether this is a device function.
    :type device: bool
    :param link: A list of files containing PTX or CUDA C/C++ source to link
       with the function
    :type link: list
    :param debug: If True, check for exceptions thrown when executing the
       kernel. Since this degrades performance, this should only be used for
       debugging purposes. If set to True, then ``opt`` should be set to False.
       Defaults to False.  (The default value can be overridden by setting
       environment variable ``NUMBA_CUDA_DEBUGINFO=1``.)
    :param fastmath: When True, enables fastmath optimizations as outlined in
       the :ref:`CUDA Fast Math documentation <cuda-fast-math>`.
    :param max_registers: Request that the kernel is limited to using at most
       this number of registers per thread. The limit may not be respected if
       the ABI requires a greater number of registers than that requested.
       Useful for increasing occupancy.
    :param opt: Whether to compile from LLVM IR to PTX with optimization
                enabled. When ``True``, ``-opt=3`` is passed to NVVM. When
                ``False``, ``-opt=0`` is passed to NVVM. Defaults to ``True``.
    :type opt: bool
    :param lineinfo: If True, generate a line mapping between source code and
       assembly code. This enables inspection of the source code in NVIDIA
       profiling tools and correlation with program counter sampling.
    :type lineinfo: bool
    :param cache: If True, enables the file-based cache for this function.
    :type cache: bool
    z Cannot link PTX in the simulatorboundscheckz)bounds checking is not supported for CUDAargtypesNrestypebindfastmathF
extensionsz{debug=True with opt=True (the default) is not supported by CUDA. This may result in a crash - set debug=False or opt=False.zdebug and lineinfo are mutually exclusive. Use debug to get full debug info (this disables some optimizations), or lineinfo for line info only with code generation unaffected.linkz(link keyword invalid for device functionTc                 (    t          |           S Ndevicer   r   funcr   r   s    i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/cuda/decorators.py
jitwrapperzjit.<locals>.jitwrapperg   s    %d6HMMMM    c                 :                                    }|d<   |d<   |d<   |d<   |d<   	|d<   
|d<   t          | |          }r|                                 D ]}t          j        |          \  }}|r!	s|t
          j        k    rt          d	          	rJd
dlm	} |
                    |          5  |                    ||           d d d            n# 1 swxY w Y   |                    |           |_        |                                 |S )Ndebuglineinfor   optr   r   r   targetoptionsz'CUDA kernel must have void return type.r   )	typeinfer)copyr
   enable_cachingr   normalize_signaturer   void	TypeError
numba.corer$   register_dispatchercompile_devicecompile_specializeddisable_compile)r   r#   dispsigr   r   r$   cacher   r   r   r   kwsr    r   r!   
signaturesspecializeds          r   _jitzjit.<locals>._jitk   s   HHJJM%*M'"(0M*%$(M&!#&M% (0M*%&,M(#*4M,'!$mDDDD &##%%%! + +$,$@$E$E!' O6 Og.C.C#$MNNN +444444"66t<< ? ?++Hg>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LL**** +D  """Ks   ;CC"	%C"	c                 (    t          |           S r   r   r   s    r   autojitwrapperzjit.<locals>.autojitwrapper   s!    )$v3;= = = =r   c           
      ,    t          | fdS )N)r   r   r!   r    r   r2   )jit)r   r2   r   r   r3   r    r   r!   s    r   r8   zjit.<locals>.autojitwrapper   s<    t QF%S(0t5Q QLOQ Q Qr   r   r   r    r!   r   r"   )r   ENABLE_CUDASIMNotImplementedErrorget_msg_deprecated_signature_argformatr   CUDA_DEBUGINFO_DEFAULTr   r   
ValueErrorr   is_signature
isinstancelistr   r%   r
   r&   )func_or_sigr   inliner   r   r!   r    r2   r3   msgr   r6   r8   r#   r0   r   r   r4   r5   s    ` ``````      @@@@r   r:   r:      s   V  F% F!"DEEE
ww} O!"MNNN
wwz&+22:>>s###
wwy%+229==s###
wwv"+226::s###-2]F))Ewwz5))Hr**J - -2 	&s++,,, - -N 	&s++,,, E#''&// ECDDD[)) !]
	K	&	&  

  	N N N N N N	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B $ Q= = = = = = =Q Q Q Q Q Q Q Q Q Q Q "! $ %k&/79 9 9 9 !$

).g&,4j)'*e$(,f%,4j)*0h'.8l+%kOOO *'')))r   c                 x    t          j        |          \  }}|d}t          |          t          | ||          S )a  
    Declare the signature of a foreign function. Returns a descriptor that can
    be used to call the function from a Python kernel.

    :param name: The name of the foreign function.
    :type name: str
    :param sig: The Numba signature of the function.
    Nz4Return type must be provided for device declarations)r   r'   r)   r	   )namer1   r   r   rG   s        r   declare_devicerJ      sA     !4S99HgDnn"4(;;;r   )warningsr   r*   r   r   r   numba.core.errorsr   r   numba.cuda.compilerr	   numba.cuda.dispatcherr
   numba.cuda.simulator.kernelr   r>   r:   rJ    r   r   <module>rQ      s          . . . . . . . . . . I I I I I I I I 7 7 7 7 7 7 0 0 0 0 0 0 6 6 6 6 6 6"8 
 u2T5^ ^ ^ ^B< < < < <r   