Ë
      çiC  ã                   ó  — d dl 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
 d dlmZ d dlmZ  G d„ d	e
«      Z ed
d«      Z ed«      Z ed«      Zdefd„Zdeeeee   f   deeee   f   fd„Zdeddfd„Zdedeeee   f   fd„Zy)é    N)ÚAnyÚUnion)ÚRequirementCache)Úoverride)ÚAccelerator)Ú_AcceleratorRegistry)Ú_check_data_typec            	       óà  ‡ — e Zd ZdZdededdfˆ f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e   f   fd„«       «       Zeed
eeee   f   deej                     fd„«       «       Zee ej&                  d¬«      defd„«       «       «       Zee ej&                  d¬«      defd„«       «       «       Zeedefd„«       «       Zeededdfd„«       «       Zˆ xZS )ÚXLAAcceleratorz�Accelerator for XLA devices, normally TPUs.

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

    ÚargsÚkwargsÚreturnNc                 óŠ   •— t         st        t        t         «      «      ‚t        «       st	        d«      ‚t        ‰| �  |i |¤Ž y )Nz-The XLA XRT runtime is not supported anymore.)Ú_XLA_AVAILABLEÚModuleNotFoundErrorÚstrÚ_using_pjrtÚRuntimeErrorÚsuperÚ__init__)Úselfr   r   Ú	__class__s      €úv/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_fabric/accelerators/xla.pyr   zXLAAccelerator.__init__!   s9   ø€ ÝÜ%¤c¬.Ó&9Ó:Ð:ÜŒ}ÜÐNÓOÐOÜ‰Ñ˜$Ð) &Ó)ó    Údevicec                  ó   — y ©N© )r   r   s     r   Úsetup_devicezXLAAccelerator.setup_device(   ó   € àr   c                  ó   — y r   r   )r   s    r   ÚteardownzXLAAccelerator.teardown,   r    r   Údevicesc                 ó   — t        | «      S )z!Accelerator device parsing logic.)Ú_parse_tpu_devices©r#   s    r   Úparse_deviceszXLAAccelerator.parse_devices0   s   € ô " 'Ó*Ð*r   c                 óÐ   — t        | «      } t        | t        «      r-t        | «      D �cg c]  }t	        j
                  d|«      ‘Œ c}S t	        j
                  d| d   «      gS c c}w )z*Gets parallel devices for the Accelerator.Úxlar   )r%   Ú
