
    wg                     z    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y)    )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                    rt         j                  rt        d      j                  d      rt        d      j                  d       t        j                  d      }	t        |	      j                  d       t        j                  d      }	t        |	      j                  d       t        j                  d      }	t        |	      t         j                  nj                  dd	      j                  d
g       rrd}	t        t        |	             rrd}	t        t        |	             rj                  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}|S fd}|S t         j                  rt        |       S j!                         }|d<   |d<   |d<   |d<   |d<   |d<   |d
<   t#        | |      }r|j%                          |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    Z/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/decorators.py
jitwrapperzjit.<locals>.jitwrapperg   s    %d6HMM    c                     j                         }|d<   |d<   |d<   |d<   |d<   	|d<   
|d<   t        | |      }r|j                          D ]  }t        j                  |      \  }}|r 	s|t
        j                  k7  rt        d	      	r3d
dlm	} |j                  |      5  |j                  ||       d d d        r|j                  |        |_        |j                          |S # 1 sw Y   xY w)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   HHJM%*M'"(0M*%$(M&!#&M% (0M*%&,M(#*4M,'!$mDD##%! +$,$@$@$E!'6g.C#$MNN4"66t< ?++Hg>? ? LL*+ !,D  "K? ?s   ,C44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   s0    t QF%S(0t5QLO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:      sX   V %%!"DEE
ww}!"M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+,#''&/CDD[)!]
	K	& 

  N	 	B $$= "!	Q Q "! $$%k&/79 9 !$
).g&,4j)'*e$(,f%,4j)*0h'.8l+%kO'')r   c                 j    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.
    z4Return type must be provided for device declarations)r   r'   r)   r	   )namer1   r   r   rG   s        r   declare_devicerJ      s<     !44S9HgDn"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      sB     . . I 7 0 6"8 
 u2T5^B<r   