U
    yÊ¹jµ  ã                   @   sÊ   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 ddlm	Z	 G dd„ de j
d	�ZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZdd„ ZeeƒZdS )é    N)ÚPathé   )Ú_buildé   )Úget_cache_managerc                   @   s.   e Zd ZdZdZedd„ ƒZddœdd„ZdS )	Ú
DriverBaser   r   c                   C   s    t j t j t j t¡¡dd¡S )Nz..Zthird_party)ÚosÚpathÚjoinÚdirnameÚabspathÚ__file__© r   r   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/triton/runtime/driver.pyÚthird_party_dir   s    zDriverBase.third_party_dirN)Úreturnc                 C   s   d S ©Nr   ©Úselfr   r   r   Ú__init__   s    zDriverBase.__init__)Ú__name__Ú
__module__Ú__qualname__ÚCUDAÚHIPÚstaticmethodr   r   r   r   r   r   r      s
   
r   )Ú	metaclassc                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú	CudaUtilsc                    s"   t | dƒstt| ƒ | ¡| _| jS ©NÚinstance)ÚhasattrÚsuperr   Ú__new__r   ©Úcls©Ú	__class__r   r   r"      s    
zCudaUtils.__new__c              
   C   s  t j t j t¡¡}tt j |dd¡ƒ ¡ }t 	| 
d¡¡ ¡ }t|ƒ}d}| |¡}|d krÖt ¡ �j}t j |d¡}t|dƒ�}	|	 |¡ W 5 Q R X td||ƒ}
t|
dƒ�}	|j|	 ¡ |d	d
�}W 5 Q R X W 5 Q R X dd l}|j d|¡}|j |¡}|j |¡ |j| _|j| _d S )NÚbackendszcuda.cúutf-8zcuda_utils.soúmain.cÚwZ
cuda_utilsÚrbT©Úbinaryr   ©r   r	   r   Úrealpathr   r   r
   Ú	read_textÚhashlibÚmd5ÚencodeÚ	hexdigestr   Zget_fileÚtempfileÚTemporaryDirectoryÚopenÚwriter   ÚputÚreadZimportlib.utilÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_moduleZload_binaryZget_device_properties©r   r   ÚsrcÚkeyÚcacheÚfnameÚ
cache_pathZtmpdirZsrc_pathÚfÚsoÚ	importlibÚspecÚmodr   r   r   r   "   s(    

(zCudaUtils.__init__©r   r   r   r"   r   Ú__classcell__r   r   r%   r   r      s   r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú
CudaDriverc                    s"   t | dƒstt| ƒ | ¡| _| jS r   )r    r!   rM   r"   r   r#   r%   r   r   r"   ;   s    
zCudaDriver.__new__c                 C   s   t ƒ | _| j| _d S r   )r   Úutilsr   Úbackendr   r   r   r   r   @   s    zCudaDriver.__init__rK   r   r   r%   r   rM   9   s   rM   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚHIPUtilsc                    s"   t | dƒstt| ƒ | ¡| _| jS r   )r    r!   rP   r"   r   r#   r%   r   r   r"   J   s    
zHIPUtils.__new__c              
   C   s  t j t j t¡¡}tt j |dd¡ƒ ¡ }t 	| 
d¡¡ ¡ }t|ƒ}d}| |¡}|d krÖt ¡ �j}t j |d¡}t|dƒ�}	|	 |¡ W 5 Q R X td||ƒ}
t|
dƒ�}	|j|	 ¡ |d	d
�}W 5 Q R X W 5 Q R X dd l}|j d|¡}|j |¡}|j |¡ |j| _|j| _d S )Nr'   zhip.cr(   zhip_utils.sor)   r*   Z	hip_utilsr+   Tr,   r   r.   r@   r   r   r   r   O   s(    

(zHIPUtils.__init__rK   r   r   r%   r   rP   I   s   rP   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú	HIPDriverc                    s"   t | dƒstt| ƒ | ¡| _| jS r   )r    r!   rQ   r"   r   r#   r%   r   r   r"   h   s    
zHIPDriver.__new__c                 C   s   t ƒ | _| j| _d S r   )rP   rN   r   rO   r   r   r   r   r   m   s    zHIPDriver.__init__rK   r   r   r%   r   rQ   f   s   rQ   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚUnsupportedDriverc                    s"   t | dƒstt| ƒ | ¡| _| jS r   )r    r!   rR   r"   r   r#   r%   r   r   r"   t   s    
zUnsupportedDriver.__new__c                 C   s   d | _ d | _d S r   )rN   rO   r   r   r   r   r   y   s    zUnsupportedDriver.__init__rK   r   r   r%   r   rR   r   s   rR   c                       sL   e Zd Zdd„ Zdd„ Zdd„ Z‡ fdd„Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )Ú	LazyProxyc                 C   s   || _ d | _d S r   ©Ú_init_fnÚ_obj)r   Zinit_fnr   r   r   r   ƒ   s    zLazyProxy.__init__c                 C   s   | j d kr|  ¡ | _ d S r   )rV   rU   r   r   r   r   Ú_initialize_obj‡   s    
zLazyProxy._initialize_objc                 C   s   |   ¡  t| j|ƒS r   )rW   ÚgetattrrV   ©r   Únamer   r   r   Ú__getattr__‹   s    zLazyProxy.__getattr__c                    s2   |dkrt ƒ  ||¡ n|  ¡  t| j||ƒ d S )NrT   )r!   Ú__setattr__rW   ÚsetattrrV   )r   rZ   Úvaluer%   r   r   r\   �   s    zLazyProxy.__setattr__c                 C   s   |   ¡  t| j|ƒ d S r   )rW   ÚdelattrrV   rY   r   r   r   Ú__delattr__–   s    zLazyProxy.__delattr__c                 C   s,   | j d kr"d| jj› d| j› d�S t| j ƒS )Nú<z for z not yet initialized>)rV   r&   r   rU   Úreprr   r   r   r   Ú__repr__š   s    
zLazyProxy.__repr__c                 C   s   |   ¡  t| jƒS r   )rW   ÚstrrV   r   r   r   r   Ú__str__Ÿ   s    zLazyProxy.__str__)r   r   r   r   rW   r[   r\   r`   rc   re   rL   r   r   r%   r   rS   ‚   s   rS   c                  C   s4   dd l } | jjd k	rtƒ S | j ¡ r*tƒ S tƒ S d S )Nr   )ÚtorchÚversionZhiprQ   ÚcudaZis_availablerM   rR   )rf   r   r   r   Úinitialize_driver¤   s    
ri   )Úabcr1   r   r5   Úpathlibr   Zcommon.buildr   rC   r   ÚABCMetar   Úobjectr   rM   rP   rQ   rR   rS   ri   Zdriverr   r   r   r   Ú<module>   s   "