isinstanceÚintÚrangeÚtorchr   )r#   Úis     r   Úget_parallel_devicesz#XLAAccelerator.get_parallel_devices6   sZ   € ô % WÓ-ˆÜ�gœsÔ#Ü49¸'´NÓC±N¨q”E—L‘L ¨Õ*°NÑCÐCä—‘˜U G¨A¡JÓ/Ð0Ð0ùò Ds   ©A#é   )Úmaxsizec                  ó    — t         syt        rddlm}  | j	                  «       S ddlm}  ddddœ}|j                  | j                  «       d«      S )z!Get the devices when set to auto.r   )Útpué   é   )é   é   r5   )r   Ú_XLA_GREATER_EQUAL_2_1Útorch_xla._internalr3   Únum_available_devicesÚtorch_xla.experimentalÚgetÚversion)r3   Údevice_count_on_versions     r   Úauto_device_countz XLAAccelerator.auto_device_countC   sH   € õ ØÝ!Ý/à×,Ñ,Ó.Ð.Ý.à&'¨A°!Ñ"4ÐØ&×*Ñ*¨3¯;©;«=¸!Ó<Ð<r   c                  óf   — 	 t         j                  «       dkD  S # t        t        t        f$ r Y yw xY w)Nr   F)r   r?   Ú
ValueErrorÚAssertionErrorÚOSErrorr   r   r   Úis_availablezXLAAccelerator.is_availableU   s6   € ð	Ü!×3Ñ3Ó5¸Ñ9Ð9øÜœN¬GÐ4ò 	ñ ð	ús   ‚ ™0¯0c                   ó   — y)Nr3   r   r   r   r   ÚnamezXLAAccelerator.name`   s   € ð r   Úaccelerator_registryc                 ó\   — |j                  | j                  «       | | j                  ¬«       y )N)Údescription)ÚregisterrF   Ú__name__)ÚclsrG   s     r   Úregister_acceleratorsz$XLAAccelerator.register_acceleratorse   s*   € ð 	×%Ñ%Ø�H‰H‹JØØŸ™ð 	&õ 	
r   )r   N)rK   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r-   r   r   r"   Ústaticmethodr   r+   r   Úlistr'   r/   Ú	functoolsÚ	lru_cacher?   ÚboolrD   rF   Úclassmethodr   rM   Ú__classcell__)r   s   @r   r   r      s¤  ø„ ñð*˜cð *¨Sð *°Tõ *ð ð 5§<¡<ð °Dò ó ðð òó ðð Øð+˜u S¨#¨t°C©yÐ%8Ñ9ð +¸eÀCÈÈcÉÀNÑ>Sò +ó ó ð+ð Øð1 e¨C°°c±¨NÑ&;ð 1ÀÀUÇ\Á\Ñ@Rò 1ó ó ð1ð Øð €Y×Ñ Ô#ð=˜sò =ó $ó ó ð
=ð ØØ€Y×Ñ Ô#ð˜$ò ó $ó ó ðð Øð�#ò ó ó ðð Øð
Ð9Mð 
ÐRVò 
ó ó ô
r   r   ztorch_xla>=1.13Ú	torch_xlaztorch_xla>=2.1ztorch_xla>=2.5r   c                  ó¢   — t         rddlm}  | j                  «       d uS t        rddlm}  | j                  «       S ddlm} |j                  «       S )Nr   )Úruntime)Úpjrt)Ú_XLA_GREATER_EQUAL_2_5rX   rZ   Údevice_typer8   Ú
using_pjrtr;   r[   )Úxrr[   s     r   r   r   u   s<   € åÝ+à�~‰~Ó tÐ+Ð+åÝ+à�}‰}‹Ðå+à�?‰?ÓÐr   r#   c                 óh   — t        | «       t        | t        «      rt        | «      } t	        | «       | S )a  Parses the TPU devices given in the format as accepted by the
    :class:`~pytorch_lightning.trainer.trainer.Trainer` and :class:`~lightning_fabric.Fabric`.

    Args:
        devices: An int of 1 or string '1' indicates that 1 core with multi-processing should be used
            An int 8 or string '8' indicates that all 8 cores with multi-processing should be used
            A single element list of int or string can be used to indicate the specific TPU core to use.

    Returns:
        A list of tpu cores to be used.

    )r	   r*   r   Ú_parse_tpu_devices_strÚ_check_tpu_devices_validr&   s    r   r%   r%   †   s-   € ô �WÔÜ�'œ3ÔÜ(¨Ó1ˆÜ˜WÔ%Ø€Nr   c                 óö   — t         j                  «       }t        | t        «      r| d|hv s8t        | t        t
        f«      r#t        | «      dk(  rd| d   cxk  r|dz
  k  ry  ny t        d|› d|dz
  › d| ›�«      ‚)Nr0   r   z!`devices` can only be 'auto', 1, z or [<0-z>] for TPUs. Got )r   r?   r*   r+   rR   ÚtupleÚlenrA   )r#   Údevice_counts     r   rb   rb   š   s‘   € Ü!×3Ñ3Ó5€Lô 	�7œCÔ Ø˜˜<Ð(Ñ(ä�g¤¤e˜}Ô-Ü�‹L˜AÒØ�˜‘Ô/˜|¨aÑ/Ò/àñ 0àÜ
Ø
+¨L¨>¸À,ÐQRÑBRÐASÐSdÐelÐdoÐpóð r   c                 ó&  — | j                  «       } 	 t        | «      S # t        $ rj 	 | j                  d«      D �cg c]*  }t	        |«      dkD  sŒt        |j                  «       «      ‘Œ, nc c}w c}cY S # t        $ r t        d| ›�«      ‚w xY ww xY w)NÚ,r   z*Could not parse the selected TPU devices: )Ústripr+   rA   Úsplitre   )r#   Úxs     r   ra   ra   «   sŒ   € Ø�m‰m‹o€GðWÜ�7‹|ÐøÜò Wð	WØ,3¯M©M¸#Ô,>ÓMÑ,> qÄ#ÀaÃ&È1Ã*”C˜Ÿ™›	•NÑ,>ùÔMÒMøÜò 	WÜÐIÈ'ÈÐUÓVÐVð	WúðWús1   ’
 �	B§A4ºA*ÁA*Á)A4Á1BÁ4BÂB)rS   Útypingr   r   r-   Ú lightning_utilities.core.importsr   Útyping_extensionsr   Ú)lightning_fabric.accelerators.acceleratorr   Ú&lightning_fabric.accelerators.registryr   Ú(lightning_fabric.utilities.device_parserr	   r   r   r8   r\   rU   r   r+   r   rR   r%   Úobjectrb   ra   r   r   r   Ú<module>rs      sÇ   ðó ß ã Ý =Ý &å AÝ GÝ EôR
�[ô R
ñl "Ð"3°[ÓA€Ù)Ð*:Ó;Ð Ù)Ð*:Ó;Ð ð�Tó ð"  c¨3°°S±	Ð&9Ñ :ð ¸uÀSÈ$ÈsÉ)À^Ñ?Tó ð( fð °ó ð"W Cð W¨E°#°t¸C±y°.Ñ,Aô Wr   