
    i/0                        U d Z ddlZddlZddlZddl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 i Zeeef   ed
<   d&dedz  ddfdZd&dedz  ddfdZd&dedz  defdZdededz  fdZ G d de      Z G d d      Zedeez  deej<                     fd       Zddde e   dededz  defdZ!dddddddddedededz  d ed!ed"ededz  d#e e   dz  d$edz  dee   fd%Z"y)'u	  Utility helpers to handle progress bars in `huggingface_hub`.

Example:
    1. Use `huggingface_hub.utils.tqdm` as you would use `tqdm.tqdm` or `tqdm.auto.tqdm`.
    2. To disable progress bars, either use `disable_progress_bars()` helper or set the
       environment variable `HF_HUB_DISABLE_PROGRESS_BARS` to 1.
    3. To re-enable progress bars, use `enable_progress_bars()`.
    4. To check whether progress bars are disabled, use `are_progress_bars_disabled()`.

NOTE: Environment variable `HF_HUB_DISABLE_PROGRESS_BARS` has the priority.

Example:
    ```py
    >>> from huggingface_hub.utils import are_progress_bars_disabled, disable_progress_bars, enable_progress_bars, tqdm

    # Disable progress bars globally
    >>> disable_progress_bars()

    # Use as normal `tqdm`
    >>> for _ in tqdm(range(5)):
    ...    pass

    # Still not showing progress bars, as `disable=False` is overwritten to `True`.
    >>> for _ in tqdm(range(5), disable=False):
    ...    pass

    >>> are_progress_bars_disabled()
    True

    # Re-enable progress bars globally
    >>> enable_progress_bars()

    # Progress bar will be shown !
    >>> for _ in tqdm(range(5)):
    ...   pass
    100%|███████████████████████████████████████| 5/5 [00:00<00:00, 117817.53it/s]
    ```

Group-based control:
    ```python
    # Disable progress bars for a specific group
    >>> disable_progress_bars("peft.foo")

    # Check state of different groups
    >>> assert not are_progress_bars_disabled("peft"))
    >>> assert not are_progress_bars_disabled("peft.something")
    >>> assert are_progress_bars_disabled("peft.foo"))
    >>> assert are_progress_bars_disabled("peft.foo.bar"))

    # Enable progress bars for a subgroup
    >>> enable_progress_bars("peft.foo.bar")

    # Check if enabling a subgroup affects the parent group
    >>> assert are_progress_bars_disabled("peft.foo"))
    >>> assert not are_progress_bars_disabled("peft.foo.bar"))

    # No progress bar for `name="peft.foo"`
    >>> for _ in tqdm(range(5), name="peft.foo"):
    ...     pass

    # Progress bar will be shown for `name="peft.foo.bar"`
    >>> for _ in tqdm(range(5), name="peft.foo.bar"):
    ...     pass
    100%|███████████████████████████████████████| 5/5 [00:00<00:00, 117817.53it/s]

    ```
    N)Iterator)contextmanagernullcontext)Path)ContextManager)tqdm   )HF_HUB_DISABLE_PROGRESS_BARSprogress_bar_statesnamereturnc                    t         du rt        j                  d       y| t        j	                          dt        d<   yt        D cg c]  }|j                  |  d      s| }}|D ]	  }t        |=  dt        | <   yc c}w )a4  
    Disable progress bars either globally or for a specified group.

    This function updates the state of progress bars based on a group name.
    If no group name is provided, all progress bars are disabled. The operation
    respects the `HF_HUB_DISABLE_PROGRESS_BARS` environment variable's setting.

    Args:
        name (`str`, *optional*):
            The name of the group for which to disable the progress bars. If None,
            progress bars are disabled globally.

    Raises:
        Warning: If the environment variable precludes changes.
    FzlCannot disable progress bars: environment variable `HF_HUB_DISABLE_PROGRESS_BARS=0` is set and has priority.N_global.r
   warningswarnr   clear
