
    2i)                     J   U d dl mZmZmZmZmZmZ d dlmZ	 d dl
mZmZ  G d d      Z G d d      Zd eeed	 ed
 d ej&                  ej(                  ej*                  ej,                  d dZeeeee   gef   f   ed<   deeeef      dedededef
dZ G d d      Zy)    )ListDictTupleUnionOptionalCallable)_msgs)DatabaseSimpleErrorc                       e Zd Z	 	 	 	 	 	 	 	 d(dededededededed	ed
eeeef      dee   f fdZd)dede	dee   de
edf   fdZdede	de
edf   fdZdeee
ee	f         fdZdededefdZdeded   fdZd*dZd*dZdededee	   dee	   dee   deee      dedeeee	f      fd Zdeded!edee	   dee	   dee   deee      d"ee   d#ed$ed%ee   d&ee   dedeeee	f      fd'Z xZS )+
TimeSeriesNnamedatabase	retentionencoding
chunk_sizeduplicate_policyignore_max_time_diffignore_max_val_difflabels
source_keyc                     t         |           || _        || _        || _        || _        || _        || _        i | _        g | _	        d| _
        |	xs i | _        |
| _        || _        || _        g | _        y Nr   )super__init__r   _dbr   r   r   r   
ts_ind_mapsorted_listmax_timestampr   r   r   r   rules)selfr   r   r   r   r   r   r   r   r   r   	__class__s              k/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/fakeredis/model/_timeseries_model.pyr   zTimeSeries.__init__   s{     		" $ 0*,46"#*0,B$$8!#6 +-
    	timestampvaluereturnc                 N   | j                   dk7  r5| j                  |z
  | j                   kD  rt        t        j                        || j
                  }|| j                  v r||dk(  rt        t        j                        |dk(  r|S | j                  |   }| j                  |   d   }|dk(  rt        ||      }n|dk(  rt        ||      }||f| j                  |<   |S | j                  j                  ||f       t        | j                        dz
  | j                  |<   | j                  D cg c]'  }|j                  j                  | j                   v s&|) c}| _        | j                  D ]  }|j#                  ||f        t        | j                  |      | _        |S c c}w )Nr      block   first      max   min)r   r   r   msgs)TIMESERIES_TIMESTAMP_OLDER_THAN_RETENTIONr   r   !TIMESERIES_DUPLICATE_POLICY_BLOCKr   maxminappendlenr    dest_keyr   r   
add_record)r!   r%   r&   r   ind
curr_valuerules          r#   addzTimeSeries.add%   s   >>Q4#5#5	#ADNN#RdLLMM##44'8+!$"H"HII8+  //),C))#.q1J6)J.!V+J.%.$6DS!E 23%()9)9%:Q%>	"'+zzTtT]]5G5G4885SdT
JJ 	0DOOY./	0 !3!3Y?	 Us   -'F"F"c                    t        | j                        dk(  r| j                  ||      S || j                  k(  r5| j                  |   }|| j                  |   d   |z   f| j                  |<   |S || j                  kD  r@| j                  | j                     }| j                  || j                  |   d   |z          |S t               Nr   r+   )r4   r   r:   r   r   
ValueError)r!   r%   r&   r7   s       r#   incrbyzTimeSeries.incrby?   s    t A%88Iu--***//),C%.0@0@0Ea0H50P$QDS!  +++//$"4"45CHHY 0 0 5a 85 @A  ,r$   c                     t        | j                        dk(  ry | j                  | j                     }| j                  |   d   | j                  |   d   gS r<   )r4   r   r   r   )r!   r7   s     r#   getzTimeSeries.getM   sW    t A%ood001  %a($*:*:3*?*BCCr$   from_tsto_tsc                 T   t        | j                        }| j                  D cg c]  }||d   cxk  r|k  rn | c}| _        | j                  j                         D ci c]  \  }}||cxk  r|k  rn || c}}| _        |t        | j                        z
  S c c}w c c}}w r   )r4   r   r   items)r!   rA   rB   	prev_sizexkvs          r#   deletezTimeSeries.deleteS   s    (()	'+'7'7Z!1Q4@XSX@XAZ,0OO,A,A,CcDAqGWXLa\aLa1a4c3t//000 [cs   BB#B$7B$r5   TimeSeriesRulec                 `    | j                   D ]  }|j                  j                  |k(  s|c S  y N)r    r5   r   )r!   r5   r9   s      r#   get_rulezTimeSeries.get_ruleY   s1    JJ 	D}}!!X-	 r$   c                 :    | j                   j                  |       y rL   )r    r3   r!   r9   s     r#   add_rulezTimeSeries.add_rule_   s    

