
      ix@                     N   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ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 ddlmZ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rddl&m'Z'  ejP                  e)      Z* ed      Z+de,fdZ- G d de      Z.y)zzFabric/PyTorch Lightning logger that enables remote experiment tracking, logging, and artifact management on
lightning.ai.    N)	Namespace)Mapping)datetimetimezone)TYPE_CHECKINGAnyOptionalUnion)RequirementCache)Tensor)Module)override)Loggerrank_zero_experiment)get_filesystem)_add_prefix)rank_zero_only)_PATH)ModelCheckpoint)_scan_checkpoints)
Experimentzlitlogger>=0.1.0returnc                      ddl m}   |        S )z<Create a random experiment name using litlogger's generator.r   _create_name)litlogger.generatorr   r   s    x/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/pytorch/loggers/litlogger.py_create_experiment_namer   .   s    0>    c                      e Zd ZdZdZ	 	 	 	 	 	 	 	 d0dee   dee   dee   deeeef      de	d	e	d
e	dee   ddfdZ
eedefd              Zeedee   fd              Zeedefd              Zeedefd              Zedefd       Zedee   fd       Zeeded   fd              Zeedefd              Zeed1deeef   dee   ddfd              Zee	 d1deeeef   ef   deeeef      ddfd              Zeed1dedee    ddfd              Z!eed2d              Z"eed1d ee   ddfd!              Z#edeeeef   ef   ddfd"       Z$e	 	 	 	 d3ded#ee   d$e	d%ee   deeeef      ddfd&       Z%e	 	 d4d'ed$e	d%ee   ddfd(       Z&ed5d'ed$e	defd)       Z'ed6d#ee   d$e	d%ee   defd*       Z(ed4d'ed$e	d%ee   defd+       Z)ed'eddfd,       Z*d-e+ddfd.Z,d-e+ddfd/Z-y)7	LitLoggerzaLogger that enables remote experiment tracking, logging, and artifact management on lightning.ai.-Nroot_dirname	teamspacemetadata
store_step	log_model	save_logscheckpoint_namer   c	                 J   t        j                  |xs d      | _        |xs
 t               | _        d| _        || _        d| _        d| _        t        | j                        | _
        d| _        |xs i | _        d| _        || _        || _        d| _        i | _        || _        y)a  Initialize the LightningLogger.

        Args:
            root_dir: Folder where logs and metadata are stored (default: ./lightning_logs).
            name: Name of your experiment (defaults to a generated name).
            teamspace: Teamspace name where charts and artifacts will appear.
            metadata: Extra metadata to associate with the experiment as tags.
            log_model: If True, automatically log model checkpoints as artifacts.
            save_logs: If True, capture and upload terminal logs.
            checkpoint_name: Override the base name for logged checkpoints.

        Example::

            from lightning.pytorch import Trainer
            from lightning.pytorch.demos.boring_classes import BoringModel, BoringDataModule
            from lightning.pytorch.loggers.litlogger import LitLogger

            class LoggingModel(BoringModel):
                def training_step(self, batch, batch_idx: int):
                    loss = self.step(batch)
                    # logging the computed loss
                    self.log("train_loss", loss)
                    return {"loss": loss}

            trainer = Trainer(
                max_epochs=10,
                enable_model_summary=False,
                logger=LitLogger("./lightning_logs", name="boring_model")
            )
            model = BoringModel()
            data_module = BoringDataModule()
            trainer.fit(model, data_module)
            trainer.test(model, data_module)

        z./lightning_logsN F)osfspath	_root_dirr   _name_version
_teamspace_sub_dir_prefixr   _fs_step	_metadata	_is_ready
_log_model
_save_logs_checkpoint_callback_logged_model_time_checkpoint_name)	selfr#   r$   r%   r&   r'   r(   r)   r*   s	            r   __init__zLitLogger.__init__:   s    \ 8#A/AB646
'+#!$..1
!R##?C!46 /r   c                     | j                   S )z Gets the name of the experiment.)r1   r?   s    r   r$   zLitLogger.name|   s     zzr   c                     | j                   S )z2Get the experiment version - its time of creation.)r2   rB   s    r   versionzLitLogger.version   s     }}r   c                     | j                   S )zBGets the save directory where the litlogger experiments are saved.)r0   rB   s    r   r#   zLitLogger.root_dir   s     ~~r   c                 n   t         j                  j                  | j                  | j                        }t        | j                  t              r*t         j                  j                  || j                        }t         j                  j                  |      }t         j                  j                  |      S )zThe directory for this run's tensorboard checkpoint.

        By default, it is named ``'version_${self.version}'`` but it can be overridden by passing a string value for the
        constructor's version parameter instead of ``None`` or an int.

        )
