
    tgj                    ~    S SK Jr  S SKJr  S SKJr  S SKJrJr  S SKJ	r	  \" SS9 " S S	5      5       r
 " S
 S5      rg)    )annotations)deque)	dataclass)datetime	timedelta)DequeT)frozenc                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	
PricePoint	   r   	timestampfloatpricevolume N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       A/mnt/data/HANZ_v2.2_Realtime_Gateway/src/hanz_realtime/rolling.pyr   r   	   s    LMr   r   c                  h    \ rS rSrSSS jjrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)RollingWindow   c                H    Xl         [        US9U l        [        US9U l        g )N)seconds)maxlen)
max_pointsr   max_ager   _points)selfr    max_age_secondss      r   __init__RollingWindow.__init__   s    $ 9*/z*Br   c                p    U R                   R                  U5        U R                  UR                  5        g N)r"   append_trimr   r#   points     r   addRollingWindow.add   s$    E"

5??#r   c                *   U R                   (       a  XR                   S   R                  -
  U R                  :  aX  U R                   R                  5         U R                   (       a,  XR                   S   R                  -
  U R                  :  a  MV  g g g g Nr   )r"   r   r!   popleft)r#   nows     r   r*   RollingWindow._trim   sa    lls\\!_%>%>>MLL  " lls\\!_%>%>>MlMlr   c                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r(   )r"   r   r+   s     r   pricesRollingWindow.prices   s     )-6666   'c                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf r(   )r"   r   r+   s     r   volumesRollingWindow.volumes!   s     *.,,7,,777r7   c                F    U R                   (       a  U R                   S   $ S $ r0   r"   r#   s    r   firstRollingWindow.first$   s    "&,,t||A8D8r   c                F    U R                   (       a  U R                   S   $ S $ )Nr<   r=   s    r   lastRollingWindow.last'   s    #'<<t||B9T9r   c                ,    [        U R                  5      $ r(   )lenr"   r=   s    r   __len__RollingWindow.__len__*   s    4<<  r   )r"   r!   r    N),  rH   )r    intr$   rI   returnNone)r,   r   rJ   rK   )r2   r   rJ   rK   )rJ   zlist[float])rJ   zPricePoint | None)rJ   rI   )r   r   r   r   r%   r-   r*   r5   r9   r>   rB   rF   r   r   r   r   r   r      s+    C
$#789:!r   r   N)
__future__r   collectionsr   dataclassesr   r   r   typingr   r   r   r   r   r   <module>rP      s<    "  ! (  $  ! !r   