o
    rri                     @   s   d dl mZmZ d dlZd dlZd dlZd dlZd dlm	Z	 G dd dZ
dedefdd	Zdedefd
dZdddefddZdejfddZdadddZdd ZdS )    )IterableSizedNcolorizec                   @   sx   e Zd ZdZddddd ejfdejdeded	ed
e	de
je dedefddZde	fddZdd Zdd Zdd ZdS )LogProgressa>  
    Sort of like tqdm but using log lines and not as real time.
    Args:
        - logger: logger obtained from `logging.getLogger`,
        - iterable: iterable object to wrap
        - updates (int): number of lines that will be printed, e.g.
            if `updates=5`, log every 1/5th of the total length.
        - time_per_it (bool): force speed to display as ms/it
        - total (int): length of the iterable, in case it does not support
            `len`.
        - name (str): prefix to use in the log.
        - level: logging level (like `logging.INFO`).
          FNloggeriterableupdatesmin_intervaltime_per_ittotalnamelevelc	           	      C   sR   || _ |d u rt|tsJ t|}|| _|| _|| _|| _|| _|| _	|| _
d S )N)r
   
isinstancer   lenr   r   r   r   r   r	   r   )	selfr	   r
   r   r   r   r   r   r    r   </home/ubuntu/.local/lib/python3.10/site-packages/dora/log.py__init__   s   	
zLogProgress.__init__returnc                 K   s   || _ | jS )zqUpdate the metrics to show when logging. Return True if logging will
        happen at the end of this iteration.)_infos	_will_log)r   infosr   r   r   update3   s   zLogProgress.updatec                 C   s,   t | j| _d| _d| _i | _t | _| S )NF)iterr
   	_iteratorr   _indexr   time_begin)r   r   r   r   __iter__9   s   
zLogProgress.__iter__c                 C   s   | j r
|   d| _ zt| j}W n ty    w |  jd7  _| jdkr?t| j| j	| j }| jdkr?| j| dkr?d| _ |S )NFr   r   T)
r   _lognextr   StopIterationr   r   maxr   r   )r   value	log_everyr   r   r   __next__A   s   
zLogProgress.__next__c                 C   s   d| j  t | j  | _ddd | j D }| jdk r"d}n5| jr4| jdk r4d| j dd}n#| jrAd	| j d
d}n| jdk rPd| j d
d}n| jdd}| j d| j  d| j	 d| }|ro|d| 7 }| j
| j| d S )Nr   z | c                 s   s&    | ]\}}|   d | V  qdS ) N)
capitalize).0kvr   r   r   	<genexpr>T   s   $ z#LogProgress._log.<locals>.<genexpr>g-C6?z	oo sec/itz.2fz sec/iti  z.1fz ms/itg?z it/sec/)r   r    r!   _speedjoinr   itemsr   r   r   r	   logr   )r   r   speedoutr   r   r   r#   R   s   

 zLogProgress._log)__name__
__module____qualname____doc__loggingINFOLoggerr   intbooltpOptionalstrr   r   r"   r)   r#   r   r   r   r   r      s:    
r   textr   c                 C   
   t | dS )z/
    Display text in bold in the terminal.
    1r   rC   r   r   r   bolde      
rG   c                 C   rD   )zDisplay text in red.
    31r   rF   r   r   r   redl   rH   rJ   )colorfirstc                G   s    t t| g|R dtji d S )Nfile)printrG   sysstderr)rL   rK   argsr   r   r   
simple_logs   s    rR   c                  G   s   t dg| R   td d S )NzFATAL:r   )rR   rO   exit)rQ   r   r   r   fatalw   s   rT   Fc                 C   sX   | rt jnt j}t d}|| t tjat	t 
d t| |t d S )Ndoraz"%(levelname)s:%(name)s:%(message)s)r;   DEBUGr<   	getLoggersetLevelStreamHandlerrO   rP   _dora_handlersetFormatter	Formatter
addHandler)verbose	log_levelr	   r   r   r   setup_logging   s   


r`   c                  C   s$   t d usJ td} | t  d S )NrU   )rZ   r;   rW   removeHandler)r	   r   r   r   disable_logging   s   
rb   )F)collections.abcr   r   r;   rO   r    typingr@   treetable.textr   r   rB   rG   rJ   rR   NoReturnrT   rZ   r`   rb   r   r   r   r   <module>   s   U
