
    /j?                    n   d dl m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	  ed          d7d	            Z
 G d
 d          Zedk    rjd dlZ ed            e ed          d          D ]Z ej        d            ed            eddd          Z ed          D ]NZ ej        d           e                    d           edz  dk    re                    dedz  dz               Oe                                  ed            edd          Z ed          D ]JZ ej        d            e                    d           ed!z  d"k    re                    edz   d#$           Ke                                  ed%            ed&d'd(d)*          5 Z ed+          D ]*Z ej        d,           e                    d-ez             +	 ddd           n# 1 swxY w Y    ed.           d/ Z e e            d0d1          D ]Z ej        d,            ed2           d3 Z ed4d          Z e            Z ee          D ]B\  ZZ ej        d5           e                    d           e                    d6e            Ce                                 dS dS )8    )annotationsN)	lru_cache)IOAny   )maxsizereturnboolc                 :    dt           j        v pdt           j        v S )z5Check for known non-interactive console environments.GITHUB_ACTIONSRUNPOD_POD_ID)osenviron     [/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/utils/tqdm.pyis_noninteractive_consoler      s     rz)J_
-JJr   c                      e Zd ZdZdZdZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 dFdGd#ZdHd%Z	dId(Z
edJd*            ZdKdLd-ZdMd0ZdNdOd3ZdPdQd6ZdRd7ZdSd9ZdTd:ZdUd;ZdVd=ZdWd>ZdTd?ZdTd@ZdTdAZedXdYdE            ZdS )ZTQDMa  Lightweight zero-dependency progress bar for Ultralytics.

    Provides clean, rich-style progress bars suitable for various environments including Weights & Biases, console
    outputs, and other logging systems. Features zero external dependencies, clean single-line output, rich-style
    progress bars with Unicode block characters, context manager support, iterator protocol support, and dynamic
    description updates.

    Attributes:
        iterable (Any): Iterable to wrap with progress bar.
        desc (str): Prefix description for the progress bar.
        total (int | None): Expected number of iterations.
        disable (bool): Whether to disable the progress bar.
        unit (str): String for units of iteration.
        unit_scale (bool): Auto-scale units flag.
        unit_divisor (int): Divisor for unit scaling.
        leave (bool): Whether to leave the progress bar after completion.
        mininterval (float): Minimum time interval between updates.
        initial (int): Initial counter value.
        n (int): Current iteration count.
        closed (bool): Whether the progress bar is closed.
        bar_format (str | None): Custom bar format string.
        file (IO[str]): Output file stream.

    Methods:
        update: Update progress by n steps.
        set_description: Set or update the description.
        set_postfix: Set postfix for the progress bar.
        close: Close the progress bar and clean up.
        refresh: Refresh the progress bar display.
        clear: Clear the progress bar from display.
        write: Write a message without breaking the progress bar.

    Examples:
        Basic usage with iterator:
        >>> for i in TQDM(range(100)):
        ...     time.sleep(0.01)

        With custom description:
        >>> pbar = TQDM(range(100), desc="Processing")
        >>> for i in pbar:
        ...     pbar.set_description(f"Processing item {i}")

        Context manager usage:
        >>> with TQDM(total=100, unit="B", unit_scale=True) as pbar:
        ...     for i in range(100):
        ...         pbar.update(1)

        Manual updates:
        >>> pbar = TQDM(total=100, desc="Training")
        >>> for epoch in range(100):
        ...     # Do work
        ...     pbar.update(1)
        >>> pbar.close()
    g{Gz?g333333?i@B g      N@NT皙?it  r   iterabler   desc
str | Nonetotal
int | Noneleaver
   fileIO[str] | Noneminintervalfloatdisablebool | Noneunitstr
unit_scaleunit_divisorint
bar_formatinitialr	   Nonec                l   |7	 ddl m}m} | p|                                dk    }n# t          $ r d}Y nw xY w|| _        |pd| _        |p"t          |d          rt          |          ndpd| _	        || _
        || _        |	| _        |
