
    sh                         S r SSKrSSKJr  SSKJrJr  SSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJr   " S
 S\5      r " S S\5      rg)z2
Implementation of compiled C callbacks (@cfunc).
    N)cached_property)compilerregistry)	NullCacheFunctionCache)_FunctionCompiler)	signature)	to_ctypes)global_compiler_lockc                       \ rS rSrS rSrg)_CFuncCompiler   c                 v    SUl         SUl        SUl        SUl        UR                  (       a  [        S5      eU$ )NTFz&object mode not allowed in C callbacks)no_cpython_wrapperno_cfunc_wrapper
no_compileenable_pyobjectforce_pyobjectNotImplementedError)selfflagss     h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/ccallback.py_customize_flags_CFuncCompiler._customize_flags   s@    #' !&   !&%&NOO     N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r      s    r   r   c                       \ rS rSrSr\R                  r\R                  4S jr
S r\S 5       rS r\S 5       r\S 5       r\S	 5       r\S
 5       rS r\S 5       rS rS rSrg)CFunc!   z<
A compiled C callback, as created by the @cfunc decorator.
c                 8   Uu  pgUc  [        S5      eUR                  U l        [        USU R                  5      U l        Xl        Xl        [        U/UQ76 U l        [        XR                  XCUS9U l
        S U l        S U l        [        5       U l        SU l        g )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__CFunc.__init__'   s    FGG#FNDMMJ!k1D1	'0A0A(/7EG " $kr   c                 8    [        U R                  5      U l        g N)r   r*   r0   r   s    r   enable_cachingCFunc.enable_caching;   s    #DLL1r   c                    U R                   R                  U R                  U R                  R                  5      nUc7  U R                  5       nU R                   R                  U R                  U5        OU =R                  S-  sl        UR                  U l	        UR                  R                  U l        U R                  R                  U R                  5      U l        g )N   )r0   load_overloadr+   r,   target_context_compile_uncachedsave_overloadr1   library_libraryfndescllvm_cfunc_wrapper_namer.   get_pointer_to_functionr/   )r   cress     r   compileCFunc.compile>   s     {{(()-):):)I)IK<))+DKK%%dii6!![[@@ $ E E! r   c                 z    U R                   nU R                  R                  UR                  UR                  5      $ r;   )r+   r-   rK   r6   r7   )r   r3   s     r   rC   CFunc._compile_uncachedN   s,    ii ~~%%chh@@r   c                     U R                   $ )z7
The process-wide symbol the C callback is exposed as.
)r.   r<   s    r   native_nameCFunc.native_nameT   s     !!!r   c                     U R                   $ )z 
The address of the C callback.
)r/   r<   s    r   addressCFunc.address]   s    
 $$$r   c                 b    SSK nUR                  5       nUR                  SU R                  5      $ )z6
A cffi function pointer representing the C callback.
r   Nzvoid *)cffiFFIcastrS   )r   rV   ffis      r   rV   
CFunc.cffid   s)    
 	hhj xx$,,//r   c                     U R                   R                   Vs/ s H  n[        U5      PM     nn[        U R                   R                  5      n[        R
                  " U/UQ76 nU" U R                  5      $ s  snf )z7
A ctypes function object representing the C callback.
)r+   r6   r
   r7   ctypes	CFUNCTYPErS   )r   tyctypes_argsctypes_restypefunctypes        r   r\   CFunc.ctypeso   sa    
 04yy~~>~y}~>"499#8#89##NA[A%% ?s   A8c                 6    U R                   R                  5       $ )z2
Return the LLVM IR of the C callback definition.
)rF   get_llvm_strr<   s    r   inspect_llvmCFunc.inspect_llvmy   s     }}))++r   c                     U R                   $ r;   )r1   r<   s    r   
cache_hitsCFunc.cache_hits   s    r   c                 $    SU R                   < S3$ )Nz<Numba C callback >)r   r<   s    r   __repr__CFunc.__repr__   s    *.*;*;==r   c                 &    U R                   " U0 UD6$ r;   )r*   )r   r6   kwargss      r   __call__CFunc.__call__   s    ||T,V,,r   )r   r   r)   r0   r1   r-   rF   r*   r+   r/   r.   N)r   r   r   r    __doc__r   
cpu_targetr,   r   Compilerr8   r=   r   rK   rC   propertyrP   rS   r   rV   r\   re   rh   rl   rp   r!   r   r   r   r#   r#   !   s     &&L !) 1 1(2    A " " % % 0 0 & &,    >-r   r#   )rr   r\   	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>r~      s?   
  % ) 7 3 ' 4 9&  f-F f-r   