U
    g                     @  sD   d dl mZ d dlZd dlZd dlZG dd dZG dd dZdS )    )annotationsNc                   @  sj   e Zd ZdZdZdZddddZedd	 Zej	d
ddd	Zdd Z
d
dddZddddZdS )ProgressCalculator   g?   int)initialc                 C  st   |pd| _ | j | _d| _tddd| _td dd| _d| _t | _	| j	| _
t | _i | _| j	g| _| jg| _d S )Nr   gffffff?)	smoothingg?)_initial
downloadedelapsedSmoothValuespeedeta_totaltime	monotonic_start_time_last_update	threadingLock_lock_thread_sizes_times_downloaded)selfr    r   9/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/utils/progress.py__init__   s    



zProgressCalculator.__init__c                 C  s   | j S N)r   r   r   r   r   total"   s    zProgressCalculator.totalz
int | Nonevaluec              	   C  s4   | j $ |d k	r || jk r | j}|| _W 5 Q R X d S r   )r   r
   r   r   r"   r   r   r   r    &   s    c              	   C  s(   t  }| j d| j|< W 5 Q R X d S Nr   )r   	get_identr   r   )r   current_threadr   r   r   thread_reset.   s    zProgressCalculator.thread_reset)sizec              	   C  sL   |sd S t  }| j, | j|d}|| j|< | ||  W 5 Q R X d S r$   )r   r%   r   r   get_update)r   r(   r&   Z	last_sizer   r   r   update3   s    
zProgressCalculator.updatec                 C  sD  t  }|  j|7  _|| j | _| jd k	r@| j| jkr@| j| _| j| j |krTd S || _| j	
| | j
| j t| j	|| j }| j	d |= | jd |= t| j	dk r| j  | j  d S || j	d  }|sd S | j| j| jd  |  | jr6| jjr6| j| jkr6| j| j| j | jj  n
| j  d S )N   r   )r   r   r
   r   r   r    r   r   SAMPLING_RATEr   appendr   bisectbisect_leftSAMPLING_WINDOWlenr   resetr   setr"   GRACE_PERIOD)r   r(   current_timeoffsetZdownload_timer   r   r   r*   >   s0    

 zProgressCalculator._updateN)__name__
__module____qualname__r1   r-   r5   r   propertyr    setterr'   r+   r*   r   r   r   r   r      s   
r   c                   @  s2   e Zd ZdddddZddddZd	d
 ZdS )r   zfloat | Nonefloat)r   r   c                 C  s   | | _  | _| _|| _d S r   )r"   smoothr	   
_smoothing)r   r   r   r   r   r   r   a   s    zSmoothValue.__init__r!   c                 C  s:   || _ | jd kr| j | _nd| j | | j| j  | _d S )Nr   )r"   r>   r?   r#   r   r   r   r4   e   s    

zSmoothValue.setc                 C  s   | j  | _| _d S r   )r	   r"   r>   r   r   r   r   r3   l   s    zSmoothValue.resetN)r8   r9   r:   r   r4   r3   r   r   r   r   r   `   s   r   )
__future__r   r/   r   r   r   r   r   r   r   r   <module>   s
   X