o
    bZh;                     @   sv   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	 dd Z
dd	 Zed
dG dd dZdd Ze ZdS )    N)	dataclass   )
DriverBase)BaseBackendc                 C   s*   t j| |}t j|}|j| |S )N)	importlibutilspec_from_file_locationmodule_from_specloaderexec_module)namepathspecmodule r   G/var/www/auris/lib/python3.10/site-packages/triton/backends/__init__.py_load_module	   s   r   c                 C   s   g }t | D ]}t| |}t|tr!t||r!t|s!|| qt|dkr5t	d| d|  d| t|dkrHt	d| d|  d| |d S )Nr   zFound 0 concrete subclasses of z in z: r   z Found >1 concrete subclasses of )
dirgetattr
isinstancetype
issubclassinspect
isabstractappendlenRuntimeError)r   Z
base_classretZ	attr_nameattrr   r   r   _find_concrete_subclasses   s   

r   T)frozenc                   @   s&   e Zd ZU dZeed< dZeed< dS )BackendNcompilerdriver)__name__
__module____qualname__r"   r   __annotations__r#   r   r   r   r   r   r!      s   
 r!   c                  C   s   t  } tjt}t|D ]7}tjtj||sq|dr"qt	|tj||d}t	|tj||d}t
t|tt|t| |< q| S )N__zcompiler.pyz	driver.py)dictosr   dirname__file__listdirisdirjoin
startswithr   r!   r   r   r   )backendsrootr   r"   r#   r   r   r   _discover_backends#   s   


r3   )r*   importlib.utilr   r   dataclassesr   r#   r   r"   r   r   r   r!   r3   r1   r   r   r   r   <module>   s    
