o
    Gۂi                     @   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arch	warp_sizeN)__name__
__module____qualname__str__annotations__r   int r   r   [/home/ubuntu/maya3_transcribe/venv/lib/python3.10/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__TRITONGLUONr   r   r   r   r      s    r   c                   @   s   e Zd ZdZdeddfddZeedefddZede	fd	d
Z
ededefddZedededdfddZedd Zedee	ef fddZedd Zedd Zedd ZdS )BaseBackendTtargetreturnNc                 C   s   || _ | |s
J d S N)r   supports_target)selfr   r   r   r   __init__   s   zBaseBackend.__init__c                 C      t r   NotImplementedError)r   r   r   r   r         zBaseBackend.supports_targetc                 C   r"   )z,Returns a unique identifier for this backendr#   r    r   r   r   hash#   r%   zBaseBackend.hashoptionsc                 C   r"   )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
        r#   )r    r(   r   r   r   parse_options(   s   zBaseBackend.parse_optionsstagesc                 C   r"   )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.
        r#   )r    r*   r(   r   r   r   
add_stages0   s   
zBaseBackend.add_stagesc                 C   r"   )zK
        Load additional MLIR dialects into the provided `context`
        r#   )r    contextr   r   r   load_dialects<      zBaseBackend.load_dialectsc                 C   r"   )z\
        Return a map of interface modules to their device-specific implementations
        r#   r&   r   r   r   get_module_mapC   r.   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_attrJ   s
   zBaseBackend.parse_attrc                 K   s    | d dkr| ddrdS dS Nr1   r   alignFr0    )getargkwargsr   r   r   get_int_specializationR   s   z"BaseBackend.get_int_specializationc                 K   s$   |   d dkr|ddrdS dS r6   )data_ptrr9   r:   r   r   r   get_tensor_specializationX   s   z%BaseBackend.get_tensor_specialization)r   r   r   %supports_native_tensor_specializationr
   r!   staticmethodr   r   r   r'   dictobjectr)   r+   r-   r   r   r/   r5   r=   r?   r   r   r   r   r      s,    


r   )	metaclassN)abcr   r   dataclassesr   enumr   typingr   r   typesr   rC   r
   r   r   r   r   r   r   <module>   s    