U
    Ã9%eâ  ã                   @   sˆ   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 G dd„ de
ƒZG dd„ deƒZed	ƒZG d
d„ dejƒZG dd„ dejƒZdS )é    N)Úcached_property)ÚTargetDescriptor)ÚutilsÚtypingÚ
dispatcherÚcpuc                   @   s"   e Zd ZdZdZejdd„ ƒZdS )Ú_NestedContextNc              	   c   s6   | j | jf}z|| _ || _d V  W 5 |\| _ | _X d S ©N)Ú_typing_contextÚ_target_context)ÚselfÚtyping_contextÚtarget_contextZ
old_nested© r   úR/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/core/registry.pyÚnested   s    
z_NestedContext.nested)Ú__name__Ú
__module__Ú__qualname__r
   r   Ú
contextlibÚcontextmanagerr   r   r   r   r   r   
   s   r   c                   @   sP   e Zd ZejZeƒ Zedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZd	d
„ ZdS )Ú	CPUTargetc                 C   s   t  | j| j¡S r	   )r   Z
CPUContextr   Z_target_name©r   r   r   r   Ú_toplevel_target_context   s    z"CPUTarget._toplevel_target_contextc                 C   s   t  ¡ S r	   )r   ÚContextr   r   r   r   Ú_toplevel_typing_context"   s    z"CPUTarget._toplevel_typing_contextc                 C   s   | j j}|dk	r|S | jS dS )z5
        The target context for CPU targets.
        N)Ú_nestedr   r   ©r   r   r   r   r   r   '   s    zCPUTarget.target_contextc                 C   s   | j j}|dk	r|S | jS dS )z5
        The typing context for CPU targets.
        N)r   r
   r   r   r   r   r   r   2   s    zCPUTarget.typing_contextc                 C   s   | j  ||¡S )zˆ
        A context manager temporarily replacing the contexts with the
        given ones, for the current thread of execution.
        )r   r   )r   r   r   r   r   r   Únested_context=   s    zCPUTarget.nested_contextN)r   r   r   r   ZCPUTargetOptionsÚoptionsr   r   r   r   r   Úpropertyr   r   r   r   r   r   r   r      s   





r   r   c                   @   s   e Zd ZeZdS )ÚCPUDispatcherN)r   r   r   Ú
cpu_targetZtargetdescrr   r   r   r   r!   I   s   r!   c                       s8   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚDelayedRegistrya#  
    A unique dictionary but with deferred initialisation of the values.

    Attributes
    ----------
    ondemand:

        A dictionary of key -> value, where value is executed
        the first time it is is used.  It is used for part of a deferred
        initialization strategy.
    c                    sJ   t  ¡ | _| dd ¡| _| dd ¡| _| jp0| j| _tt| ƒj	||Ž d S )NÚkey_typeÚ
value_type)
r   Ú
UniqueDictÚondemandÚpopr$   r%   Ú_type_checkÚsuperr#   Ú__init__)r   ÚargsÚkws©Ú	__class__r   r   r+   Y   s
    
zDelayedRegistry.__init__c                    s2   || j kr"| j | ƒ | |< | j |= tt| ƒ |¡S r	   )r'   r*   r#   Ú__getitem__)r   Úitemr.   r   r   r0   `   s    
zDelayedRegistry.__getitem__c                    sL   | j r:dd„ }| jd k	r$||| jƒ | jd k	r:||| jƒ tt| ƒ ||¡S )Nc                 S   s<   t |tƒr"|| jks8t| |fƒ‚nt | |ƒs8t| |fƒ‚d S r	   )Ú
isinstanceÚtypeÚ__mro__ÚAssertionError)ÚxZty_xr   r   r   Úcheckh   s    
z*DelayedRegistry.__setitem__.<locals>.check)r)   r$   r%   r*   r#   Ú__setitem__)r   ÚkeyÚvaluer7   r.   r   r   r8   f   s    

zDelayedRegistry.__setitem__)r   r   r   Ú__doc__r+   r0   r8   Ú__classcell__r   r   r.   r   r#   M   s   r#   )r   Ú	functoolsr   Znumba.core.descriptorsr   Z
numba.corer   r   r   r   Úobjectr   r   r"   Z
Dispatcherr!   r&   r#   r   r   r   r   Ú<module>   s   -