
    j                          d 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	Zn1# e$ r) 	 ddlmZ d	Zn# e$ r  G d
 d          ZeZdZY nw xY wY nw xY w G d de          ZdS )zFContains a logger to push training logs to the Hub, using Tensorboard.    )Path   )CommitScheduler)EntryNotFoundError)	ModelCard)experimental)SummaryWriterTc                       e Zd ZdS )_DummySummaryWriterN)__name__
__module____qualname__     f/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/huggingface_hub/_tensorboard_logger.pyr   r   &   s        Dr   r   Fc                        e Zd ZdZed fd            Zddddddddddd	
d
ededz  deez  de	dedz  dedz  de	dz  dedz  de
e         ez  dz  de
e         ez  dz  dedz  f fdZ fdZ xZS )HFSummaryWritera  
    Wrapper around the tensorboard's `SummaryWriter` to push training logs to the Hub.

    Data is logged locally and then pushed to the Hub asynchronously. Pushing data to the Hub is done in a separate
    thread to avoid blocking the training script. In particular, if the upload fails for any reason (e.g. a connection
    issue), the main script will not be interrupted. Data is automatically pushed to the Hub every `commit_every`
    minutes (default to every 5 minutes).

    > [!WARNING]
    > `HFSummaryWriter` is experimental. Its API is subject to change in the future without prior notice.

    Args:
        repo_id (`str`):
            The id of the repo to which the logs will be pushed.
        logdir (`str`, *optional*):
            The directory where the logs will be written. If not specified, a local directory will be created by the
            underlying `SummaryWriter` object.
        commit_every (`int` or `float`, *optional*):
            The frequency (in minutes) at which the logs will be pushed to the Hub. Defaults to 5 minutes.
        squash_history (`bool`, *optional*):
            Whether to squash the history of the repo after each commit. Defaults to `False`. Squashing commits is
            useful to avoid degraded performances on the repo when it grows too large.
        repo_type (`str`, *optional*):
            The type of the repo to which the logs will be pushed. Defaults to "model".
        repo_revision (`str`, *optional*):
            The revision of the repo to which the logs will be pushed. Defaults to "main".
        repo_private (`bool`, *optional*):
            Whether to make the repo private. If `None` (default), the repo will be public unless the organization's default is private. This value is ignored if the repo already exists.
        path_in_repo (`str`, *optional*):
            The path to the folder in the repo where the logs will be pushed. Defaults to "tensorboard/".
        repo_allow_patterns (`list[str]` or `str`, *optional*):
            A list of patterns to include in the upload. Defaults to `"*.tfevents.*"`. Check out the
            [upload guide](https://huggingface.co/docs/huggingface_hub/guides/upload#upload-a-folder) for more details.
        repo_ignore_patterns (`list[str]` or `str`, *optional*):
            A list of patterns to exclude in the upload. Check out the
            [upload guide](https://huggingface.co/docs/huggingface_hub/guides/upload#upload-a-folder) for more details.
        token (`str`, *optional*):
            Authentication token. Will default to the stored token. See https://huggingface.co/settings/token for more
            details
        kwargs:
            Additional keyword arguments passed to `SummaryWriter`.

    Examples:
    ```diff
    # Taken from https://pytorch.org/docs/stable/tensorboard.html
    - from torch.utils.tensorboard import SummaryWriter
    + from huggingface_hub import HFSummaryWriter

    import numpy as np

    - writer = SummaryWriter()
    + writer = HFSummaryWriter(repo_id="username/my-trained-model")

    for n_iter in range(100):
        writer.add_scalar('Loss/train', np.random.random(), n_iter)
        writer.add_scalar('Loss/test', np.random.random(), n_iter)
        writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
        writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
    ```

    ```py
    >>> from huggingface_hub import HFSummaryWriter

    # Logs are automatically pushed every 15 minutes (5 by default) + when exiting the context manager
    >>> with HFSummaryWriter(repo_id="test_hf_logger", commit_every=15) as logger:
    ...     logger.add_scalar("a", 1)
    ...     logger.add_scalar("b", 2)
    ```
    returnc                 r    t           st          d          t                                          |           S )NzvYou must have `tensorboard` installed to use `HFSummaryWriter`. Please run `pip install --upgrade tensorboardX` first.)is_summary_writer_availableImportErrorsuper__new__)clsargskwargs	__class__s      r   r   zHFSummaryWriter.__new__t   s:    * 	(   wws###r   N   Ftensorboardz*.tfevents.*)
logdircommit_everysquash_history	repo_typerepo_revisionrepo_privatepath_in_reporepo_allow_patternsrepo_ignore_patternstokenrepo_idr    r!   r"   r#   r$   r%   r&   r'   r(   r)   c       
         f    t                      j        dd|i| t          | j        t                    s-t          d| j         dt          | j                   d          ||dk    rt          | j                  j        }n2|	                    d          dz   t          | j                  j        z   }t          | j        |||||||	|
||          | _        | j        j        | _        | j        j        | _        | j        j        | _        	 t!          j        | j        | j                  }n# t$          $ r t!          d          }Y nw xY w|j                            d	g           }d
|vrB|                    d
           ||j        d	<   |                    | j        | j                   d S d S )Nr    z%`self.logdir` must be a string. Got 'z
' of type . /)folder_pathr&   r*   r#   revisionprivater)   allow_patternsignore_patternseveryr"   )repo_id_or_pathr#   tagszhf-summary-writer)r*   r#   r   )r   __init__
isinstancer    str
ValueErrortyper   namestripr   	schedulerr*   r#   r0   r$   r   loadr   datagetappendpush_to_hub)selfr*   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r   cardr6   r   s                  r   r7   zHFSummaryWriter.__init__}   s   " 	111&111 $+s++ 	rpT[pp\`aeal\m\mpppqqq <2#5#5,,1LL'--c22S84;L;L;QQL )%" .0)
 
 
 ~-1!^4	!>$,$.YYYDD! 	! 	! 	!R==DDD	!y}}VR((d**KK+,,, $DIfT\T^LLLLL +*s    D1 1EEc                     t                                          |||           | j                                        }|                                 dS )zLPush to hub in a non-blocking way when exiting the logger's context manager.N)r   __exit__r>   triggerresult)rD   exc_typeexc_valexc_tbfuturer   s        r   rG   zHFSummaryWriter.__exit__   sC    7F333''))r   )r   r   )r   r   r   __doc__r   r   r9   intfloatboollistr7   rG   __classcell__)r   s   @r   r   r   -   sm       D DL $ $ $ $ $ \$ "$%$ $$($(#06D7; :M :M :M:M d
	:M
 Ek:M :M ::M Tz:M Tk:M Dj:M "#Y_t3:M #3i#o4:M Tz:M :M :M :M :M :Mx        r   r   N)rN   pathlibr   _commit_schedulerr   errorsr   repocardr   utilsr   tensorboardXr	   _RuntimeSummaryWriterr   r   torch.utils.tensorboardr   r   r   r   r   <module>r\      s[   M L       . . . . . . & & & & & &            ,CCCCCC"& , , ,
,RRRRRR&*## , , ,	 	 	 	 	 	 	 	 !4&+###,,P P P P P+ P P P P Ps/   + A:AAAAAA