§
    ƒÛgØ  ã                   ó¦   — 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dS )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dS )Ú_CFuncCompilerc                 ój   — 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     úJ/granary/edev/quantum/lib/python3.11/site-packages/numba/core/ccallback.pyÚ_customize_flagsz_CFuncCompiler._customize_flags   sF   € Ø#'ˆÔ Ø!&ˆÔð  ˆÔð !&ˆÔØÔð 	PÝ%Ð&NÑOÔ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dS )ÚCFunczD
    A compiled C callback, as created by the @cfunc decorator.
    c                 óL  — |\  }}|€t          d¦  «        ‚|j        | _        t          |d| j        ¦  «        | _        || _        || _        t          |g|¢R Ž | _        t          || j	        |||¬¦  «        | _
        d | _        d | _        t          ¦   «         | _        d| _        d S )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ÐGØœˆŒÝ# F¨N¸D¼MÑJÔJˆÔØ!ˆÔàˆŒÝ˜kÐ1¨DÐ1Ð1Ð1ˆŒ	Ý'¨°Ô0AØ(/°Ø7EðGñ Gô GˆŒð "ˆÔØ $ˆÔÝ‘k”kˆŒØˆÔÐÐr   c                 ó8   — t          | j        ¦  «        | _        d S ©N)r   r&   r,   ©r   s    r   Úenable_cachingzCFunc.enable_caching;   s   € Ý# D¤LÑ1Ô1ˆŒˆˆr   c                 ój  — | j                              | j        | j        j        ¦  «        }|€5|                      ¦   «         }| j                              | j        |¦  «         n| xj        dz  c_        |j        | _	        |j
        j        | _        | j	                             | j        ¦  «        | _        d S )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ñKô Kˆàˆ<Ø×)Ò)Ñ+Ô+ˆDØŒK×%Ò% d¤i°Ñ6Ô6Ð6Ð6àÐÔ Ñ!ÐÔàœˆŒØ!œ[Ô@ˆÔØ $¤× EÒ EØÔñ! ô ! ˆÔÐÐr   c                 óZ   — | j         }| j                             |j        |j        ¦  «        S r6   )r'   r)   rE   r2   r3   )r   r/   s     r   r=   zCFunc._compile_uncachedN   s'   € ØŒiˆð Œ~×%Ò% c¤h°´Ñ@Ô@Ð@r   c                 ó   — | j         S )zG
        The process-wide symbol the C callback is exposed as.
        )r*   r7   s    r   Únative_namezCFunc.native_nameT   s   € ð Ô!Ð!r   c                 ó   — | j         S )z0
        The address of the C callback.
        )r+   r7   s    r   ÚaddresszCFunc.address]   s   € ð
 Ô$Ð$r   c                 óh   — ddl }|                     ¦   «         }|                     d| j        ¦  «        S )zF
        A cffi function pointer representing the C callback.
        r   Nzvoid *)ÚcffiÚFFIÚcastrJ   )r   rL   Úffis      r   rL   z
CFunc.cffid   s2   € ð
 	ˆˆˆØ�hŠh‰jŒjˆð �xŠx˜ $¤,Ñ/Ô/Ð/r   c                 ó¤   — d„ | j         j        D ¦   «         }t          | j         j        ¦  «        }t	          j        |g|¢R Ž } || j        ¦  «        S )zG
        A ctypes function object representing the C callback.
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   r
   )Ú.0Útys     r   ú
<listcomp>z CFunc.ctypes.<locals>.<listcomp>t   s   € Ð>Ð>Ð>¨•y ‘}”}Ð>Ð>Ð>r   )r'   r2   r   r3   ÚctypesÚ	CFUNCTYPErJ   )r   Úctypes_argsÚctypes_restypeÚfunctypes       r   rU   zCFunc.ctypeso   sW   € ð
 ?Ð>¨t¬y¬~Ð>Ñ>Ô>ˆÝ" 4¤9Ô#8Ñ9Ô9ˆÝÔ# NÐA°[ÐAÐAÐAˆØˆx˜œÑ%Ô%Ð%r   c                 ó4   — | j                              ¦   «         S )zB
        Return the LLVM IR of the C callback definition.
        )r@   Úget_llvm_strr7   s    r   Úinspect_llvmzCFunc.inspect_llvmy   s   € ð Œ}×)Ò)Ñ+Ô+Ð+r   c                 ó   — | j         S r6   )r-   r7   s    r   Ú
cache_hitszCFunc.cache_hits   s   € àÔÐr   c                 ó   — d| j         ›d�S )Nz<Numba C callback ú>)r   r7   s    r   Ú__repr__zCFunc.__repr__ƒ   s   € € Ø*.Ô*;Ð*;Ð*;Ð=Ð=r   c                 ó   —  | j         |i |¤ŽS r6   )r&   )r   r2   Úkwargss      r   Ú__call__zCFunc.__call__†   s   € ØˆtŒ|˜TÐ, VÐ,Ð,Ð,r   N)r   r   r   Ú__doc__r   Ú
cpu_targetr(   r   ÚCompilerr4   r8   r   rE   r=   ÚpropertyrH   rJ   r   rL   rU   r\   r^   ra   rd   r   r   r   r    r    !   s5  € € € € € ðð ð Ô&€Lð !)Ô 1ðð ð ð ð(2ð 2ð 2ð ð ð  ñ Ôð ðAð Að Að ð"ð "ñ „Xð"ð ð%ð %ñ „Xð%ð ð0ð 0ñ „_ð0ð ð&ð &ñ „_ð&ð,ð ,ð ,ð ð ð  ñ „Xð ð>ð >ð >ð-ð -ð -ð -ð -r   r    )re   rU   Ú	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>rq      s  ððð ð
 €€€Ø %Ð %Ð %Ð %Ð %Ð %à )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð Ð&ñ ô ð ð f-ð f-ð f-ð f-ð f-ˆFñ f-ô f-ð f-ð f-ð f-r   