o
    bZh                     @   s   d dl Z d dlZd dlZd dlZd dlmZ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dZdS )    N)ABCMetaabstractmethod)	dataclass)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   G/var/www/auris/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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__binaryc                 C   s   | t d7 } tjtjttj}tj	d| 
  ddtj|ddd| g}|D ]5}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EXEZTRITON_Z_PATH Zthird_partycudabinz	--version)stderrz.*release (\d+\.\d+).*zutf-8)flags   zCannot find )	sysconfigget_config_varospathjoindirname__file__pardirenvirongetupperexistsisfile
subprocesscheck_outputSTDOUTresearchdecode	MULTILINEgroupRuntimeError)r   base_dirpathsr&   resultversionr   r   r   _path_to_binary   s   zBaseBackend._path_to_binaryc                 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   hash0   rA   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   rD   r   r   r   parse_options5   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   rF   rD   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_dialectsI      zBaseBackend.load_dialectsc                 C   r>   )z\
        Return a map of interface modules to their device-specific implementations
        r?   rB   r   r   r   get_module_mapP   rJ   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_attrW   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   rM   r   alignFrL   Ztensorr   )r,   Zdata_ptr)argtykwargsr   r   r   get_arg_specialization_   s
    $z"BaseBackend.get_arg_specialization)r   r   r   r	   r   staticmethodr   r=   classmethodr   r   rC   dictobjectrE   rG   rI   r   r   rK   rP   rU   r   r   r   r   r      s*    

r   )	metaclass)r%   r3   r0   r#   abcr   r   dataclassesr   typingr   r   typesr   rY   r	   r   r   r   r   r   <module>   s    