
    &`i                         d dl Z d dlmZ d dlmZmZ d dlZd dlZd dlm	c m
Z
 d dlmZ d dlmZ dedefdZ ed	          Zerd dlZ G d
 de          ZdS )    N)	find_spec)ListUnion)!ASCEND_RT_VISIBLE_DEVICES_ENV_VAR)TorchDeviceManagerpackage_namereturnc                 H    	 t          |           d uS # t          $ r Y dS w xY wNF)r   ModuleNotFoundError)r   s    x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/air/_internal/device_manager/npu.pyis_package_presentr      s<    &&d22   uus    
!!	torch_npuc                       e Zd ZdZed             ZdefdZdee	j
                 fdZdee	j
        ef         fdZdefdZd	 Zd
 Zd ZdS )NPUTorchDeviceManagerzAscend NPU device managerc                       t           rdd l} d S d S )Nr   )NPU_TORCH_PACKAGE_AVAILABLEr   )r   s    r   "register_custom_torch_dist_backendz8NPUTorchDeviceManager.register_custom_torch_dist_backend   s&    & 		 	    r	   c                 P    t           sdS t          j                                        S r   )r   torchnpuis_availableselfs    r   r   z"NPUTorchDeviceManager.is_available#   s#    * 	5y%%'''r   c           	         t           r-t          j                                        rd t	          j                                                    t          j                 D             }g }t          |          dk    rt          j                            t          d          }|r|dk    r|                    d          }ng }|D ]O}	 |                    |                    |                     ,# t"          $ r t%          d| d| d          w xY wn|                    d           d	 |D             }nt%          d
          |S )zGets the correct torch device list configured for this process.

        Returns a list of torch NPU devices allocated for the current worker.
        If no NPUs are assigned, then it returns a list with a single CPU device.
        c                 ,    g | ]}t          |          S  )str).0ids     r   
<listcomp>z5NPUTorchDeviceManager.get_devices.<locals>.<listcomp>0   s.        B  r   r    
NoDevFiles,z/ASCEND_RT_VISIBLE_DEVICES set incorrectly. Got z, expected to include zH. Did you override the `ASCEND_RT_VISIBLE_DEVICES` environment variable?c                 <    g | ]}t          j        d |           S )znpu:)r   device)r    	device_ids     r   r"   z5NPUTorchDeviceManager.get_devices.<locals>.<listcomp>O   s+    TTTIu|$69$6$677TTTr   z;Using NPUTorchDeviceManager but torch npu is not available.)r   r   r   r   rayget_runtime_contextget_accelerator_idsray_constantsNPUlenosenvirongetr   splitappendindex
IndexErrorRuntimeError)r   npu_ids
device_idsnpu_visible_strnpu_visible_listnpu_iddevicess          r   get_devicesz!NPUTorchDeviceManager.get_devices)   s    ' $	59+A+A+C+C $	 133GGII!%  G J7||a"$*..1RTV"W"W" *,'F'F'6'<'<S'A'A$$')$% 	 	F"))*:*@*@*H*HIIII%   *4#24 4JP4 4 4  	 !!!$$$TTTTTGGM   s   (C//!Dr'   c                 D    t           j                            |           d S )N)r   r   
set_devicer   r'   s     r   r?   z NPUTorchDeviceManager.set_deviceW   s    	V$$$$$r   c                     dS )z6Validate if the device type support to create a streamTr   r   s    r   supports_streamz%NPUTorchDeviceManager.supports_streamZ   s    tr   c                 @    t           j                            |          S )zCreate a stream on NPU device)r   r   Streamr@   s     r   create_streamz#NPUTorchDeviceManager.create_stream^       y'''r   c                 @    t           j                            |          S )z(Get a torch.stream context on NPU device)r   r   stream)r   rH   s     r   get_stream_contextz(NPUTorchDeviceManager.get_stream_contextb   rF   r   c                 >    t           j                                        S )z!Get current stream for NPU device)r   r   current_streamr   s    r   get_current_streamz(NPUTorchDeviceManager.get_current_streamf   s    y'')))r   N)__name__
__module____qualname____doc__staticmethodr   boolr   r   r   r'   r=   r   intr?   rB   rE   rI   rL   r   r   r   r   r      s        ##  \(d ( ( ( (,T%,/ , , , ,\%u|S'8!9 % % % %    ( ( (( ( (* * * * *r   r   )r/   importlib.utilr   typingr   r   r   r)   ray._private.ray_constants_privater,   ray._private.accelerators.npur   5ray.air._internal.device_manager.torch_device_managerr   r   rR   r   r   r   r   r   r   r   <module>rZ      s   				 $ $ $ $ $ $          



 2 2 2 2 2 2 2 2 2 K K K K K K T T T T T TS T     10==   M* M* M* M* M*. M* M* M* M* M*r   