r.   pathjoinr#   r$   
isinstancesub_dirstr
expandvars
expanduser)r?   log_dirs     r   rN   zLitLogger.log_dir   so     '',,t}}dii8dllC(ggll7DLL9G''$$W-ww!!'**r   c                     | j                   S N)rN   rB   s    r   save_dirzLitLogger.save_dir   s    ||r   c                     | j                   S )zCGets the sub directory where the TensorBoard experiments are saved.)r4   rB   s    r   rJ   zLitLogger.sub_dir   s     }}r   r   c                    ddl }|j                  |j                  S | j                  sd| _        t        j                  dk(  sJ d       | j
                  r'| j                  j                  | j
                  d       | j                  Jt        j                  t        j                        j                  d      }|j                  dd	      | _        |j!                  | j"                  | j$                  | j&                  | j(                  j+                         D ci c]  \  }}|t-        |       c}}dd| j.                  
       |j                  S c c}}w )z3Returns the underlying litlogger Experiment object.r   NTz+tried to init log dirs in non global_rank=0)exist_okmilliseconds)timespecz+00:00Z)r$   r#   r%   r&   r'   store_created_atr)   )	litlogger
experimentr9   r   rankr#   r6   makedirsrD   r   nowr   utc	isoformatreplacer2   initr1   r0   r3   r8   itemsrK   r;   )r?   rY   	timestampkvs        r   rZ   zLitLogger.experiment   s    	+'''~~!DN""a'V)VV'==HHdmmd;<< X\\2<<n<UI%--h<DM^^oo,0NN,@,@,BC,BDAqaQi,BC!oo 	 	
 ### Ds   Ec                 .    | j                   j                  S rP   )rZ   urlrB   s    r   rg   zLitLogger.url   s     """r   metricsstepc           	         dd l }t        j                  dk(  sJ d       | j                  }|| j                  dz   n|| _        t        || j                  | j                        }|j                         D ci c](  \  }}|t        |t              r|j                         n|* }}}|j                  || j                         y c c}}w )Nr   z-experiment tried to log from global_rank != 0   )ri   )rY   r   r[   rZ   r7   r   r5   LOGGER_JOIN_CHARrb   rI   r   itemlog_metrics)r?   rh   ri   rY   _rd   re   s          r   rn   zLitLogger.log_metrics   s     	""a'X)XX' OO'+|TZZ!^
gt||T5J5JKKR==?[?41a1*Q"7affhQ>?[gDJJ7 \s   7-Cparamsc                     t        |t              r|j                  }|j                  | j                  xs i        || _        yzLog hyperparams.NrI   r   __dict__updater8   )r?   rp   rh   s      r   log_hyperparamszLitLogger.log_hyperparams   s3     fi(__Fdnn*+r   modelinput_arrayc                 <    t        j                  dt        d       y )Nz&LitLogger does not support `log_graph`   )
stacklevel)warningswarnUserWarning)r?   rw   rx   s      r   	log_graphzLitLogger.log_graph   s     	>XYZr   c                      y rP    rB   s    r   savezLitLogger.save   s     	r   statusc                     dd l }|j                  9| j                  r| j                  | j                         |j	                  |       y y )Nr   )rY   rZ   r<   _scan_and_log_checkpointsfinalize)r?   r   rY   s      r   r   zLitLogger.finalize   sC     	+((..t/H/HIv&	 ,r   c                     t        |t              r|j                  }|j                  | j                  xs i        || _        yrr   rs   )r?   rp   s     r   log_metadatazLitLogger.log_metadata  s3     fi(__Fdnn*+r   staging_dirverboserD   c                 N    ddl }| j                  }|j                  |||||       y)a  Save and upload a model object to cloud storage.

        Args:
            model: The model object to save and upload (e.g., torch.nn.Module).
            staging_dir: Optional local directory for staging the model before upload.
            verbose: Whether to show progress bar during upload.
            version: Optional version string for the model.
            metadata: Optional metadata dictionary to store with the model.

        r   N)rY   rZ   r(   )r?   rw   r   r   rD   r&   rY   ro   s           r   r(   zLitLogger.log_model  s&    & 	OOE;(Kr   rG   c                 J    ddl }| j                  }|j                  |||       y)aV  Upload a model file or directory to cloud storage using litmodels.

        Args:
            path: Path to the local model file or directory to upload.
            verbose: Whether to show progress bar during upload. Defaults to False.
            version: Optional version string for the model. Defaults to the experiment version.

        r   N)rY   rZ   log_model_artifactr?   rG   r   rD   rY   ro   s         r   r   zLitLogger.log_model_artifact)  s"     	OO$$T7G<r   c                 H    ddl }| j                  }|j                  ||      S )a?  Download a file artifact from the cloud for this experiment.

        Args:
            path: Path where the file should be saved locally.
            verbose: Whether to print a confirmation message after download. Defaults to True.

        Returns:
            str: The local path where the file was saved.

        r   N)r   )rY   rZ   get_file)r?   rG   r   rY   ro   s        r   r   zLitLogger.get_file=  s&     	OO!!$!88r   c                 H    ddl }| j                  }|j                  |||      S )a@  Download and load a model object using litmodels.

        Args:
            staging_dir: Optional directory where the model will be downloaded.
            verbose: Whether to show progress bar.
            version: Optional version string for the model.

        Returns:
            The loaded model object.

        r   N)rY   rZ   	get_model)r?   r   r   rD   rY   ro   s         r   r   zLitLogger.get_modelN  s%     	OO"";AAr   c                 H    ddl }| j                  }|j                  |||      S )at  Download a model artifact file or directory from cloud storage using litmodels.

        Args:
            path: Path where the model should be saved locally.
            verbose: Whether to show progress bar during download.
            version: Optional version string for the model.

        Returns:
            str: The local path where the model was saved.

        r   N)rY   rZ   get_model_artifactr   s         r   r   zLitLogger.get_model_artifact`  s%     	OO++D'7CCr   c                 F    ddl }| j                  }|j                  |       y)aM  Log a file as an artifact to the Lightning platform.

        The file will be logged in the Teamspace drive,
        under a folder identified by the experiment name.

        Args:
            path: Path to the file to log.

        Example::
            logger = LitLogger(...)
            logger.log_file('config.yaml')

        r   N)rY   rZ   log_file)r?   rG   rY   ro   s       r   r   zLitLogger.log_filer  s     	OO4 r   checkpoint_callbackc                 r    | j                   du ry|j                  dk(  r| j                  |       y|| _        y)z`Called after a checkpoint is saved.

        Logs checkpoints as artifacts if enabled.

        FNr-   )r:   