startswithr   keykeys_to_removes      k/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/huggingface_hub/utils/tqdm.pydisable_progress_barsr   l   s      $u,z	
 	|!!#).I&)<[#RVQWWXz@Z#[[! 	)C#C(	)$)D! \   A?!A?c                    t         du rt        j                  d       y| t        j	                          dt        d<   yt        D cg c]  }|j                  |  d      s| }}|D ]	  }t        |=  dt        | <   yc c}w )a  
    Enable progress bars either globally or for a specified group.

    This function sets the progress bars to enabled for the specified group or globally
    if no group is specified. The operation is subject to the `HF_HUB_DISABLE_PROGRESS_BARS`
    environment setting.

    Args:
        name (`str`, *optional*):
            The name of the group for which to enable the progress bars. If None,
            progress bars are enabled globally.

    Raises:
        Warning: If the environment variable precludes changes.
    TzkCannot enable progress bars: environment variable `HF_HUB_DISABLE_PROGRESS_BARS=1` is set and has priority.Nr   r   r   r   s      r   enable_progress_barsr      s      $t+y	
 	|!!#)-I&)<[#RVQWWXz@Z#[[! 	)C#C(	)$(D! \r   c                     t         du ry| t        j                  dd       S | r8| t        v r
t        |     S dj                  | j	                  d      dd       } | r8t        j                  dd       S )a  
    Check if progress bars are disabled globally or for a specific group.

    This function returns whether progress bars are disabled for a given group or globally.
    It checks the `HF_HUB_DISABLE_PROGRESS_BARS` environment variable first, then the programmatic
    settings.

    Args:
        name (`str`, *optional*):
            The group name to check; if None, checks the global setting.

    Returns:
        `bool`: True if progress bars are disabled, False otherwise.
    TNr   r   )r
   r   getjoinsplitr   s    r   are_progress_bars_disabledr$      s~     $t+|&**9d;;;
&&*4000xx

3,- 
 #&&y$777    	log_levelc                 ^    | t         j                  k(  ryt        j                  d      dk(  ryy)z
    Determine if tqdm progress bars should be disabled based on logging level and environment settings.

    see https://github.com/huggingface/huggingface_hub/pull/2000 and https://github.com/huggingface/huggingface_hub/pull/2698.
    TTQDM_POSITIONz-1FN)loggingNOTSETosgetenv)r&   s    r   is_tqdm_disabledr-      s*     GNN"	yy!T)r%   c                   6     e Zd ZdZ fdZdeddf fdZ xZS )r   z
    Class to override `disable` argument in case progress bars are globally disabled.

    Taken from https://github.com/tqdm/tqdm/issues/619#issuecomment-619639324.
    c                 h    |j                  dd       }t        |      rd|d<   t        |   |i | y )Nr   Tdisable)popr$   super__init__)selfargskwargsr   	__class__s       r   r3   ztqdm.__init__   s7    zz&$'%d+ $F9$)&)r%   attrr   Nc                 P    	 t         |   |       y# t        $ r	 |dk7  r Y yw xY w)zBFix for https://github.com/huggingface/huggingface_hub/issues/1603_lockN)r2   __delattr__AttributeError)r4   r8   r7   s     r   r;   ztqdm.__delattr__   s3    	G% 	w 	s    %%)__name__
__module____qualname____doc__r3   strr;   __classcell__)r7   s   @r   r   r      s%    *   r%   r   c                   @    e Zd ZdZd Zd Zd Zd	deez  dz  ddfdZ	y)
silent_tqdmz#Fake tqdm object that does nothing.c                      y N )r4   r5   r6   s      r   r3   zsilent_tqdm.__init__       r%   c                     | S rF   rG   )r4   s    r   	__enter__zsilent_tqdm.__enter__   s    r%   c                      y rF   rG   )r4   exc_type	exc_value	tracebacks       r   __exit__zsilent_tqdm.__exit__   rH   r%   nNr   c                      y rF   rG   )r4   rP   s     r   updatezsilent_tqdm.update   rH   r%   )   )
r=   r>   r?   r@   r3   rJ   rO   intfloatrR   rG   r%   r   rD   rD      s0    -ed* 4 r%   rD   pathc              #   v  K   t        | t              rt        |       } | j                  d      5 }| j	                         j
                  }t        dd|d| j                        |j                  d
