o
    biu                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ e eZdZdZe ded	efd
dZedZG dd deZdS )    N)	lru_cache)	find_spec)ListOptionalTuple)AcceleratorManagerHABANA_VISIBLE_MODULES-RAY_EXPERIMENTAL_NOSET_HABANA_VISIBLE_MODULESpackage_namereturnc                 C   s$   zt | d uW S  ty   Y dS w )NF)r   ModuleNotFoundError)r
    r   Q/home/ubuntu/.local/lib/python3.10/site-packages/ray/_private/accelerators/hpu.pyis_package_present   s
   r   habana_frameworksc                   @   s   e Zd ZdZedefddZedefddZedee	e  fddZ
edefd	d
ZedefddZedee fddZededeeee f fddZede	e ddfddZdS )HPUAcceleratorManagerzIntel Habana(HPU) accelerators.r   c                   C   s   dS )NHPUr   r   r   r   r   get_resource_name      z'HPUAcceleratorManager.get_resource_namec                   C   s   t S )N)HABANA_VISIBLE_DEVICES_ENV_VARr   r   r   r   #get_visible_accelerator_ids_env_var!   r   z9HPUAcceleratorManager.get_visible_accelerator_ids_env_varc                  C   s8   t jt d } | d u rd S | dkrg S t| dS )N ,)osenvirongetr   r   listsplit)hpu_visible_devicesr   r   r   +get_current_process_visible_accelerator_ids%   s   zAHPUAcceleratorManager.get_current_process_visible_accelerator_idsc                  C   s8   t rddlm  m}  |  r|  S td dS dS )zAttempt to detect the number of HPUs on this machine.
        Returns:
            The number of HPUs if any were detected, otherwise 0.
        r   NzHPU devices not available)HPU_PACKAGE_AVAILABLEhabana_frameworks.torch.hputorchhpuis_availabledevice_countlogginginfo	torch_hpur   r   r   !get_current_node_num_accelerators3   s   
z7HPUAcceleratorManager.get_current_node_num_acceleratorsc                  C   s2   t rddlm  m}  |  r|  rdS dS dS )z}Attempt to check if HPU backend is initialized.
        Returns:
            True if backend initialized else False.
        r   NTF)r    r!   r"   r#   r$   is_initializedr(   r   r   r   r+   D   s   z$HPUAcceleratorManager.is_initializedc                  C   s6   t  rddlm  m}  d|   S td dS )zAttempt to detect the HPU family type.
        Returns:
            The device name (GAUDI, GAUDI2) if detected else None.
        r   NzIntel-zHPU type cannot be detected)r   r+   r!   r"   r#   get_device_namer&   r'   r(   r   r   r   !get_current_node_accelerator_typeT   s
   
z7HPUAcceleratorManager.get_current_node_accelerator_typequantityc                 C   s.   t | tr|  sdt  d|  dfS dS )NFzA resource quantity must be whole numbers. The specified quantity z is invalid.)TN)
isinstancefloat
is_integerr   r   )r.   r   r   r   "validate_resource_request_quantityb   s   
z8HPUAcceleratorManager.validate_resource_request_quantityvisible_hpu_devicesNc                 C   s2   t jtrd S ddd | D t jt < d S )Nr   c                 S   s   g | ]}t |qS r   )str).0ir   r   r   
<listcomp>y   s    zUHPUAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   r   r   $NOSET_HABANA_VISIBLE_MODULES_ENV_VARjoinr   r   )r3   r   r   r   +set_current_process_visible_accelerator_idsp   s   zAHPUAcceleratorManager.set_current_process_visible_accelerator_ids)__name__
__module____qualname____doc__staticmethodr4   r   r   r   r   r   intr*   boolr+   r-   r0   r   r2   r:   r   r   r   r   r      s4    r   )r&   r   	functoolsr   importlib.utilr   typingr   r   r   %ray._private.accelerators.acceleratorr   	getLoggerr;   loggerr   r8   r4   rA   r   r    r   r   r   r   r   <module>   s    
