U
    h
                     @   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archZ	warp_sizeN)__name__
__module____qualname__str__annotations__r   int r   r   J/var/www/html/venv/lib/python3.8/site-packages/triton/backends/compiler.pyr   
   s   
r   c                   @   s   e Zd ZeddddZeedddZ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dS )BaseBackendN)targetreturnc                 C   s   || _ | |std S N)r   supports_targetAssertionError)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 ]x}|	dd }t j
|rJt j|rJtj|d	gtjd
}|d k	rJtjd|dtjd}|d k	rJ||df  S qJtd|  d S )NZTRITON_Z_PATH Z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_binary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   rB   r   r   r   parse_options3   s    zBaseBackend.parse_options)stagesrB   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   rD   rB   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_dialectsG   s    zBaseBackend.load_dialects)r   r   r   r   r   staticmethodr   r=   r   r   r   rA   dictobjectrC   rE   rG   r   r   r   r   r      s   r   )	metaclass)r#   r2   r/   abcr   r   r   dataclassesr   typingr   rJ   r   r   r   r   r   r   <module>   s   