o
    bi                     @   s   d dl Z d dl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yB   dZdaY nw e Ze Zded	efd
dZG dd dZdS )    N)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   S/home/ubuntu/.local/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Z		d&dedee deded	ee f
d
dZ	dedefddZ
dee ddfddZde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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   Nnametotalunitpositionenabledc                 C   s   |  || _d| _|d dkrd| }|d u r"ddlm} | j}|s)d | _d S trUt	j
jj }|jr?tj|||d| _ntj|pDd|d|dd| _| j| j d S tr]td dad | _d S )	Nr    )DataContext)r   r   r   T)r   r   dynamic_ncolsr   
unit_scalez?[dataset]: Run `pip install tqdm` to enable progress reporting.F)_truncate_name_desc	_progressray.datar   get_currentenable_progress_bars_bartqdmraydatacontextuse_ray_tqdmr   set_descriptionneeds_warningprint)selfr   r   r   r   r   r   ctxr   r   r   __init__6   s2   


zProgressBar.__init__r	   c                 C   s   t jjj }|jrt|| jkr|S |d}t|dkr"|d S |d g}|dd D ]8}td	|td t| td t|d  | jkr`|
d tdr^td| j d  n|
| q-|
|d  d	|S )	Nz->r   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`.)r%   r&   r'   r   r!   #enable_progress_bar_name_truncationr   MAX_NAME_LENGTHsplitjoinappendr   loggerwarning)r,   r   r-   op_namestruncated_op_namesop_namer   r   r   r   ^   s<   




zProgressBar._truncate_name	remainingc                 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_threadr%   waitr   zipgetr   update_canceled_threads_lock_canceled_threads)r,   r;   tdonetotal_rows_processed_r   r
   r   r   r   block_until_complete   s"   


z ProgressBar.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    z4ProgressBar.fetch_until_complete.<locals>.<listcomp>rA   )
r,   rO   r;   rJ   r?   rK   rL   rQ   r   r
   r   rR   r   fetch_until_complete   s6   


z ProgressBar.fetch_until_completec                 C   s:   |  |}| jr|| jkr|| _| j| j d S d S d S N)r   r#   r   r)   )r,   r   r   r   r   r)      s
   
zProgressBar.set_descriptionc                 C   s   | j S rV   )r   r,   r   r   r   get_description   s   zProgressBar.get_descriptionc                 C   s   | j r
| j   d S d S rV   )r#   refreshrW   r   r   r   rY      s   zProgressBar.refreshic                 C   st   | j r6|dks| j j|kr8|  j|7  _|d ur|| j _| j jd ur.| j| j jkr.| j| j _| j | d S d S d S )Nr   )r#   r   r   rG   )r,   rZ   r   r   r   r   rG      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 rV   )r#   r   r   rY   closerW   r   r   r   r[      s   



zProgressBar.closec                 C   s   |    d S rV   )r[   rW   r   r   r   __del__   s   zProgressBar.__del__c                 C   s   i S rV   r   rW   r   r   r   __getstate__   s   zProgressBar.__getstate__c                 C   s
   d | _ d S rV   )r#   )r,   stater   r   r   __setstate__   s   
zProgressBar.__setstate__)r   N)__name__
__module____qualname____doc__r2   strr   intboolr.   r   r   r   rN   r   rU   r)   rX   rY   rG   r[   r\   r]   r_   r   r   r   r   r   +   s6    
(%
	r   )loggingrB   typingr   r   r   r%   ray.experimentalr   	ray.typesr   ray.util.debugr   	getLoggerr`   r6   r$   r*   ImportErrorsetrI   LockrH   re   r   r   r   r   r   r   <module>   s&    
