
    KiP)                     X   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 ddlmZ  G d de      Z G d d	      Zd
 eeed ed d ej*                  ej,                  ej.                  ej0                  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SimpleError   )	BaseModelc                       e Zd 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 ),
TimeSeriess	   TSDB-TYPEN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              m/home/jay/workspace/scripts/.codegraph-venv/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   firstr      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   )r5   r    r;   r!   r   
ValueError)r#   r'   r(   r8   s       r%   incrbyzTimeSeries.incrbyB   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=   )r5   r    r   r!   )r#   r8   s     r%   getzTimeSeries.getP   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   )r5   r    r   items)r#   rB   rC   	prev_sizexkvs          r%   deletezTimeSeries.deleteV   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$r6   TimeSeriesRulec                 `    | j                   D ]  }|j                  j                  |k(  s|c S  y N)r"   r6   r   )r#   r6   r:   s      r%   get_rulezTimeSeries.get_rule\   s1    JJ 	D}}!!X-	 r&   c                 :    | j                   j                  |       y rM   )r"   r4   r#   r:   s     r%   add_rulezTimeSeries.add_ruleb   s    

$r&   c                 \    | j                   j                  |       d |j                  _        y rM   )r"   remover6   r   rP   s     r%   delete_rulezTimeSeries.delete_rulee   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    rY   )
r#   rB   rC   rU   rV   rW   rX   rY   rG   ress
             r%   rangezTimeSeries.rangei   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   r[   r\   r&   r   nan)r]   rK   r   r   r    r7   r5   current_bucketapply_curr_bucketr6   r_   current_bucket_start_tsr   r;   sortedrY   )r#   rB   rC   r`   rU   rV   rW   rX   ra   rb   rc   rd   re   rY   r:   rG   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   NNrM   )r:   rK   r)   N)__name__
__module____qualname___model_typebytesr
   intr   r   r   r]   r   r;   r?   r   rA   rJ   rN   rQ   rT   boolr   r_   rn   __classcell__)r$   s   @r%   r   r      s   K '"*$%#$/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 .0rG   avgs     r%   	<genexpr>z$Aggregators.var_p.<locals>.<genexpr>        2aAG>2   r5   sumry   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r|   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]   rx   r   ry   s    r%   std_pzAggregators.std_p       [&&v.#566r&   c                 D    t        t        j                  |       dz        S r   )r]   rx   r   r   s    r%   std_szAggregators.std_s   r   r&   N)
ro   rp   rq   staticmethodr   r]   r   r   r   r   r~   r&   r%   rx   rx      s    Ad5k Ae A A Gd5k Ge G G 7d5k 7e 7 7 7d5k 7e 7 7r&   rx   c                 0    t        |       t        |       z  S rM   )r   r5   rG   s    r%   <lambda>r      s    c!fs1vo r&   c                 0    t        |       t        |       z
  S rM   )r2   r3   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_tsrc   rb   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   )r5   	enumerater   )r   r   rc   rb   totalcurr_tsirm   valrG   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)rK   r   r6   rb   rc   align_timestampc                     || _         || _        |j                         | _        || _        || _        d| _        g | _        |j                  | j                  _         y r   )	r   r6   lowerrb   rc   r   rj   rh   r   )r#   r   r6   rb   rc   r   s         r%   r   zTimeSeriesRule.__init__   sR     % $**,..,-$79#-?? r&   Nrecordrd   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)rc   r   rj   rh   r4   ri   )r#   r   rd   rm   r   r   
should_adds          r%   r7   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}   )	r5   rh   r   rj   rc   rb   rt   r6   r;   )r#   rd   r(   r'   s       r%   ri   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   rM   )ro   rp   rq   r   rs   rt   r   r   r]   r   ru   r7   ri   r~   r&   r%   rK   rK      s{      !33 3 	3
 3 3"sEz!2 huo ae *,(5/ ,T ,r&   rK   N) typingr   r   r   r   r   r   	fakeredisr	   r/   fakeredis._helpersr
   r   
_base_typer   r   rx   r   r3   r2   r5   r   r   r   r   r   rs   r]   __annotations__rt   r   rK   r~   r&   r%   <module>r      s    ? ? ? # 4 !^) ^)B7 72 &'<T%4;-"6778 "4sEz"#4694LO4]b4
4(3, 3,r&   