o
    8wi                     @   s~   d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ G dd deZd	ee fd
dZdS )    N)	lru_cache)OptionalUnion)override)Accelerator)_AcceleratorRegistryc                   @   s   e Zd ZdZedejddfddZedddZe	ed	e
eeee f deee  fd
dZe	ed	e
eeee f deej fddZe	edefddZe	eeddefddZeededdfddZdS )MPSAcceleratorzAccelerator for Metal Apple Silicon GPU devices.

    .. warning::  Use of this accelerator beyond import and instantiation is experimental.

    devicereturnNc                 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   ^/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/lightning_fabric/accelerators/mps.pysetup_device!   s   
zMPSAccelerator.setup_devicec                 C   s   d S )Nr   )r   r   r   r   teardown+   s   zMPSAccelerator.teardowndevicesc                 C   s   ddl m} || ddS )z!Accelerator device parsing logic.r   )_parse_gpu_idsT)include_mps)(lightning_fabric.utilities.device_parserr   )r   r   r   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>=   s    z7MPSAccelerator.get_parallel_devices.<locals>.<listcomp>)r   r   rangelen)r   parsed_devicesr   r   r   get_parallel_devices7   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_count?   s   z MPSAccelerator.auto_device_countr    c                  C   s.   t dddk} |  otjj ot dv S )zOMPS is only available on a machine with the ARM-based Apple Silicon processors.DISABLE_MPS01)armarm64)osgetenvr   backendsr   is_availableplatform	processor)mps_disabledr   r   r   r*   E   s   zMPSAccelerator.is_availableaccelerator_registryc                 C   s   |j d| | jd d S )Nr   )description)register__name__)clsr.   r   r   r   register_acceleratorsM   s
   
z$MPSAccelerator.register_accelerators)r
   N)r1   
__module____qualname____doc__r   r   r	   r   r   staticmethodr   intstrlistr   r   r   r!   r   boolr*   classmethodr   r3   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_gpusW   s   r=   )r'   r+   	functoolsr   typingr   r   r   typing_extensionsr   )lightning_fabric.accelerators.acceleratorr   &lightning_fabric.accelerators.registryr   r   r:   r8   r=   r   r   r   r   <module>   s   =