a
    $Fwj                     @  sj   d dl mZ d dlmZ d dlmZ d dlmZmZ d dlm	Z	 eddG dd	 d	Z
G d
d dZdS )    )annotations)deque)	dataclass)datetime	timedelta)DequeT)frozenc                   @  s&   e Zd ZU ded< ded< ded< dS )
PricePointr   	timestampfloatpricevolumeN)__name__
__module____qualname____annotations__ r   r   9/home/opc/hanz-radar/runtime/src/hanz_realtime/rolling.pyr	   	   s   
r	   c                   @  s   e Zd ZdddddddZdddd	d
ZdddddZddddZddddZddddZddddZ	ddddZ
dS )RollingWindow,  intNone)
max_pointsmax_age_secondsreturnc                 C  s"   || _ t|d| _t|d| _d S )N)seconds)maxlen)r   r   max_ager   _points)selfr   r   r   r   r   __init__   s    zRollingWindow.__init__r	   )pointr   c                 C  s   | j | | |j d S N)r   append_trimr
   )r   r!   r   r   r   add   s    zRollingWindow.addr   )nowr   c                 C  s,   | j r(|| j d j | jkr(| j   q d S Nr   )r   r
   r   popleft)r   r&   r   r   r   r$      s    zRollingWindow._trimzlist[float])r   c                 C  s   dd | j D S )Nc                 S  s   g | ]
}|j qS r   )r   .0r!   r   r   r   
<listcomp>       z(RollingWindow.prices.<locals>.<listcomp>r   r   r   r   r   prices   s    zRollingWindow.pricesc                 C  s   dd | j D S )Nc                 S  s   g | ]
}|j qS r   )r   r)   r   r   r   r+   "   r,   z)RollingWindow.volumes.<locals>.<listcomp>r-   r.   r   r   r   volumes!   s    zRollingWindow.volumeszPricePoint | Nonec                 C  s   | j r| j d S d S r'   r-   r.   r   r   r   first$   s    zRollingWindow.firstc                 C  s   | j r| j d S d S )Nr-   r.   r   r   r   last'   s    zRollingWindow.lastc                 C  s
   t | jS r"   )lenr   r.   r   r   r   __len__*   s    zRollingWindow.__len__N)r   r   )r   r   r   r    r%   r$   r/   r0   r1   r3   r5   r   r   r   r   r      s   r   N)
__future__r   collectionsr   dataclassesr   r   r   typingr   r	   r   r   r   r   r   <module>   s   