o
    灛i
                     @   st   d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dl	m
Z
 eddG dd deZG d	d
 d
edZdS )    N)ABCMetaabstractmethodabstractclassmethod)	dataclass)UnionT)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   Z/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/triton/backends/compiler.pyr   
   s   
 r   c                   @   s   e Zd ZdeddfddZedefddZ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dS )BaseBackendtargetreturnNc                 C   s   || _ | |s
J d S N)r   supports_target)selfr   r   r   r   __init__   s   zBaseBackend.__init__binaryc                 C   s   t jt jtt j}t jd|   ddt j|ddd| g}|D ]<}|	dd }t j
|rat j|ratj|d	gtjd
}|d uratjd|dtjd}|d ura||df  S q%td|  )NTRITON__PATH third_partycudabin r   z	--version)stderrz.*release (\d+\.\d+).*zutf-8)flags   zCannot find )ospathjoindirname__file__pardirenvirongetuppersplitexistsisfile
subprocesscheck_outputSTDOUTresearchdecode	MULTILINEgroupRuntimeError)r   base_dirpathspr!   resultversionr   r   r   _path_to_binary   s   zBaseBackend._path_to_binaryc                 C      t r   NotImplementedError)r   r   r   r   r   *   s   zBaseBackend.supports_targetc                 C   rA   )z,Returns a unique identifier for this backendrB   )r   r   r   r   hash.   s   zBaseBackend.hashoptionsc                 C   rA   )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
        rB   )r   rE   r   r   r   parse_options3   s   zBaseBackend.parse_optionsstagesc                 C   rA   )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.
        rB   )r   rG   rE   r   r   r   
add_stages;   s   
zBaseBackend.add_stagesc                 C   rA   )zK
        Load additional MLIR dialects into the provided `context`
        rB   )r   contextr   r   r   load_dialectsG   s   zBaseBackend.load_dialects)r   r   r   r   r   staticmethodr   r@   r   r   r   rD   dictobjectrF   rH   rJ   r   r   r   r   r      s    r   )	metaclass)r&   r5   r2   abcr   r   r   dataclassesr   typingr   rM   r   r   r   r   r   r   <module>   s    