a
    jh                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ eddG dd	 d	eZG d
d deZG dd dedZdS )    )ABCMetaabstractmethod)	dataclass)Enum)DictUnion)
ModuleTypeT)frozenc                   @   s.   e Zd ZU eed< eeef ed< eed< dS )	GPUTargetbackendarchZ	warp_sizeN)__name__
__module____qualname__str__annotations__r   int r   r   F/var/www/auris/lib/python3.9/site-packages/triton/backends/compiler.pyr
      s   
r
   c                   @   s   e Zd ZdZdZdZdS )Languagez1The input language being compiled by the backend.r      N)r   r   r   __doc__ZTRITONZGLUONr   r   r   r   r      s   r   c                   @   s   e Zd ZeddddZeeedddZeedd	d
Z	ee
edddZee
eddddZedd Zeeeef dddZedd Zedd ZdS )BaseBackendN)targetreturnc                 C   s   || _ | |sJ d S N)r   supports_target)selfr   r   r   r   __init__   s    zBaseBackend.__init__r   c                 C   s   t d S r   NotImplementedErrorr   r   r   r   r      s    zBaseBackend.supports_target)r   c                 C   s   t dS )z,Returns a unique identifier for this backendNr    r   r   r   r   hash"   s    zBaseBackend.hash)optionsr   c                 C   s   t dS )z
        Converts an `options` dictionary into an arbitrary object and returns it.
        This function may contain target-specific heuristics and check the legality of the provided options
        Nr    )r   r$   r   r   r   parse_options'   s    zBaseBackend.parse_options)stagesr$   r   c                 C   s   t dS )a  
        Populates `stages` dictionary with entries of the form:
        ir_name [str] => Function[(src: str, metadata: dict) -> str|bytes]
        The value of each entry may populate a `metadata` dictionary.
        Stages will be run sequentially (in inseriton order) and can communicate using `metadata`.
        All stages are expected to return a `str` object, except for the last stage which returns
        a `bytes` object for execution by the launcher.
        Nr    )r   r&   r$   r   r   r   
add_stages/   s    
zBaseBackend.add_stagesc                 C   s   t dS )zK
        Load additional MLIR dialects into the provided `context`
        Nr    )r   contextr   r   r   load_dialects;   s    zBaseBackend.load_dialectsc                 C   s   t dS )z\
        Return a map of interface modules to their device-specific implementations
        Nr    r"   r   r   r   get_module_mapB   s    zBaseBackend.get_module_mapc                 C   s,   t | tsJ g }d| v r(|ddgg7 }|S )NDztt.divisibility   )
isinstancer   )descretr   r   r   
parse_attrI   s
    zBaseBackend.parse_attrc                 K   sP   |dkr$| d dkr$| ddr$dS |dkrL|  d dkrL| ddrLdS dS )	zX
        Return a string unique to each possible specialization of the argument
        r   r,   r   ZalignFr+   Ztensor )getZdata_ptr)argtykwargsr   r   r   get_arg_specializationQ   s
     $z"BaseBackend.get_arg_specialization)r   r   r   r
   r   staticmethodr   r   r   r#   dictobjectr%   r'   r)   r   r   r*   r0   r6   r   r   r   r   r      s$   

r   )	metaclassN)abcr   r   Zdataclassesr   enumr   typingr   r   typesr   r9   r
   r   r   r   r   r   r   <module>   s   