o
    h                     @   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   ^/home/www/facesmatcher.com/frenv_anti/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__ZTRITONZGLUONr   r   r   r   r      s    r   c                   @   s   e 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dS )BaseBackend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_stages/   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_mapB   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   )Z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r&|  d dkr&| ddr&dS dS )	zX
        Return a string unique to each possible specialization of the argument
        r   r.   r   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,   r1   r8   r   r   r   r   r      s&    

r   )	metaclassN)abcr   r   dataclassesr   enumr   typingr   r   typesr   r;   r
   r   r   r   r   r   r   <module>   s    