o
    $i?                     @   s^   d dl Z d dlZd dlZd dlmZmZmZ d dlmZ e	e
ZdZdZG dd deZdS )    N)ListOptionalTuple)AcceleratorManagerASCEND_RT_VISIBLE_DEVICES0RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICESc                   @   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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 )NPUAcceleratorManagerzAscend NPU accelerators.returnc                   C      dS )NNPU r   r   r   Z/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/_private/accelerators/npu.pyget_resource_name      z'NPUAcceleratorManager.get_resource_namec                   C   s   t S )N)!ASCEND_RT_VISIBLE_DEVICES_ENV_VARr   r   r   r   #get_visible_accelerator_ids_env_var   r   z9NPUAcceleratorManager.get_visible_accelerator_ids_env_varc                  C   sD   t jt d } | d u rd S | dkrg S | dkrg S t| dS )N 
NoDevFiles,)osenvirongetr   r   listsplit)ascend_visible_devicesr   r   r   +get_current_process_visible_accelerator_ids   s   zANPUAcceleratorManager.get_current_process_visible_accelerator_idsc               
   C   s   zddl } | j \}}|dkr|W S W n ty, } ztd| W Y d}~nd}~ww z
td}t|W S  tyP } ztd| W Y d}~dS d}~ww )zAttempt to detect the number of NPUs on this machine.

        NPU chips are represented as devices within `/dev/`, either as `/dev/davinci?`.

        Returns:
            The number of NPUs if any were detected, otherwise 0.
        r   NzCould not import AscendCL: %sz/dev/davinci[0-9]*z#Failed to detect number of NPUs: %s)aclrtget_device_count	Exceptionloggerdebuggloblen)r   device_countrete	npu_filesr   r   r   !get_current_node_num_accelerators,   s$   	

z7NPUAcceleratorManager.get_current_node_num_acceleratorsc                  C   s2   z	ddl } |  W S  ty   td Y dS w )zGet the type of the Ascend NPU on the current node.

        Returns:
            A string of the type, such as "Ascend910A", "Ascend910B", "Ascend310P1".
        r   NzFailed to detect NPU type.)r   get_soc_namer   r    	exception)r   r   r   r   !get_current_node_accelerator_typeE   s   
z7NPUAcceleratorManager.get_current_node_accelerator_typequantityc                 C   r
   )N)TNr   )r,   r   r   r   "validate_resource_request_quantityT   s   z8NPUAcceleratorManager.validate_resource_request_quantityvisible_npu_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>c   s    zUNPUAcceleratorManager.set_current_process_visible_accelerator_ids.<locals>.<listcomp>)r   r   r   'NOSET_ASCEND_RT_VISIBLE_DEVICES_ENV_VARjoinr   r   )r.   r   r   r   +set_current_process_visible_accelerator_idsZ   s   zANPUAcceleratorManager.set_current_process_visible_accelerator_ids)__name__
__module____qualname____doc__staticmethodr/   r   r   r   r   r   intr(   r+   floatr   boolr-   r5   r   r   r   r   r      s0    r   )r"   loggingr   typingr   r   r   %ray._private.accelerators.acceleratorr   	getLoggerr6   r    r   r3   r   r   r   r   r   <module>   s    
