o
    $i.'                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 d dlZd dlmZ d dlmZ d dlmZ e eZzd dlZdaW n eyR   dZdaY nw e Ze Zd	ed
efddZG dd deZG dd deZde ded
e fddZ!dS )    N)ABCabstractmethod)AnyListOptional)tqdm_ray)	ObjectRef)log_onceFTresultreturnc                 C   s&   t | dr| jS t | drt| S dS )zExtract the number of rows from a result object.

    Args:
        result: The result object from which to extract the number of rows.

    Returns:
        The number of rows, defaulting to 1 if it cannot be determined.
    num_rows__len__   )hasattrr   len)r
    r   \/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/data/_internal/progress_bar.pyextract_num_rows   s
   
	
r   c                   @   s   e Zd ZdZdee ddfddZdee dee fdd	Ze	d
e
ddfddZe	de
fddZe	ddedee ddfddZdd Zdd ZdS )AbstractProgressBarz(Abstract class to define a progress bar.	remainingr   Nc                 C   s   t  }|rRtj|t|ddd\}}d}t|t|D ]\}}t|}||7 }q| | t	 |t
v r?	 W d    d S W d    n1 sIw   Y  |sd S d S )NF皙?num_returnsfetch_localtimeoutr   	threadingcurrent_threadraywaitr   zipgetr   update_canceled_threads_lock_canceled_threads)selfr   tdonetotal_rows_processed_r
   r   r   r   r   block_until_complete1   s"   


z(AbstractProgressBar.block_until_completerefsc           
         s   i  |}t  }d}|r]tj|t||dd\}}|rd}d}t|t|D ]\}}| |< t|}	||	7 }q'| | t	 |t
v rL	 W d    nW d    n1 sVw   Y  |s fdd|D S )NTr   r   Fr   c                    s   g | ]} | qS r   r   ).0refref_to_resultr   r   
<listcomp>^   s    z<AbstractProgressBar.fetch_until_complete.<locals>.<listcomp>r   )
r%   r+   r   r&   r   r'   r(   r-   r
   r   r   r.   r   fetch_until_completeA   s6   


z(AbstractProgressBar.fetch_until_completenamec                 C      d S Nr   r%   r2   r   r   r   set_description`      z#AbstractProgressBar.set_descriptionc                 C   r3   r4   r   r%   r   r   r   get_descriptiond   r7   z#AbstractProgressBar.get_descriptionr   	incrementtotalc                 C   r3   r4   r   r%   r:   r;   r   r   r   r"   h   r7   zAbstractProgressBar.updatec                 C   r3   r4   r   r8   r   r   r   refreshl      zAbstractProgressBar.refreshc                 C   r3   r4   r   r8   r   r   r   closeo   r>   zAbstractProgressBar.closer   N)__name__
__module____qualname____doc__r   r   r*   r   r1   r   strr6   r9   intr   r"   r=   r?   r   r   r   r   r   .   s    r   c                   @   s   e Zd ZdZdZ		d dedee deded	ee f
d
dZ	deddfddZ
defddZdd Zdd Zd dedee ddfddZdd Zdd Zdd Zdd ZdS )!ProgressBarzThin wrapper around tqdm to handle soft imports.

    If `total` is `None` known (for example, it is unknown
    because no tasks have finished yet), doesn't display the full
    progress bar. Still displays basic progress stats from tqdm.d   r   Nr2   r;   unitpositionenabledc                 C   s  t || j| _d| _|| _|d dkrd| }d| _|d u r)ddlm} | j	}|r>t
j s>d| _d}tdr>td |sDd | _n7trpddlm} | jr[tj|||d| _ntj|p`d|d|dd	| _| j| j ntrxtd
 dad | _d| _ddlm} | j| _d| _d S )Nr    FDataContextTprogress_bar_disabledzCProgress bar disabled because stdout is a non-interactive terminal.)r;   rI   rJ   )r;   rJ   dynamic_ncolsrI   
unit_scalez?[dataset]: Run `pip install tqdm` to enable progress reporting.)truncate_operator_nameMAX_NAME_LENGTH_desc	_progress_total_use_loggingray.data.contextrN   get_currentenable_progress_barssysstdoutisattyr	   loggerinfo_bartqdmuse_ray_tqdmr   r6   needs_warningprint_last_logged_timeprogress_bar_log_interval_log_interval_logged_once)r%   r2   r;   rI   rJ   rK   rN   r   r   r   __init__~   sL   


zProgressBar.__init__r   c                 C   sH   t || j}| jr|| _| jr || jkr"|| _| j| j d S d S d S r4   )rR   rS   rW   rT   r`   r6   r5   r   r   r   r6      s   zProgressBar.set_descriptionc                 C   s   | j S r4   )rT   r8   r   r   r   r9      s   zProgressBar.get_descriptionc                 C   s   t   }|| j }| jdkp|| jk}|rI| jd }| js3|dd }t	d| d d| _t	| d| j
 d| jp@d	  || _d
S d
S )z6Log progress if the required time interval has passed.r   z- :z=== Ray Data Progress {z} ===Tz: Progress Completed z / ?N)timere   rg   rT   lstripstriprh   splitr^   r_   rU   rV   )r%   current_time	time_diff
should_log
clean_descoperation_namer   r   r   _log_progress_if_needed   s   

z#ProgressBar._log_progress_if_neededc                 C   s*   | j r
| j   d S | jr|   d S d S r4   )r`   r=   rW   ru   r8   r   r   r   r=      s
   zProgressBar.refreshr:   c                 C   s   | j r6|dks| j j|kr6|  j|7  _|d ur|| j _| j jd ur.| j| j jkr.| j| j _| j | d S | jrU|d urW|dkrY|  j|7  _|d urO|| _|   d S d S d S d S )Nr   )r`   r;   rU   r"   rW   rV   ru   r<   r   r   r   r"      s   
zProgressBar.updatec                 C   sL   | j r$| j jd ur| j| j jkr| j| j _| j   | j   d | _ d S d S r4   )r`   r;   rU   r=   r?   r8   r   r   r   r?      s   



zProgressBar.closec                 C   s   |    d S r4   )r?   r8   r   r   r   __del__   s   zProgressBar.__del__c                 C   s   i S r4   r   r8   r   r   r   __getstate__   r>   zProgressBar.__getstate__c                 C   s
   d | _ d S r4   )r`   )r%   stater   r   r   __setstate__  s   
zProgressBar.__setstate__r@   )rA   rB   rC   rD   rS   rE   r   rF   boolri   r6   r9   ru   r=   r"   r?   rv   rw   ry   r   r   r   r   rG   s   s2    
A	rG   r2   max_name_lengthc                 C   s   ddl m} | }|jrt| |kr| S | d}t|dkr$|d S |d g}|dd D ]6}td|td t| td t|d  |kr`|d tdr^t	
d| d	  n|| q/||d  d|S )
Nr   rM   z->r   z...ray_data_truncate_operator_namez!Truncating long operator name to z characters. To disable this behavior, set `ray.data.DataContext.get_current().DEFAULT_ENABLE_PROGRESS_BAR_NAME_TRUNCATION = False`.)rX   rN   rY   #enable_progress_bar_name_truncationr   ro   joinappendr	   r^   warning)r2   r{   rN   ctxop_namestruncated_op_namesop_namer   r   r   rR     s:   





rR   )"loggingr[   r   rl   abcr   r   typingr   r   r   r   ray.experimentalr   	ray.typesr   ray.util.debugr	   	getLoggerrA   r^   ra   rc   ImportErrorsetr$   Lockr#   rF   r   r   rG   rE   rR   r   r   r   r   <module>   s2    
E 