U
    9%eq                     @   s   U d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ ddlm	Z	 G dd dZ
i Zeee
f ed< eedd	d
ZedddZe  dd ZdS )    N)Dict   )
DriverBasec                   @   s   e Zd ZeddddZdd Zdd Zd	d
 ZedddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZeedddZdS )BaseBackendN)device_typereturnc                 C   s
   || _ d S Nr   )selfr    r   T/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/triton/common/backend.py__init__   s    zBaseBackend.__init__c                 C   s   t dS )zZ
        Custom the arch, extern_libs and stages per backend specific requirement
        NNotImplementedError)r
   archZextern_libsZstagesr   r   r   
add_stages   s    zBaseBackend.add_stagesc                 C   s   t dS )zZ
        Custom the ir, module, metadata and asm per backend specific requirement
        Nr   )r
   ZirZ
cur_moduleZnext_modulemetadataasmr   r   r   add_meta_info   s    zBaseBackend.add_meta_infoc                 C   s   t dS )z2
        Return a callable to load binary
        Nr   r
   r   r   r   get_load_binary_fn   s    zBaseBackend.get_load_binary_fn)r   c                 C   s   t dS )zW
        Get the backend driver. Please refer to "DriverBase" for more details
        Nr   r   r   r   r   
get_driver#   s    zBaseBackend.get_driverc                 C   s   t dS )z/
        Get stream for current device
        Nr   r   r   r   r   
get_stream)   s    zBaseBackend.get_streamc                 C   s   t d S r   r   r
   Zdevicer   r   r   get_device_properties/   s    z!BaseBackend.get_device_propertiesc                 C   s   t dS )z$
        Get current device
        Nr   r   r   r   r   get_current_device2   s    zBaseBackend.get_current_devicec                 C   s   t dS )z8
        Set current device as the given device
        Nr   r   r   r   r   set_current_device8   s    zBaseBackend.set_current_devicec                 C   s   t d S r   r   r   r   r   r   get_kernel_bin>   s    zBaseBackend.get_kernel_binc                 C   s   t dS )zA
        Generate the launcher stub to launch the kernel
        Nr   )r
   name	signature	constantsr   r   r   make_launcher_stubA   s    zBaseBackend.make_launcher_stubc                 K   s   t dS )z=
        Get the architecture descriptor the backend
        Nr   )r
   kwargsr   r   r   get_architecture_descriptorG   s    z'BaseBackend.get_architecture_descriptorr	   c                 C   s   | |S r   r   )clsr   r   r   r   create_backendM   s    zBaseBackend.create_backend)__name__
__module____qualname__strr   r   r   r   r   r   r   r   r   r   r   r!   r#   classmethodr%   r   r   r   r   r      s   r   	_backendsr   Zbackend_clsc                 C   s   | t kr|| t | < d S r   )r+   r%   r,   r   r   r   register_backendU   s    r-   r	   c                 C   sj   | t krVd|  }tjj|tjdrRztj|tjd W qV tk
rN   Y d S X nd S | t krft |  S d S )Nz...third_party.)package)r+   	importlibutil	find_spec__spec__r   import_module	Exception)r   Zdevice_backend_package_namer   r   r   get_backendZ   s    

r5   c                  C   s   t jt jtt j} t jddt j| ddddg}|D ]x}|dd }t j	|r>t j
|r>tj|d	gtjd
}|d k	r>tjd|dtjd}|d k	r>||df  S q>tdd S )NZTRITON_PTXAS_PATH Zthird_partycudabinptxas r   z	--version)stderrz.*release (\d+\.\d+).*zutf-8)flags   zCannot find ptxas)ospathjoindirname__file__pardirenvirongetsplitexistsisfile
subprocesscheck_outputSTDOUTresearchdecode	MULTILINEgroupRuntimeError)base_dirpathsr9   Z	ptxas_binresultversionr   r   r   path_to_ptxasg   s    rV   )	functoolsr/   importlib.utilr>   rL   rI   typingr   Zruntime.driverr   r   r+   r)   __annotations__typer-   r5   	lru_cacherV   r   r   r   r   <module>   s    E