save_top_kr   r<   )r?   r   s     r   after_save_checkpointzLitLogger.after_save_checkpoint  s8     ??e#))R/**+>?(;D%r   c                 Z   t        || j                        }|D ]  \  }}}}| j                  s| j                  j                  | _        | dt        t        j                  t        j                        j                                }| j                  |d|       || j                  |<    y)zGFind new checkpoints from the callback and log them as model artifacts.r"   T)r   rD   N)r   r=   r>   rZ   r$   intr   r]   r   r^   rc   r   )r?   r   checkpointsrc   	path_ckpt_scoretag
unique_tags           r   r   z#LitLogger._scan_and_log_checkpoints  s    '(;T=T=TU1<-Iy&#(((,(<(<%5#hll8<<&@&J&J&L"M!NOJ##ItZ#P1:D##I. 2=r   )NNNNTFTNrP   )r   N)NFNN)FN)T)NFN).__name__
__module____qualname____doc__rl   r	   r   rK   dictboolr@   propertyr   r$   rD   r#   rN   rQ   rJ   r   rZ   r   rg   r   floatr   rn   r
   r   r   rv   r   r   r   r   r   r   r(   r   r   r   r   r   r   r   r   r   r   r   r!   r!   5   s   k %)"#'-1)-<05/<0 sm<0 C=	<0
 4S>*<0 <0 <0 <0 "#<0 
<0D c    #    #    + +  + #   #   $H\2 $  $> #S #  # 873:#6 8hsm 8W[ 8  8  -1	 d38ni/0	  $sCx.)	  
		   	  [v [HV4D [PT [  [    'x} ' '  '  d38ni/0  
     &*!%-1LL c]L 	L
 #L 4S>*L 
L L.  !%	== = #	=
 
= =& 9S 94 93 9 9  BXc] BD B[cdg[h Btw B B" Ds DT DHUXM Deh D D" !S !T ! !.< <T <";_ ;QU ;r   r!   )/r   loggingr.   r|   argparser   collections.abcr   r   r   typingr   r   r	   r
    lightning_utilities.core.importsr   torchr   torch.nnr   typing_extensionsr   lightning.fabric.loggers.loggerr   r   #lightning.fabric.utilities.cloud_ior   !lightning.fabric.utilities.loggerr   $lightning.fabric.utilities.rank_zeror    lightning.fabric.utilities.typesr   lightning.pytorch.callbacksr   #lightning.pytorch.loggers.utilitiesr   rY   r   	getLoggerr   log_LITLOGGER_AVAILABLErK   r   r!   r   r   r   <module>r      s     	   # ' 6 6 =   & H > 9 ? 2 7 A$g!'(:;  q; q;r   