| _        || _        t                      | _        | j        rt#          || j                  n|| _        || _        || _        |pt,          j        | _        | j        | _        | j        | _        t7          j                    | _        t7          j                    | _        d| _        d| _        |	o|d	v | _         | j         rg d
n%dd| j         dfdd| j         dfdd| j         dfg| _!        | j
        s$| j	        r| j        s| "                                 dS dS dS dS )a  Initialize the TQDM progress bar with specified configuration options.

        Args:
            iterable (Any, optional): Iterable to wrap with progress bar.
            desc (str, optional): Prefix description for the progress bar.
            total (int, optional): Expected number of iterations.
            leave (bool, optional): Whether to leave the progress bar after completion.
            file (IO[str], optional): Output file stream for progress display.
            mininterval (float, optional): Minimum time interval between updates (default 0.1s, 60s in GitHub Actions).
            disable (bool, optional): Whether to disable the progress bar. Auto-detected if None.
            unit (str, optional): String for units of iteration (default "it" for items).
            unit_scale (bool, optional): Auto-scale units for bytes/data units.
            unit_divisor (int, optional): Divisor for unit scaling (default 1000).
            bar_format (str, optional): Custom bar format string.
            initial (int, optional): Initial counter value.
            **kwargs (Any): Additional keyword arguments for compatibility (ignored).
        Nr   )LOGGERVERBOSE   F __len__        >   Bbytes))i   @zGB/s)   zMB/s)   zKB/sg    eAG/sg    .AMg     @@K)#ultralytics.utilsr.   r/   getEffectiveLevelImportErrorr   r   hasattrlenr   r#   r%   r'   r(   r   r   noninteractivemaxNONINTERACTIVE_MIN_INTERVALr!   r+   r*   sysstdoutr   nlast_print_ntimelast_print_tstart_t	last_rateclosedis_bytesscales_display)selfr   r   r   r   r   r!   r#   r%   r'   r(   r*   r+   kwargsr.   r/   s                   r   __init__zTQDM.__init__P   s   D ? ========%+H)A)A)C)Cb)H        !JB	_)0L0LVs8}}}RV_[_
	$(
799QUQdu3{D,LMMMju %&CJ	  L IKKy{{"=t~'= }`EEEE)DI)))*S2Cdi2C2C2C,DsL]PTPYL]L]L]F^_ 	 | 	
 	43F 	MMOOOOO	 	 	 	 	 	s   #( 77ratec                    dk    rdS rdz  nd}|r |dk    r| j         r|ddn|dd| j         S | j         rddnd| j         d	}t          fd
| j        D             |          S )zHFormat rate with units, switching between it/s and s/it for readability.r   r1   r   N.1fzs/Bzs/zB/sr9   c              3  >   K   | ]\  }}|k    |z  d | V  dS )rU   Nr   ).0turS   s      r   	<genexpr>z$TQDM._format_rate.<locals>.<genexpr>   s=      OOdaTQYYq))a))YYYYOOr   )rM   r%   nextrN   )rP   rS   inv_ratefallbacks    `  r   _format_ratezTQDM._format_rate   s    1992#-1t88  	]1+/=\h'''''>\>\>\QUQZ>\>\\ (,}Td#####T:T:Tty:T:T:TOOOOdkOOOQYZZZr   numint | floatc                    | j         r| j        st          |          S dD ]6}t          |          | j        k     r|r|d| dn|ddc S || j        z  }7|ddS )z)Format number with optional unit scaling.)r1   r;   r:   r8   Tz3.1fr4   .0frU   PB)r'   rM   r&   absr(   )rP   r_   r%   s      r   _format_numzTQDM._format_num   s     	dm 	s88O, 	% 	%D3xx$+++/3F#++D++++CFFF4$$CC~~~~r   secondsc                    | dk     r| ddS | dk     rt          | dz             d| dz  dS t          | dz            t          | dz  dz            }}| d|dd| dz  dS )zFormat time duration.<   rU   si  :z02.0f02d)r)   )rg   hms      r   _format_timezTQDM._format_time   s     R<<$$$$$t^^'R-((??7R<????w$''gn-C)D)DqA66!666'B,6666r      widthc                   | j         | j        rd|z  nd|z  S t          d| j        | j         z            }t	          ||z            }d|z  d||z
  z  z   }||k     r&||z  |z
  dk    r|d|          d||dz   d          }|S )zGenerate progress bar.Nu   ━u   ─g      ?g      ?u   ╸r   )r   rL   minrF   r)   )rP   rq   fracfilledbars        r   _generate_barzTQDM._generate_bar   s    :$(KB55==UU]B3+,,TE\""fnu77E>>dUlV3c99&\99c&1*,,&799C
r   dtdnc                \    | j         rdS | j        dur| j        | j        k    p
|| j        k    S )zCheck if display should update.FN)rA   r   rF   r!   )rP   rx   ry   s      r   _should_updatezTQDM._should_update   s:     	5
$&?46TZ+?\R4K[E[\r   Ffinalc                R   | j         s	| j        r|sdS t          j                    }|| j        z
  }| j        | j        z
  }|s|                     ||          sdS || j        k    r>|r||z  nd}|| j        k     r)| j	        |z  d| j	        z
  | j
        z  z   | _
        | j
        }n| j
        }| j        r*| j        | j        k    r|| j        z
  }|dk    r
| j        |z  }| j        | _        || _        || j        z
  }d}| j        rTd| j        cxk     r| j        k     r=n n:|dk    r4|p	| j        |z  }	d|                     | j        | j        z
  |	z             }| j        ru| j        | j        z  dz  }
|                     | j                  }|                     | j                  }| j        r'|d         |d         k    r|                    d	          }nd}
|                     | j                  d
}}|                     |          }|                     |          p$|dk    r|                     | j        |z            nd}|                                 }| j        rP| j        r*| j        | j        k    r| j         d|
dd| d| d| d| }n4| j         d|
dd| d| d| d| d| | }n| j         d| d| d| d| 	}	 | j        r| j                            |           n| j                            d|            | j                                         dS # t0          $ r Y dS w xY w)zDisplay progress bar.Nr3   r   r   r1   <d   KMGTPB?z: rc   z%  /[K)r#   rL   rH   rI   rF   rG   r{   MIN_RATE_CALC_INTERVALMAX_SMOOTHED_RATERATE_SMOOTHING_FACTORrK   r   rJ   ro   rf   rM   rstripr^   rw   r   rA   r   writeflush	Exception)rP   r|   current_timerx   ry   rS   overall_elapsedelapsedremaining_strest_ratepercentn_strt_strelapsed_strrate_strrv   progress_strs                    r   rO   zTQDM._display   s   < 	DK 	 	Fy{{D--Vd'' 	T00R88 	F +++ )277cDd,,,!%!;d!Ba$JdFdhlhvEv!v~>D : 	0$&DJ..*T\9O""v/ !F(- : 	V!df1111tz11111gkk1 0HU 1 14:3F(2R S SUUM : 	9v
*c1G$$TV,,E$$TZ00E} /reBi!7!7X..G++DF33S5E''00$$T**jV]`aVaVat/@/@'AQ/R/R/Rgi  "" : 		R} 4:!5!5"&)ddwdddcddEddHddWbdd yppGppp3ppppppppT_panpp  #iQQ3QQQQQQKQQL		" ;	---- 	 9< 9 9:::IOO 	 	 	DD	s   >AL 
L&%L&r   rF   c                r    | j         s-| j        s(| xj        |z  c_        |                                  dS dS dS )zUpdate progress by n steps.N)r#   rL   rF   rO   )rP   rF   s     r   updatezTQDM.update"  sI    | 	DK 	FFaKFFMMOOOOO	 	 	 	r   c                R    |pd| _         | j        s|                                  dS dS )zSet description.r1   N)r   r#   rO   )rP   r   s     r   set_descriptionzTQDM.set_description(  s2    JB	| 	MMOOOOO	 	r   rQ   c                   |r}d                     d |                                D                       }d| j        v r | j                            d          d         n| j        }|                     | d|            dS dS )z%Set postfix (appends to description).z, c              3  *   K   | ]\  }}| d | V  dS )=Nr   )rW   kvs      r   rZ   z#TQDM.set_postfix.<locals>.<genexpr>1  s0      FFtq!1