dt        dz  dt        ffd	}||_        | j                          ddd       y# 1 sw Y   yxY ww)uQ  
    Open a file as binary and wrap the `read` method to display a progress bar when it's streamed.

    First implemented in `transformers` in 2019 but removed when switched to git-lfs. Used in `huggingface_hub` to show
    progress bar when uploading an LFS file to the Hub. See github.com/huggingface/transformers/pull/2078#discussion_r354739608
    for implementation details.

    Note: currently implementation handles only files stored on disk as it is the most common use case. Could be
          extended to stream any `BinaryIO` object but we might have to debug some corner cases.

    Example:
    ```py
    >>> with tqdm_stream_file("config.json") as f:
    >>>     httpx.put(url, data=f)
    config.json: 100%|█████████████████████████| 8.19k/8.19k [00:02<00:00, 3.72kB/s]
    ```
    rbBTr   )unit
unit_scaletotalinitialdescsizeNr   c                 L     |       }j                  t        |             |S rF   )rR   len)r_   dataf_readpbars     r   _inner_readz%tqdm_stream_file.<locals>._inner_read  s!    $<DKKD	"Kr%   )r   )
isinstancerA   r   openstatst_sizer   r   readrT   bytesclose)rV   f
total_sizere   rc   rd   s       @@r   tqdm_stream_filero      s     & $Dz	4 AYY[((

 	cDj 	% 	
 

+  s   -B9A3B-$	B9-B62B9r#   clsc                 ~    t        | t              rt        | t              s | di |S t	        |      } | d||d|S )a  Create a progress bar.

    For our `tqdm` subclass (or subclasses of it): respects all disable signals
    (`HF_HUB_DISABLE_PROGRESS_BARS`, `disable_progress_bars()`, log level) and uses
    `disable=None` for TTY auto-detection (see https://github.com/huggingface/huggingface_hub/pull/2000),
    unless `TQDM_POSITION=-1` forces bars on (https://github.com/huggingface/huggingface_hub/pull/2698).

    For other classes: does not inject `disable` or `name`. the custom class is fully
    responsible for its own behavior. Vanilla tqdm defaults to `disable=False` (bar shows).
    Omits `name` which vanilla tqdm rejects with `TqdmKeyError`. See https://github.com/huggingface/huggingface_hub/issues/4050.
    )r0   r   rG   )rf   type
issubclassr   r-   )rp   r&   r   r6   r0   s        r   _create_progress_barrt   *  sD     sD!jd&;}V} y)G4wT4V44r%   rY   T)r\   r]   rZ   r[   r   
tqdm_class	_tqdm_barr^   r\   r]   rZ   r[   ru   rv   c        	   
      R    |t        |      S t        |xs t        |||||||       S )N)rp   r&   r   rZ   r[   r\   r]   r^   )r   rt   r   )	r^   r&   r\   r]   rZ   r[   r   ru   rv   s	            r   _get_progress_bar_contextrx   @  sA     9%%
  $	 	r%   rF   )#r@   ior)   r+   r   collections.abcr   
contextlibr   r   pathlibr   typingr   	tqdm.autor   old_tqdm	constantsr
   r   dictrA   bool__annotations__r   r   r$   rT   r-   rD   BufferedReaderro   rr   rt   rx   rG   r%   r   <module>r      s  BH 
  	  $ 2  ! & 4 (* T#t)_ )*d
 *d *@)sTz )T )@8S4Z 84 8:
 
t 
8 ,   *4#: *(23D3D*E * *Z UY 5h 5C 5sTz 5go 54 (,!
  :	
    * X% d{ Dr%   