$r$   c                 \    | j                   j                  |       d |j                  _        y rL   )r    remover5   r   rO   s     r#   delete_rulezTimeSeries.delete_ruleb   s     

$#' r$   	value_min	value_maxcount	filter_tsreversec                    |xs t        d      }|xs t        d      }| j                  D cg c]/  }||d   cxk  r|k  rn n||d   cxk  r|k  rn n||d   |v r|1 }	}|r|	j                          ||	d | S |	S c c}w )N-infinfr   r+   )floatr   rX   )
r!   rA   rB   rT   rU   rV   rW   rX   rF   ress
             r#   rangezTimeSeries.rangef   s     .v	-u	 %%(
1Q4(5(QqT.Y."adi&7	 (
 (
 KKMv;
(
s   4A>latestalign
aggregatorbucket_durationbucket_timestampemptyc                    |xs d}|xs t        d      }|xs t        d      }t        | t        d| j                        |	|
      }| j                  D ]J  }||d   cxk  r|k  sn ||d   cxk  r|k  s$n '||d   |v s1|j                  |d   |d   f|       L |r)t        |j                        dkD  r|j                  |       |r|j                  j                  d   d   }t        ||j                  |
      D ]@  }||j                  j                  vs|j                  j                  |t        d             B t        |j                  j                        |j                  _        |r$|j                  j                  j                          |r|j                  j                  d | S |j                  j                  S )Nr   rZ   r[   r$   r+   nan)r\   rJ   r   r   r   r6   r4   current_bucketapply_curr_bucketr5   r^   current_bucket_start_tsr   r:   sortedrX   )r!   rA   rB   r_   rT   rU   rV   rW   r`   ra   rb   rc   rd   rX   r9   rF   min_bucket_tstss                     r#   	aggregatezTimeSeries.aggregate   s     
.v	-u	dJsDHH$=z?[!! 	@A!A$'%'I1,J,JPYPaefgheimvev1qt.>?	@ c$--.2""#34 MM55a8;MM4+G+GY 8T]]555MM%%b%,78 )/t}}/H/H(IDMM%MM%%--/==,,Ve44}}(((r$   )r   s
   compressedi   r)   r   r   NNrL   )r9   rJ   r'   N)__name__
__module____qualname__bytesr
   intr   r   r   r\   r   r:   r>   r   r@   rI   rM   rP   rS   boolr   r^   rm   __classcell__)r"   s   @r#   r   r      s}   
 '"*$%#$/3&*.. . 	.
 . .  . ". !. eUl+,. UO.:S  (5/ ]bcfhlcl]m 4 E eCI6F DXd5e#456 D1c 1# 1# 1 84D+E  (  E?	
 E? } DI&  
eCJ	 2$)$) $) 	$)
 E?$) E?$) }$) DI&$) }$) $) $) #5/$) ~$) $) 
eCJ	 $)r$   r   c                       e Zd Zedee   defd       Zedee   defd       Zedee   defd       Zedee   defd       Z	y)Aggregatorsvaluesr'   c                     t        |       dk(  ryt        |       t        |       z  t        fd| D              t        |       z  S )Nr   c              3   .   K   | ]  }|z
  d z    yw   N .0rF   avgs     r#   	<genexpr>z$Aggregators.var_p.<locals>.<genexpr>        2aAG>2   r4   sumrw   r   s    @r#   var_pzAggregators.var_p   s>    v;!&kCK'2622S[@@r$   c                     t        |       dk(  ryt        |       t        |       z  t        fd| D              t        |       dz
  z  S )Nr   c              3   .   K   | ]  }|z
  d z    ywrz   r|   r}   s     r#   r   z$Aggregators.var_s.<locals>.<genexpr>   r   r   r+   r   r   s    @r#   var_szAggregators.var_s   sB    v;!&kCK'2622c&kAoFFr$   c                 D    t        t        j                  |       dz        S Ng      ?)r\   rv   r   rw   s    r#   std_pzAggregators.std_p       [&&v.#566r$   c                 D    t        t        j                  |       dz        S r   )r\   rv   r   r   s    r#   std_szAggregators.std_s   r   r$   N)
rn   ro   rp   staticmethodr   r\   r   r   r   r   r|   r$   r#   rv   rv      s    Ad5k Ae A A Gd5k Ge G G 7d5k 7e 7 7 7d5k 7e 7 7r$   rv   c                 0    t        |       t        |       z  S rL   )r   r4   rF   s    r#   <lambda>r      s    c!fs1vo r$   c                 0    t        |       t        |       z
  S rL   )r1   r2   r   s    r#   r   r      s    AQ r$   c                     | d   S r   r|   r   s    r#   r   r      s
    ! r$   c                     | d   S )Nr|   r   s    r#   r   r      s
    qu r$   c                      yr   r|   r   s    r#   r   r      s    r$   )s   avgs   sumr-   r,   s   ranges   countr*   s   lasts   std.ps   std.ss   var.ps   var.s   twaAGGREGATORSbucketbucket_start_tsrb   ra   r'   c                     t        |       dk(  ry|dk(  r:d}|}t        |       D ]  \  }\  }}|||z
  |z  z  }|} |||z   |z
  z  z  }||z  S | D 	cg c]  }	|	d   	 }
}	t        |   |
      S c c}	w )Nr   g        r   r+   )r4   	enumerater   )r   r   rb   ra   totalcurr_tsirl   valrF   relevant_valuess              r#   apply_aggregatorr      s     6{aV!%f- 	LAyCb7lc))EG	 	/9GCDD&&28#9QAaD#9O#9z"?33 $:s   A/c                   j    e Zd Z	 ddededededef
dZddeeef   d	e	e   d
e
fdZdd	e	e   d
dfdZy)rJ   r   r5   ra   rb   align_timestampc                     || _         || _        |j                         | _        || _        || _        d| _        g | _        |j                  | j                  _         y r   )	r   r5   lowerra   rb   r   ri   rg   r   )r!   r   r5   ra   rb   r   s         r#   r   zTimeSeriesRule.__init__   sR     % $**,..,-$79#-?? r$   Nrecordrc   r'   c                    |\  }}||| j                   z  z
  | j                  z   }| j                  |k(  r| j                  j	                  |       | j                  |k7  s|| j                  | j                   z   dz
  k(  rm| j                  |k7  }| j                  |       | j                  |k7  r|n| j                  | j                   z   | _        |r| j                  j	                  |       yy)Nr+   TF)rb   r   ri   rg   r3   rh   )r!   r   rc   rl   r   r   
should_adds          r#   r6   zTimeSeriesRule.add_record   s    CT%9%9 9:T=Q=QQ''?:&&v.((O;T11D4H4HH1LL55HJ""#34 //?B  11D4H4HH (
 ##**62r$   c                    t        | j                        dk(  ry t        | j                  | j                  | j                  | j
                        }g | _        | j                  }|dk(  r#t        | j                  | j                  z         }n*|dk(  r%t        | j                  | j                  dz  z         }| j                  j                  ||       y )Nr      +   ~r{   )	r4   rg   r   ri   rb   ra   rr   r5   r:   )r!   rc   r&   r%   s       r#   rh   z TimeSeriesRule.apply_curr_bucket
  s    t""#q( !=!=t?S?SUYUdUd
 !00	t#D884;O;OOPI%D884;O;ORS;SSTI)U+r$   )r   rL   )rn   ro   rp   r   rq   rr   r   r   r\   r   rs   r6   rh   r|   r$   r#   rJ   rJ      s{      !33 3 	3
 3 3"sEz!2 huo ae *,(5/ ,T ,r$   rJ   N)typingr   r   r   r   r   r   	fakeredisr	   r.   fakeredis._helpersr
   r   r   rv   r   r2   r1   r4   r   r   r   r   r   rq   r\   __annotations__rr   r   rJ   r|   r$   r#   <module>r      s    ? ? ? # 4\) \)~7 72 &'<T%4;-"6778 "4sEz"#4694LO4]b4
4(3, 3,r$   