q

FFFFFFr   z | r   N)joinitemsr   splitr   )rP   rQ   postfix	base_descs       r   set_postfixzTQDM.set_postfix.  s     	=iiFFv||~~FFFFFG5:di5G5G	..q11TYI  I!;!;'!;!;<<<<<	= 	=r   c                   | j         rdS d| _         | j        s| j        rC| j        | j        k    r3| j        | _        | j        | j        k    r|                     d           n|                     d           | j        r| j                            d           n| j                            d           	 | j        	                                 dS # t          $ r Y dS w xY wdS )zClose progress bar.NT)r|   
r   )rL   r#   r   rF   rG   rO   r   r   r   r   r   rP   s    r   closez
TQDM.close5  s    ; 	F| 	z *df
226T...MMM---D))) z ,	%%%%	
+++	!!!!!   #	 	s   5C 
CCc                    | S )zEnter context manager.r   r   s    r   	__enter__zTQDM.__enter__P  s    r   argsc                .    |                                   dS )z,Exit context manager and close progress bar.N)r   )rP   r   s     r   __exit__zTQDM.__exit__T  s    

r   c              #     K   | j         t          d          	 | j         D ]}|V  |                     d           	 |                                  dS # |                                  w xY w)z8Iterate over the wrapped iterable with progress updates.Nz!'NoneType' object is not iterabler   )r   	TypeErrorr   r   )rP   items     r   __iter__zTQDM.__iter__X  sw      = ?@@@	  


