o
    nh                     @   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arch	warp_sizeN)__name__
__module____qualname__str__annotations__r   int r   r   l/var/www/html/construction_image-detection-poc/venv/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EXETRITON__PATH 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   rB   )z,Returns a unique identifier for this backendrC   r   r   r   r   hash0   rE   zBaseBackend.hashoptionsc                 C   rB   )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
        rC   )r   rH   r   r   r   parse_options5   s   zBaseBackend.parse_optionsstagesc                 C   rB   )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.
        rC   )r   rJ   rH   r   r   r   
add_stages=   s   
zBaseBackend.add_stagesc                 C   rB   )zK
        Load additional MLIR dialects into the provided `context`
        rC   )r   contextr   r   r   load_dialectsI      zBaseBackend.load_dialectsc                 C   rB   )z\
        Return a map of interface modules to their device-specific implementations
        rC   rF   r   r   r   get_module_mapP   rN   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_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   rQ   r   alignFrP   tensorr    )r0   data_ptr)argtykwargsr   r   r   get_arg_specialization_   s
    $z"BaseBackend.get_arg_specialization)r   r   r   r	   r   staticmethodr   rA   classmethodr   r   rG   dictobjectrI   rK   rM   r   r   rO   rU   r\   r   r   r   r   r      s*    

r   )	metaclass)r)   r7   r4   r'   abcr   r   dataclassesr   typingr   r   typesr   r`   r	   r   r   r   r   r   <module>   s    