
      i                         d dl 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
mZ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y)    )OptionalN)override)Accelerator)_XLA_AVAILABLE)CheckpointIO	PrecisionXLAPrecision)XLACheckpointIO)_StrategyRegistry)SingleDeviceStrategy)_DEVICEc            
       .    e Zd ZdZ	 	 	 ddedee   dee   dee   f fdZ	e
edefd	              Zej                  ed
ee   ddfd              Ze
edefd              Zej                  edee   ddfd              Zeededdfd              Z xZS )SingleDeviceXLAStrategyz-Strategy for training on a single XLA device.Ndeviceacceleratorcheckpoint_io	precisionc                     t         st        t        t                     t        |t        j
                        r|j                  }dd lmc m	} t        | -  ||j                  |      ||       y )Nr   )r   r   r   r   )r   ModuleNotFoundErrorstr
isinstancetorchr   indextorch_xla.core.xla_modelcore	xla_modelsuper__init__
xla_device)selfr   r   r   r   xm	__class__s         {/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/fabric/strategies/single_xla.pyr   z SingleDeviceXLAStrategy.__init__   s\     %c.&9::fell+\\F--#==('	 	 	
    returnc                 Z    | j                   }|t        |t              sJ |S t               S )N)_checkpoint_ior   r
   r    plugins     r#   r   z%SingleDeviceXLAStrategy.checkpoint_io5   s3     $$fo666M  r$   ioc                 R    |t        |t              st        d|       || _        y )NzHThe XLA strategy can only work with the `XLACheckpointIO` plugin, found )r   r
   	TypeErrorr'   )r    r*   s     r#   r   z%SingleDeviceXLAStrategy.checkpoint_io>   s/     >*R"Afgifjkll r$   c                 \    | j                   }|t        |t              sJ |S t        d      S )Nz32-true)
_precisionr   r	   r(   s     r#   r   z!SingleDeviceXLAStrategy.precisionE   s3     fl333MI&&r$   c                 R    |t        |t              st        d|       || _        y )NzEThe XLA strategy can only work with the `XLAPrecision` plugin, found )r   r	   r,   r.   )r    r   s     r#   r   z!SingleDeviceXLAStrategy.precisionN   s/      I|)Lcdmcnopp#r$   strategy_registryc                 @    |j                  d| | j                         y )N
single_xla)description)register__name__)clsr0   s     r#   register_strategiesz+SingleDeviceXLAStrategy.register_strategiesU   s     	""<#,,"Or$   )NNN)r5   
__module____qualname____doc__r   r   r   r
   r	   r   propertyr   r   setterr   r   r   classmethodr   r7   __classcell__)r"   s   @r#   r   r      s*   7
 .237,0

 k*
  0	

 L)
, ! !  ! ! 6 !4 !  !
 '< '  ' $8I#6 $4 $  $
 P4E P$ P  Pr$   r   )typingr   r   typing_extensionsr   lightning.fabric.acceleratorsr   !lightning.fabric.accelerators.xlar   lightning.fabric.pluginsr   r   r	   lightning.fabric.plugins.io.xlar
   lightning.fabric.strategiesr   )lightning.fabric.strategies.single_devicer    lightning.fabric.utilities.typesr   r    r$   r#   <module>rI      s7      & 5 < J J ; 9 J 4<P2 <Pr$   