a
    d                     @   sr   d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlmZ G dd de
Zee dd	d
ZdS )    N)	lru_cache)DictListOptionalUnion)Accelerator)_TORCH_GREATER_EQUAL_1_12c                   @   s   e Zd ZdZejddddZddddZee	e
eee
 f eee
  d	d
dZee	e
eee
 f eej d	ddZee
dddZeededddZeeddddZdS )MPSAcceleratorz0Accelerator for Metal Apple Silicon GPU devices.N)devicereturnc                 C   s   |j dkrtd| ddS )zd
        Raises:
            ValueError:
                If the selected device is not MPS.
        mpszDevice should be MPS, got z	 instead.N)type
ValueError)selfr
    r   j/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lightning_fabric/accelerators/mps.pysetup_device   s    
zMPSAccelerator.setup_devicer   c                 C   s   d S )Nr   )r   r   r   r   teardown$   s    zMPSAccelerator.teardown)devicesr   c                 C   s   ddl m} || dd}|S )z!Accelerator device parsing logic.r   )_parse_gpu_idsT)Zinclude_mps)Z(lightning_fabric.utilities.device_parserr   )r   r   parsed_devicesr   r   r   parse_devices'   s    zMPSAccelerator.parse_devicesc                 C   s,   t | }|dusJ dd tt|D S )z*Gets parallel devices for the Accelerator.Nc                 S   s   g | ]}t d |qS )r   )torchr
   ).0ir   r   r   
<listcomp>4       z7MPSAccelerator.get_parallel_devices.<locals>.<listcomp>)r	   r   rangelen)r   r   r   r   r   get_parallel_devices/   s    
z#MPSAccelerator.get_parallel_devicesc                   C   s   dS )z!Get the devices when set to auto.   r   r   r   r   r   auto_device_count6   s    z MPSAccelerator.auto_device_countr!   c                   C   s   t otjj ot dv S )zMPS is only available for certain torch builds starting at torch>=1.12, and is only enabled on a machine
        with the ARM-based Apple Silicon processors.)armarm64)r   r   backendsr   is_availableplatform	processorr   r   r   r   r&   ;   s    zMPSAccelerator.is_available)accelerator_registryr   c                 C   s   |j d| | jjd d S )Nr   )description)register	__class____name__)clsr)   r   r   r   register_acceleratorsD   s
    z$MPSAccelerator.register_accelerators)r-   
__module____qualname____doc__r   r
   r   r   staticmethodr   intstrr   r   r   r    r"   r   boolr&   classmethodr   r/   r   r   r   r   r	      s   	(&r	   r   c                   C   s   t  rdgS g S )z;
    Returns:
        A list of all available MPS GPUs
    r   )r	   r&   r   r   r   r   _get_all_available_mps_gpusM   s    r8   )r'   	functoolsr   typingr   r   r   r   r   Z)lightning_fabric.accelerators.acceleratorr   Z"lightning_fabric.utilities.importsr   r	   r4   r8   r   r   r   r   <module>   s   5