
    xKg                         d Z ddlZddlmZ ddl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d	lmZ  G d
 de      Z G d de      Zy)z2
Implementation of compiled C callbacks (@cfunc).
    N)cached_property)compilerregistry)	NullCacheFunctionCache)_FunctionCompiler)	signature)	to_ctypes)global_compiler_lockc                       e Zd Zd Zy)_CFuncCompilerc                 l    d|_         d|_        d|_        d|_        |j                  rt        d      |S )NTFz&object mode not allowed in C callbacks)no_cpython_wrapperno_cfunc_wrapper
no_compileenable_pyobjectforce_pyobjectNotImplementedError)selfflagss     X/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/core/ccallback.py_customize_flagsz_CFuncCompiler._customize_flags   s@    #' !&   !&%&NOO    N)__name__
__module____qualname__r    r   r   r   r      s    r   r   c                       e Zd ZdZej
                  Zej                  fdZ	d Z
ed        Zd Zed        Zed        Zed        Zed	        Zd
 Zed        Zd Zd Zy)CFunczD
    A compiled C callback, as created by the @cfunc decorator.
    c                 F   |\  }}|t        d      |j                  | _        t        |d| j                        | _        || _        || _        t        |g| | _        t        || j                  |||      | _
        d | _        d | _        t               | _        d| _        y )Nz(C callback needs an explicit return typer   )pipeline_classr   )	TypeErrorr   getattrr   __wrapped___pyfuncr	   _sigr   _targetdescr	_compiler_wrapper_name_wrapper_addressr   _cache_cache_hits)r   pyfuncsiglocalsoptionsr!   argsreturn_types           r   __init__zCFunc.__init__'   s    kFGG#FNDMMJ!k1D1	'0A0A(/7EG " $kr   c                 8    t        | j                        | _        y N)r   r%   r+   r   s    r   enable_cachingzCFunc.enable_caching;   s    #DLL1r   c                    | j                   j                  | j                  | j                  j                        }|7| j                         }| j                   j                  | j                  |       n| xj                  dz  c_        |j                  | _	        |j                  j                  | _        | j                  j                  | j                        | _        y )N   )r+   load_overloadr&   r'   target_context_compile_uncachedsave_overloadr,   library_libraryfndescllvm_cfunc_wrapper_namer)   get_pointer_to_functionr*   )r   cress     r   compilezCFunc.compile>   s     {{(()-):):)I)IK<))+DKK%%dii6!![[@@ $ E E! r   c                 z    | j                   }| j                  j                  |j                  |j                        S r5   )r&   r(   rD   r1   r2   )r   r.   s     r   r<   zCFunc._compile_uncachedN   s,    ii ~~%%chh@@r   c                     | j                   S )zG
        The process-wide symbol the C callback is exposed as.
        )r)   r6   s    r   native_namezCFunc.native_nameT   s     !!!r   c                     | j                   S )z0
        The address of the C callback.
        )r*   r6   s    r   addresszCFunc.address]   s    
 $$$r   c                 b    ddl }|j                         }|j                  d| j                        S )zF
        A cffi function pointer representing the C callback.
        r   Nzvoid *)cffiFFIcastrI   )r   rK   ffis      r   rK   z
CFunc.cffid   s)    
 	hhj xx$,,//r   c                     | j                   j                  D cg c]  }t        |       }}t        | j                   j                        }t	        j
                  |g| } || j                        S c c}w )zG
        A ctypes function object representing the C callback.
        )r&   r1   r
   r2   ctypes	CFUNCTYPErI   )r   tyctypes_argsctypes_restypefunctypes        r   rP   zCFunc.ctypeso   sa    
 04yy~~>~y}~>"499#8#89##NA[A%% ?s   A4c                 6    | j                   j                         S )zB
        Return the LLVM IR of the C callback definition.
        )r?   get_llvm_strr6   s    r   inspect_llvmzCFunc.inspect_llvmy   s     }}))++r   c                     | j                   S r5   )r,   r6   s    r   
cache_hitszCFunc.cache_hits   s    r   c                 "    d| j                   dS )Nz<Numba C callback >)r   r6   s    r   __repr__zCFunc.__repr__   s    *.*;*;==r   c                 &     | j                   |i |S r5   )r%   )r   r1   kwargss      r   __call__zCFunc.__call__   s    t||T,V,,r   N)r   r   r   __doc__r   
cpu_targetr'   r   Compilerr3   r7   r   rD   r<   propertyrG   rI   r   rK   rP   rX   rZ   r]   r`   r   r   r   r   r   !   s     &&L !) 1 1(2    A " " % % 0 0 & &,    >-r   r   )ra   rP   	functoolsr   
numba.corer   r   numba.core.cachingr   r   numba.core.dispatcherr   numba.core.typingr	   numba.core.typing.ctypes_utilsr
   numba.core.compiler_lockr   r   objectr   r   r   r   <module>rm      s?   
  % ) 7 3 ' 4 9&  f-F f-r   