Ë
      çi÷  ã                   ó„   — 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e«      Zd	ee   fd
„Zy)é    N)Ú	lru_cache)ÚOptionalÚUnion)Úoverride)ÚAccelerator)Ú_AcceleratorRegistryc                   ó|  — e Zd ZdZedej                  ddfd„«       Zedd„«       Ze	ede
eeee   f   deee      fd„«       «       Ze	ede
eeee   f   deej                     fd	„«       «       Ze	edefd
„«       «       Ze	e ed«      defd„«       «       «       Ze	edefd„«       «       Zeededdfd„«       «       Zy)ÚMPSAcceleratorz’Accelerator for Metal Apple Silicon GPU devices.

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

    ÚdeviceÚreturnNc                 ó@   — |j                   dk7  rt        d|› d�«      ‚y)zd
        Raises:
            ValueError:
                If the selected device is not MPS.
        ÚmpszDevice should be MPS, got z	 instead.N)ÚtypeÚ
ValueError)Úselfr   s     úv/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/accelerators/mps.pyÚsetup_devicezMPSAccelerator.setup_device!   s*   € ð �;‰;˜%ÒÜÐ9¸&¸ÀÐKÓLÐLð  ó    c                  ó   — y )N© )r   s    r   ÚteardownzMPSAccelerator.teardown+   s   € àr   Údevicesc                 ó"   — ddl m}  || d¬«      S )z!Accelerator device parsing logic.r   )Ú_parse_gpu_idsT)Úinclude_mps)Ú(lightning_fabric.utilities.device_parserr   )r   r   s     r   Úparse_deviceszMPSAccelerator.parse_devices/   s   € õ 	Lá˜g°4Ô8Ð8r   c                 óª   — t         j                  | «      }|€J ‚t        t        |«      «      D �cg c]  }t	        j
                  d|«      ‘Œ c}S c c}w )z*Gets parallel devices for the Accelerator.r   )r
   r   ÚrangeÚlenÚtorchr   )r   Úparsed_devicesÚis      r   Úget_parallel_devicesz#MPSAccelerator.get_parallel_devices7   sO   € ô (×5Ñ5°gÓ>ˆØÐ)Ð)Ð)Ü05´c¸.Ó6IÔ0JÓKÑ0J¨1”—‘˜U AÕ&Ð0JÑKÐKùÒKs   °Ac                   ó   — y)z!Get the devices when set to auto.é   r   r   r   r   Úauto_device_countz MPSAccelerator.auto_device_count?   s   € ð r   r&   c                  ó¾   — t        j                  dd«      dk(  } |  xr@ t        j                  j                  j                  «       xr t        j                  «       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_disableds    r   r1   zMPSAccelerator.is_availableE   sN   € ô
 —y‘y °Ó4¸Ñ;ˆØÐÒr¤E§N¡N×$6Ñ$6×$CÑ$CÓ$EÒrÌ(×J\ÑJ\ÓJ^ÐbrÐJrÐrr   c                   ó   — y)Nr   r   r   r   r   ÚnamezMPSAccelerator.nameM   s   € ð r   Úaccelerator_registryc                 ó\   — |j                  | j                  «       | | j                  ¬«       y )N)Údescription)Úregisterr6   Ú__name__)Úclsr7   s     r   Úregister_acceleratorsz$MPSAccelerator.register_acceleratorsR   s*   € ð 	×%Ñ%Ø�H‰H‹JØØŸ™ð 	&õ 	
r   )r   N)r;   Ú
__module__Ú__qualname__Ú__doc__r   r!   r   r   r   Ústaticmethodr   ÚintÚstrÚlistr   r   r$   r'   r   Úboolr1   r6   Úclassmethodr   r=   r   r   r   r
   r
      ss  „ ñð ðM 5§<¡<ð M°Dò Mó ðMð òó ðð Øð9˜u S¨#¨t°C©yÐ%8Ñ9ð 9¸hÀtÈCÁyÑ>Qò 9ó ó ð9ð ØðL e¨C°°d¸3±iÐ,?Ñ&@ð LÀTÈ%Ï,É,ÑEWò Ló ó ðLð Øð˜sò ó ó ðð ØÙˆqƒ\ðs˜$ò só ó ó ðsð
 Øð�#ò ó ó ðð Øð
Ð9Mð 
ÐRVò 
ó ó ñ
r   r
   r   c                  ó4   — t         j                  «       rdgS g S )z;
    Returns:
        A list of all available MPS GPUs
    r   )r
   r1   r   r   r   Ú_get_all_available_mps_gpusrH   \   s   € ô
 !×-Ñ-Ô/ˆAˆ3Ð7°RÐ7r   )r.   r2   Ú	functoolsr   Útypingr   r   r!   Útyping_extensionsr   Ú)lightning_fabric.accelerators.acceleratorr   Ú&lightning_fabric.accelerators.registryr   r
   rD   rB   rH   r   r   r   Ú<module>rN      s<   ðó 
Û Ý ß "ã Ý &å AÝ Gô?
�[ô ?
ðD8 T¨#¡Yô 8r   