A JJLLLLLDJJLLLLs   #A A*c                R    	 |                                   dS # t          $ r Y dS w xY w)zDestructor to ensure cleanup.N)r   r   r   s    r   __del__zTQDM.__del__d  s:    	JJLLLLL 	 	 	DD	s    
&&c                @    | j         s|                                  dS dS )zRefresh display.N)r#   rO   r   s    r   refreshzTQDM.refreshk  s'    | 	MMOOOOO	 	r   c                    | j         sG	 | j                            d           | j                                         dS # t          $ r Y dS w xY wdS )zClear progress bar.r   N)r#   r   r   r   r   r   s    r   clearz
TQDM.clearp  si    | 		
+++	!!!!!   		 	s   3> 
AAr   rj   endc                    |pt           j        }	 |                    | |z              |                                 dS # t          $ r Y dS w xY w)z5Static method to write without breaking progress bar.N)rD   rE   r   r   r   )rj   r   r   s      r   r   z
TQDM.writey  s^     !sz	JJq3wJJLLLLL 	 	 	DD	s   ,> 
AA)NNNTNr   Nr   Tr   Nr   )r   r   r   r   r   r   r   r
   r   r    r!   r"   r#   r$   r%   r&   r'   r
   r(   r)   r*   r   r+   r)   r	   r,   )rS   r"   r	   r&   )r_   r`   r	   r&   )rg   r"   r	   r&   )rp   )rq   r)   r	   r&   )rx   r"   ry   r)   r	   r
   )F)r|   r
   r	   r,   )r   )rF   r)   r	   r,   )r   r   r	   r,   )rQ   r   r	   r,   )r	   r,   )r	   r   )r   r   r	   r,   )r	   r   )Nr   )rj   r&   r   r    r   r&   r	   r,   )__name__
__module____qualname____doc__r   r   r   rC   rR   r^   rf   staticmethodro   rw   r{   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s       5 5p ""&  # # !%J J J J JX[ [ [ [	 	 	 	 7 7 7 \7
 
 
 
 
] ] ] ]M M M M M^       = = = =   6      
 
 
 
      
        \  r   r   __main__z'1. Basic progress bar with known total:   zKnown total)r   g?z$
2. Manual updates with known total:i,  zManual updatesfiles)r   r   r%   gQ?
   	   zProcessing batch z$
3. Progress bar with unknown total:zUnknown totalr   )r   r%      g{Gz?      OK)	processedstatusz'
4. Context manager with unknown total:zProcessing streamr4   Tr7   )r   r%   r'   r(      r   r6   z!
5. Iterator with unknown length:c               #  l   K   ddl } t          |                     dd                    D ]	}d| V  
dS )z)Simulate a data stream of unknown length.r   Nr   r0   data_chunk_)randomrangerandint)r   is     r   data_streamr     sU      v~~b"--.. 	$ 	$A#######	$ 	$r   zStream processingchunksz.
6. File processing simulation (unknown size):c                 4    d t          d          D             S )z+Simulate processing files of unknown count.c                    g | ]}d | d	S )file_z.txtr   )rW   r   s     r   
<listcomp>z!process_files.<locals>.<listcomp>  s     333A333r      )r   r   r   r   process_filesr     s    33r3333r   zScanning filesgQ?zProcessing )r	   r
   )
__future__r   r   rD   rH   	functoolsr   typingr   r   r   r   r   printr   r   sleeppbarr   r   r   r   r   chunkr   r   	enumeratefilenamer   r   r   <module>r      s3   # " " " " " 				 



                1K K K K
o o o o o o o od zKKK	E
3444T%%((///  
4	E
12224c 0w???DU3ZZ D D
4Ar6Q;;  !BQ"Wq[!B!BCCCJJLLL	E
12224_7333DU2YY ; ;
4Aq5A::q1uT:::JJLLL	E
4555	&STPT	U	U	U )Y]r 	) 	)ADJsOOOKKa((((	)) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
E
.///$ $ $ kkmm*=HMMM  
3	E
;<<<4 4 4 4%G444DMOOE y'' 7 78
4A58556666JJLLLLLo s   &7G**G.1G.