
      i                         d dl Z 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 d dlmZ d d	lmZ  e j(                  e      Z G d
 de      Zy)    N)AnyOptional)apply_to_collection)RequirementCache)override)_XLA_AVAILABLE)TorchCheckpointIO)get_filesystem)_PATHc            
       d     e Zd ZdZdededdf fdZeddeeef   de	d	e
e   ddfd
       Z xZS )XLACheckpointIOzCheckpointIO that utilizes ``xm.save`` to save checkpoints for TPU training strategies.

    .. warning::  This is an :ref:`experimental <versioning:Experimental API>` feature.

    argskwargsreturnNc                 `    t         st        t        t                     t        |   |i | y N)r   ModuleNotFoundErrorstrsuper__init__)selfr   r   	__class__s      t/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/fabric/plugins/io/xla.pyr   zXLACheckpointIO.__init__&   s(    %c.&9::$)&)    
checkpointpathstorage_optionsc                    |#t        d| j                  j                   d      t        |      }|j	                  t
        j                  j                  |      d       t        d      r#ddl	m
}m}m} t        |||f|j                        }ddlmc m} |j%                  |d	      }	t&        j)                  d
|        t+        j,                  |	|       y)a|  Save model/training states as a checkpoint file through state-dump and file-write.

        Args:
            checkpoint: dict containing model and trainer state
            path: write-target path
            storage_options: not used in ``XLACheckpointIO.save_checkpoint``

        Raises:
            TypeError:
                If ``storage_options`` arg is passed in

        Nze`Trainer.save_checkpoint(..., storage_options=...)` with `storage_options` arg is not supported for `za`. Please implement your custom `CheckpointIO` to define how you'd like to use `storage_options`.T)exist_ok	omegaconfr   )
DictConfig
ListConfig	OmegaConf)convertzSaving checkpoint: )	TypeErrorr   __name__r
   makedirsosr   dirnamer   r    r!   r"   r#   r   to_containertorch_xla.core.xla_modelcore	xla_model_maybe_convert_to_cpulogdebugtorchsave)
r   r   r   r   fsr!   r"   r#   xmcpu_datas
             r   save_checkpointzXLACheckpointIO.save_checkpoint+   s     &**...*A*A)B CFF 
 D!
BGGOOD)D9K(CC,Z*j9QS\SiSijJ--++J+E		'v./

8T"r   r   )r&   
__module____qualname____doc__r   r   r   dictr   r   r   r6   __classcell__)r   s   @r   r   r      sb    *c *S *T *
 #$sCx. # #X`adXe #qu # #r   r   )loggingr(   typingr   r   r1   #lightning_utilities.core.apply_funcr    lightning_utilities.core.importsr   typing_extensionsr   !lightning.fabric.accelerators.xlar   $lightning.fabric.plugins.io.torch_ior	   #lightning.fabric.utilities.cloud_ior
    lightning.fabric.utilities.typesr   	getLoggerr&   r/   r    r   r   <module>rG      sG     	    C = & < B > 2g!+#' +#r   