
    <ic                         d dl Z 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 d dlmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZm Z   G d	 d
          Z!dS )    N)ListUnionOptionalAnySetDict)_msgs)extract_args)commandKeyCommandItemIntFloat	Timestamp)DatabaseSimpleStringOKSimpleError	casematch)VersionType)
TimeSeriesTimeSeriesRuleAGGREGATORS
ClientInfoc                   	    e Zd ZU  e            Zee         ed<   g dZ fdZ	e
dededefd            Zdee         ded	         fd
Ze
dedefd            ZdedefdZ ed ee          fefej                  dededeeef         fd            Z ed ee          fefej                  dededefd            Z ed ee          eefefej                  dededededef
d            Z  ed ee          fef          dedede!ee"eef                           fd            Z# ed ee          eef ee          eefej                  dedee         fd            Z$ ed ee          e%e%fd ej                  ded!ed"edefd#            Z& ed$ ee           ee          eee%fefej                  d%ed&ed'ed(ed)ededefd*            Z' ed+ ee           ee          fd ej                  d%ed&edefd,            Z(ded-ededefd.Z) ed/ ee          efefej                  ded-ededefd0            Z* ed1 ee          efefej                  ded2ededefd3            Z+ ed4 ee          fefej                  dededefd5            Z,d6eded!ed"ededeee"eef                           fd7Z- ed8 ee          eefefej                  ded!ed"ededeee"eef                           f
d9            Z. ed: ee          eefefej                  ded!ed"ededeee"eef                           f
d;            Z/ ed<efefej                  dedeee"eeee"eef                           f                           fd=            Z0 ed>efefej                  dedee         fd?            Z1d6ed@eeee         f         dAedBedeeee         f         f
dCZ2d6ed!ed"edefdDZ3 edEeefefej                  d!ed"ededeee"eeee"eef                           f                           fdF            Z4 edGeefefej                  d!ed"ededeee"eeee"eef                           f                           fdH            Z5 xZ6S )ITimeSeriesCommandsMixin_timeseries_keys)s   BLOCKs   FIRSTs   LASTs   MINs   MAXs   SUMc                 F     t                      j        |i | |  |  |  d S N)super__init__)selfargskwargs	__class__s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/stack/_timeseries_mixin.pyr!   z TimeSeriesCommandsMixin.__init__   s7    $)&)))!%%%    tsfilter_expressionreturnc                 P   |sdS |                     d          dk    rt          |                    d                    dk    rt          t          j                  |                    d          \  }}|dk    r	|| j        v S |                    d          rW|                    d          rBt          |dd                             d	                    }|| j        v o| j        |         |vS || j        vp| j        |         |k    S |                     d
          dk    rt          |                    d
                    dk    rt          t          j                  |                    d
          \  }}|dk    r	|| j        vS |                    d          rW|                    d          rBt          |dd                             d	                    }|| j        v o| j        |         |v S || j        v o| j        |         |k    S t          t          j                  )NTs   !=      -   (   )      ,   =)
findlensplitr   msgs TIMESERIES_BAD_FILTER_EXPRESSIONlabels
startswithendswithset)r(   r)   labelvaluevaluess        r&   _filter_expression_checkz0TimeSeriesCommandsMixin._filter_expression_check   s&     	4!!%((B..$**51122a77!$"GHHH,22599LE5}}	))%% M%..*>*> MU1R4[..t4455	)Lbi.>f.LL	)FRYu-=-FF!!$''2--$**40011Q66!$"GHHH,22488LE5}}BI--%% I%..*>*> IU1R4[..t4455	)Hbi.>&.HHBI%C")E*:e*CC$?@@@r'   filter_expressionsr   c                     g } fdt           j        D             t           _        t           j        D ]R} j                            |          j        t           fd|D                       r|                               S|S )Nc                 &    h | ]}|j         v |S  )_db).0kr"   s     r&   	<setcomp>z:TimeSeriesCommandsMixin._get_timeseries.<locals>.<setcomp>3   s'     4
 4
 4
1==A===r'   c              3   D   K   | ]}                     |          V  d S r   )r@   )rF   exprr"   r(   s     r&   	<genexpr>z:TimeSeriesCommandsMixin._get_timeseries.<locals>.<genexpr>8   s3      ZZt400T::ZZZZZZr'   )r   r   rE   getr>   allappend)r"   rA   rests_keyr(   s   `   @r&   _get_timeseriesz'TimeSeriesCommandsMixin._get_timeseries1   s    "$4
 4
 4
 4
.?4
 4
 4
0 .> 	 	Ff%%+BZZZZZGYZZZZZ 

2
r'   duplicate_policyc                 V      d u p$t           fdt          j        D                       S )Nc              3   8   K   | ]}t          |          V  d S r   )r   )rF   itemrR   s     r&   rK   zETimeSeriesCommandsMixin._validate_duplicate_policy.<locals>.<genexpr>>   s?       /
 /
26I&--/
 /
 /
 /
 /
 /
r'   )anyr   DUPLICATE_POLICIES)rR   s   `r&   _validate_duplicate_policyz2TimeSeriesCommandsMixin._validate_duplicate_policy<   sJ    4' 
3 /
 /
 /
 /
:Q:d/
 /
 /
 ,
 ,
 	
r'   namec                    t          |dd          \  \  }}}}\  }}}	|pd}|pd}t          |d          s<t          |d          s,t          t          j                            d                    |                                }|pd}|d	z  dk    rt          t          j                  |                     |          st          t          j	                  |r|                                nd }t          |	          dk    rXt          |	d         d
          rt          |	          dz  dk    r,t          t          j                            d                    t          |	          dk    r/t          t          |	dd d         |	dd d                             ni }
|| j        dk    rd}t          || j        |||||||
	  	        }| j                            |           |S )N)
+retentionz	*encoding+chunk_size*duplicate_policy++ignoreFerror_on_unexpectedr   s
   COMPRESSEDs   UNCOMPRESSED	TS.CREATEi         LABELSr-   r1   TS.ADD)rb   s   block)	rY   database	retentionencoding
chunk_sizerR   ignore_max_time_diffignore_max_val_diffr9   )r
   r   r   r7   BAD_SUBCOMMAND_MSGformatlowerTIMESERIES_BAD_CHUNK_SIZErX   #TIMESERIES_INVALID_DUPLICATE_POLICYr5   dictzipversionr   rE   r   add)r"   rY   r#   rf   rg   rh   rR   ri   rj   	left_argsr9   rO   s               r&   _create_timeseriesz*TimeSeriesCommandsMixin._create_timeseriesB   s   [$)   	thHj*:<g=QSfjs N	,}(M22 	Ki/6Z6Z 	Kd5<<[IIJJJ>>##'4
>Qd<===../?@@ 	HdFGGG7GQ+11333Ty>>Ay1y'I'ISQZ^^^_M_cdMdMdd5<<XFFGGG@CIQR@R@Rc)ADqD/9QTT?;;<<<XZ#(<(<'X!-!5 3

 

 

 	!!$'''
r'   zTS.INFO)rY   fixedrepeatflagskeyr#   c                 v   |j         t          t          j                  | j        j        dk    r?d |j         j                                        D             }d |j         j        D             }n"|j         j        }d |j         j        D             }t          |j         j
                  t          |j         j
                  dz  t          |j         j                  z   t          |j         j
                  dk    r|j         j
        d         d         ndt          |j         j
                  dk    r|j         j
        d         d         nd|j         j        t          |j         j
                  dz  |j         j        z  |j         j        |j         j        |j         j        ||j         j        ||j         j        g dS )	Nr-   c                     g | ]	\  }}||g
S rD   rD   rF   rG   vs      r&   
<listcomp>z3TimeSeriesCommandsMixin.ts_info.<locals>.<listcomp>o   s     BBBAq!fBBBr'   c                 p    g | ]3}|j         j        |j        |j                                        |j        g4S rD   dest_keyrY   bucket_duration
aggregatorupperalign_timestamprF   rules     r&   r~   z3TimeSeriesCommandsMixin.ts_info.<locals>.<listcomp>p   sK        #T%94?;P;P;R;RTXThi  r'   c                 p    i | ]3}|j         j        |j        |j                                        |j        g4S rD   r   r   s     r&   
<dictcomp>z3TimeSeriesCommandsMixin.ts_info.<locals>.<dictcomp>v   sK        "T%94?;P;P;R;RTXTh$i  r'   rb   r   r,   )s   totalSampless   memoryUsages   firstTimestamps   lastTimestamps   retentionTimes
   chunkCounts	   chunkSizes	   chunkTypes   duplicatePolicys   labelss	   sourceKeys   ruless   keySelfNames   Chunks)r>   r   r7   TIMESERIES_KEY_DOES_NOT_EXIST_client_infoprotocol_versionr9   itemsrulesr5   sorted_listrg   rf   rh   rR   
source_keyrY   )r"   ry   r#   r9   r   s        r&   ts_infozTimeSeriesCommandsMixin.ts_infoj   s   9d@AAA-22BB)9)?)?)A)ABBBF IO  EE
 Y%F IO  E
 !!677	 566:SAS=T=TT>A#)BW>X>X[\>\>\sy4Q7::bc>A#)BW>X>X[\>\>\ci3B7::bc!i1sy4559SY=QQ).), #	 :).IN
 
 	
r'   ra   c                     |j         t          t          j                   | j        |j        g|R  |_         t          S r   )r>   r   r7   TIMESERIES_KEY_EXISTSru   ry   r   )r"   ry   r#   s      r&   	ts_createz!TimeSeriesCommandsMixin.ts_create   s>    9 d8999+D+CG;d;;;		r'   rd   	timestampr>   c                 "   t          |dd          \  \  }}|j        &|                     | j        |j        g|R             |                     |          st          t          j                  |j        	                    |||          }|S )N)z*on_duplicateFr_   )
r
   r>   updateru   ry   rX   r   r7   ro   rs   )r"   ry   r   r>   r#   on_duplicatert   rO   s           r&   ts_addzTimeSeriesCommandsMixin.ts_add   s    %1$8J`e%f%f%f"9JJ.t.sw>>>>???..|<< 	HdFGGGimmIul;;
r'   zTS.GET)rY   rv   rw   c                     |j         t          t          j                  |j                                         }|| j        j        dk    rg }|S )N   )r>   r   r7   r   rL   r   r   )r"   ry   r#   rO   s       r&   ts_getzTimeSeriesCommandsMixin.ts_get   sI    9d@AAAimmoo;4,=BBC
r'   zTS.MADDc                 h   t          |          dz  dk    rt          t          j                  g }t	          dt          |          d          D ]a}|||dz            \  }}}|j        t          t          j                  |                    |j                            ||                     b|S )Nr   r   )	r5   r   r7   WRONG_ARGS_MSG6ranger>   r   rN   rs   )r"   r#   resultsiry   r   r>   s          r&   ts_maddzTimeSeriesCommandsMixin.ts_madd   s     t99q=Ad2333q#d))Q'' 	< 	<A$(QUO!CEy !$"DEEENN39==E::;;;;r'   zTS.DELrD   from_tsto_tsc                 x    |j         t          t          j                  |j                             ||          S r   )r>   r   r7   r   delete)r"   ry   r   r   s       r&   ts_delzTimeSeriesCommandsMixin.ts_del   s3    9d@AAAy///r'   zTS.CREATERULEr   r   _r   r   c                    |j         t          t          j                  |j         t          t          j                  t	          |          dk    r,t          t          j                            d                    	 t	          |          dk    rt          |d                   nd}n'# t          $ r t          t          j	                  w xY w|j         
                    |j                  }|t          t          j                  |t          vrt          t          j                  t          |j         |j         |||          }	|j                             |	           t"          S )Nr1   zts.createruler   )r>   r   r7   r   r5   r   rl   int
ValueErrorTIMESERIES_BAD_TIMESTAMPget_rulery   TIMESERIES_RULE_EXISTSr   TIMESERIES_BAD_AGGREGATION_TYPEr   add_ruler   )
r"   r   r   r   r   r   r#   r   existing_ruler   s
             r&   ts_createrulez%TimeSeriesCommandsMixin.ts_createrule   s;    #d@AAA>!d@AAAt99q==d299/JJKKK	=.1$ii1nnc$q'lll!OO 	= 	= 	=d;<<<	="(11(,??$d9:::[((dBCCCj.
O]lmm!!$'''	s   *B, ,$CzTS.DELETERULEc                     |j         t          t          j                  |j                             |j                  }|t          t          j                  |j                             |           t          S r   )	r>   r   r7   r   r   ry   TIMESERIES_RULE_DOES_NOT_EXISTdelete_ruler   )r"   r   r   rO   s       r&   ts_deleterulez%TimeSeriesCommandsMixin.ts_deleterule   sh     #d@AAA(2(8(A(A(,(O(O;dABBB$$S)))	r'   addendc                 |   t          |dd          \  \  }}|j        &|                     | j        |j        g|R             |j        }|Lt          |j                  dk    r!t          t          j                              }n|j        d         d         }t          |j                  dk    r0||j        d         d         k     rt          t          j                  	 |j                            ||          S # t          $ r3 | j        dk    rt          j        nt          j        }t          |          w xY w)N)z
+timestampFr_   r   r,   )   )r
   r>   r   ru   ry   r5   r   r   timer   r7   TIMESERIES_INVALID_TIMESTAMPincrbyr   rr   &TIMESERIES_TIMESTAMP_LOWER_THAN_MAX_V7&TIMESERIES_TIMESTAMP_LOWER_THAN_MAX_V6)r"   ry   r   r#   r(   rt   
timeseriesmsgs           r&   _ts_inc_or_decz&TimeSeriesCommandsMixin._ts_inc_or_dec   sN   ' %
 
 
y
 9JJ.t.swCCCCDDDY
::)**a//%%+B/2z%&&**rJ4J24Nq4Q/Q/Qd?@@@	#9##B/// 	# 	# 	# <4'' ;;@ 
 c"""	#s   #C> >=D;z	TS.INCRBYc                       | j         ||g|R  S r   r   )r"   ry   r   r#   s       r&   	ts_incrbyz!TimeSeriesCommandsMixin.ts_incrby  s    "t"366666r'   z	TS.DECRBY
subtrahendc                 "     | j         || g|R  S r   r   )r"   ry   r   r#   s       r&   	ts_decrbyz!TimeSeriesCommandsMixin.ts_decrby  s!    "t"3;d;;;;r'   zTS.ALTERc           	         |j         t          t          j                  t	          |dd          \  \  }}}\  }}}|"|dz  dk    rt          t          j                  |                     |          st          t          j                  |r|                                nd }t          |          dk    rXt          |d         d          rt          |          dz  dk    r,t          t          j                            d	                    t          |          dk    r/t          t          |dd d         |dd d                             ni }	|p|j         j        |j         _        |p|j         j        |j         _        |p|j         j        |j         _        |p|j         j        |j         _        |p|j         j        |j         _        |	p|j         j        |j         _        |                                 t,          S )
N)r[   r\   r]   r^   Fr_   rb   r   rc   r-   r1   rd   )r>   r   r7   r   r
   rn   rX   ro   rm   r5   r   rk   rl   rp   rq   rf   rh   rR   ri   rj   r9   updatedr   )
r"   ry   r#   rf   rh   rR   ri   rj   rt   r9   s
             r&   ts_alterz TimeSeriesCommandsMixin.ts_alter  s   9d@AAA Tjo   	l	_)Z!13^4HJ]aj !j1n&9&9d<===../?@@ 	HdFGGG7GQ+11333Ty>>Ay1y'I'ISQZ^^^_M_cdMdMdd5<<XFFGGG@CIQR@R@Rc)ADqD/9QTT?;;<<<XZ'>39+>	)ASY-A	%5%S9S	")=)_A_	&(;(\sy?\	%!5SY%5		r'   reversec                    d}t          ||dd          \  \  }\  }}	}
}\  }}}}}d}d }t          |          dk    rEt          |d         d          st          t          j                  |dd          }d |D             }||||rt          t          j                  ||d	vrt          t          j                  |!|d
k    r|}n|dk    r|}nt          |          }|"|t          vrt          t          j                  ||	                    ||||	|
||          }n!|
                    |||||	|
|||||||          }d |D             }|S )N)latestz++filter_by_valuez+countz*alignz*+aggregationz*buckettimestampemptyF)r`   left_from_first_unexpectedTr   s   FILTER_BY_TSr1   c                 ,    g | ]}t          |          S rD   )r   rF   xs     r&   r~   z2TimeSeriesCommandsMixin._range.<locals>.<listcomp>B  s    333AQ333r'   )r.      +   ~r   r.   c                 .    g | ]}|d          |d         gS )r   r1   rD   r   s     r&   r~   z2TimeSeriesCommandsMixin._range.<locals>.<listcomp>c  s$    )))!ad|)))r'   )r
   r5   r   r   r7   r   r   r   r   r   	aggregate)r"   r   r(   r   r   r#   
RANGE_ARGSr   	value_min	value_maxcountalignr   r   bucket_timestampr   rt   	filter_tsrO   s                      r&   _rangezTimeSeriesCommandsMixin._range,  s    w
 zuafggg	
&I-_ )-	y>>AYq\?;; 8!$"6777!!""I33333I5#48H8TX]8Td2333',<DV,V,Vd2333}}$E

!j&C&CdBCCC((7E9i	SZ[[CC,,  C  *)S)))
r'   zTS.RANGEc                 n    |j         t          t          j                   | j        d|j         ||g|R  S NFr>   r   r7   r   r   )r"   ry   r   r   r#   s        r&   ts_rangez TimeSeriesCommandsMixin.ts_rangef  s?     9d@AAAt{5#)WeCdCCCCr'   zTS.REVRANGEc                 r    |j         t          t          j                   | j        d|j         ||g|R  }|S NTr   )r"   ry   r   r   r#   rO   s         r&   ts_revrangez#TimeSeriesCommandsMixin.ts_revrangen  sC     9d@AAAdk$	7EADAAA
r'   zTS.MGETc                    d\  }}}d}|t          |          k     r?t          ||         d          r	d}|dz  }nt          ||         d          rd}|dz  }nt          ||         d          rug |dz  }|t          |          k     rZt          ||         d          rD                    ||                    |t          |          k     rt          ||         d          Dnct          ||         d          rMg }|dz  }|t          |          k     r3|                    ||                    |dz  }|t          |          k     3|t          |          k     ?|r.,t          t          j                            d	                    |t          |          dk    r,t          t          j                            d	                    |                     |          }| j        j	        d
k    r,|rd |D             S fd|D             }n9d |D             }n,|rd |D             }nfd|D             }nd |D             }|S )N)FFNNr   s   LATESTTr1   s
   WITHLABELSs   SELECTED_LABELSs   FILTERzts.mgetr-   c                     g | ]?}|j         d  |j                                        D             |                                g@S )c                     g | ]	\  }}||g
S rD   rD   r|   s      r&   r~   z>TimeSeriesCommandsMixin.ts_mget.<locals>.<listcomp>.<listcomp>  s     "J"J"Jfq!Aq6"J"J"Jr'   )rY   r9   r   rL   rF   r(   s     r&   r~   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<listcomp>  sE    kkkZ\"J"J	8I8I"J"J"JBFFHHUkkkr'   c                 b    g | ]*j         fd D                                             g+S )c                 @    g | ]}|j         v |j         |         gS rD   r9   rF   r=   r(   s     r&   r~   z>TimeSeriesCommandsMixin.ts_mget.<locals>.<listcomp>.<listcomp>  s4    lllUY^bdbkYkYkry'78YkYkYkr'   rY   rL   rF   r(   selected_labelss    @r&   r~   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<listcomp>  sU        Wllllolllnpntntnvnvw  r'   c                 F    g | ]}|j         g |                                gS rD   r   r   s     r&   r~   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<listcomp>  s)    DDD2RVVXX.DDDr'   c                 T    i | ]%}|j         |j        |                                pg g&S rD   )rY   r9   rL   r   s     r&   r   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<dictcomp>  s/    QQQrwBFFHHN ;QQQr'   c                 f    i | ],j         fd D                                             pg g-S )c                 >    i | ]}|j         v |j         |         S rD   r   r   s     r&   r   z>TimeSeriesCommandsMixin.ts_mget.<locals>.<dictcomp>.<dictcomp>  s1    dddUQVZ\ZcQcQc	% 0QcQcQcr'   r   r   s    @r&   r   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<dictcomp>  sY       
 	 GddddodddB  r'   c                 J    i | ] }|j         i |                                pg g!S rD   r   r   s     r&   r   z3TimeSeriesCommandsMixin.ts_mget.<locals>.<dictcomp>  s-    JJJrwRVVXX^ 4JJJr'   )
r5   r   rN   r   r7   r   rl   rQ   r   r   )	r"   r#   r   with_labelsr)   r   r   rO   r   s	           @r&   ts_mgetzTimeSeriesCommandsMixin.ts_mgetz  s   BZ?_.?#d))mma),, Q47M22 "Q47$677 
"$Q#d))mm	$q'9(E(Em#**47333 #d))mm	$q'9(E(Em47I.. $&!Q#d))mm%,,T!W555FA #d))mm #d))mm&  	F?6d299)DDEEE$,=(>(>!(C(Cd299)DDEEE))*;<<
-22 lkk`jkkkk*   (  
 EDDDD KQQjQQQ ,   
 )   KJzJJJ
r'   zTS.QUERYINDEXc                 b    t          |          }|                     |          }d |D             S )Nc                     g | ]	}|j         
S rD   )rY   r   s     r&   r~   z9TimeSeriesCommandsMixin.ts_queryindex.<locals>.<listcomp>  s    ---B---r'   )listrQ   )r"   r#   rA   r   s       r&   ts_queryindexz%TimeSeriesCommandsMixin.ts_queryindex  s6    !$ZZ))*<==
--*----r'   ts_dictr=   reducerc                 \                                    t          vrt          t          j                  i }|                                D ]}|d         }|                    |d           }|st          t          j                  ||vri ||<   |d         D ];\  }	}
|	||         vrg ||         |	<   ||         |	                             |
           <i }|	                                D ]\  }t                                                    }|                                 d|                                 }d |                                D             }||dd|i}fd|D             }|r|                                 |dgid	|i|g||                    d
          <   |S )Nr   r,   =c                 6    g | ]}|                                 S rD   )decode)rF   ts_names     r&   r~   z;TimeSeriesCommandsMixin._group_by_label.<locals>.<listcomp>  s"    EEEGw~~''EEEr'   s   __reducer__s
   __source__c           	      d    g | ],}|t          t                   |                             g-S rD   )floatr   )rF   r   r   timestamp_valuess     r&   r~   z;TimeSeriesCommandsMixin._group_by_label.<locals>.<listcomp>  sF     ; ; ;ZcE+g"67G	7R"S"STTU; ; ;r'   s   reducerss   sourceszutf-8)rm   r   r   r7   r   r?   rL   r8   rN   r   sortedkeysr  r   encode)r"   r   r   r=   r   ts_mapts_datalabels_dictlabel_valuer   r>   rO   sorted_timestampsrY   sourcesr9   measurementsr  s       `            @r&   _group_by_labelz'TimeSeriesCommandsMixin._group_by_label  s	    --//+%%dBCCC68~~'' 	= 	=G!!*K%//%66K I!$"GHHH&((&({#$+BK = = 	5F;$77757F;'	2{#I.55e<<<<= -3\\^^ 
	p 
	p)K) &'7'<'<'>'> ? ?llnn=={'9'9';';==DEEv{{}}EEEG[.'=RYZF; ; ; ; ;gx; ; ;L  '$$&&&)/+y1IJX_K`bn(oCG$$%%
r'   c                     d |D             }h d}g d\  }}}	}
}d}|t          |          k     r||         dk    r	d}|dz  }n^||         dk    r	d}|dz  }nI||         d	k    rbg |dz  }|t          |          k     rG||         |vr=                    ||                    |dz  }|t          |          k     r
||         |v=n||         d
k    rbg }	|dz  }|t          |          k     rG||         |vr=|	                    ||                    |dz  }|t          |          k     r
||         |v=nm|dz   t          |          k     r7||         dk    r+||dz            dk    r||dz            }
||dz            }|dz  }n                     ||                    |dz  }|t          |          k     |r.,t          t          j                            d                    |	t          |	          dk    r,t          t          j                            d                                         |	          }|s|
| fd|D             }n( fd|D             }n fd|D             }|
|                     ||
|          } j        j	        dk    rd |
                                D             }|S )Nc                 6    g | ]}|                                 S rD   )rm   )rF   args     r&   r~   z3TimeSeriesCommandsMixin._mrange.<locals>.<listcomp>  s     222cciikk222r'   >      align   count   aggregation   filter_by_ts   filter_by_value   filter   latest   reduce   groupby
   withlabels   selected_labels)FFNNNNr   r  Tr1   r  r  r  r   r  r-   r     z	ts.mrangec                 R    i | ]#}|j         |j        d g i j        |gR  g$S    aggregators)rY   r9   r   rF   r(   r   rt   r   r"   r   s     r&   r   z3TimeSeriesCommandsMixin._mrange.<locals>.<dictcomp>  sY        ")nb%9;4;wPRT[]b;oen;o;o;op  r'   c                 b    i | ]*j         fd D             dg i j        gR  g+S )c                 >    i | ]}|j         v |j         |         S rD   r   r   s     r&   r   z>TimeSeriesCommandsMixin._mrange.<locals>.<dictcomp>.<dictcomp>  s0    ```UVXV_M_M_UBIe,M_M_M_r'   r"  rY   r   )rF   r(   r   rt   r   r   r"   r   s    @r&   r   z3TimeSeriesCommandsMixin._mrange.<locals>.<dictcomp>  so         ````/```#R(DKWeHiHHH  r'   c                 H    i | ]}|j         i d g i j        |gR  gS r!  r&  r#  s     r&   r   z3TimeSeriesCommandsMixin._mrange.<locals>.<dictcomp>$  sZ         #R(DKWeHiHHH  r'   c                 n    g | ]2\  }}|d  |d                                          D             |d         g3S )c                     g | ]	\  }}||g
S rD   rD   r|   s      r&   r~   z>TimeSeriesCommandsMixin._mrange.<locals>.<listcomp>.<listcomp>/  s     DDDAq!fDDDr'   r   r,   )r   )rF   r  r
  s      r&   r~   z3TimeSeriesCommandsMixin._mrange.<locals>.<listcomp>/  sI    wwwWgW^`gGDD1A1A1C1CDDDgbkRwwwr'   )r5   rN   r   r7   r   rl   rQ   r  r   r   r   )r"   r   r   r   r#   
args_lower	arg_wordsr   r   r)   group_byr   r   r   rO   rt   r   s   ````           @@r&   _mrangezTimeSeriesCommandsMixin._mrange  s   22T222

 
 
	 	V
R_.?7 #j//!!!}	))QA-//"QA"444"$Q#j//))jm9.L.L#**:a=999FA #j//))jm9.L.L A)++$&!Q#j//))jm9.L.L%,,T!W555FA #j//))jm9.L.L QZ((Z]j-H-HZXY\]X]M^bkMkMkA;$QU+Q  a)))Q3 #j//!!6  	H?6d299+FFGGG$,=(>(>!(C(Cd299+FFGGG))*;<<
 	8/G4G       $  CC (         %  CC        %  C G$7&&wXwGGC-22wwknktktkvkvwwwC
r'   z	TS.MRANGEc                 "     | j         d||g|R  S r   r-  r"   r   r   r#   s       r&   	ts_mrangez!TimeSeriesCommandsMixin.ts_mrange2  s"     t|E7E9D9999r'   zTS.MREVRANGEc                 "     | j         d||g|R  S r   r/  r0  s       r&   ts_mrevrangez$TimeSeriesCommandsMixin.ts_mrevrange8  s"     t|D'5848888r'   )7__name__
__module____qualname__r<   r   r   bytes__annotations__rW   r!   staticmethodr   boolr@   r   rQ   rX   ru   r   r   r7   FLAG_DO_NOT_CREATEr   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r-  r1  r3  __classcell__)r%   s   @r&   r   r      s	        #&355c%j(((NNN& & & & & AZ AE Ad A A A \A4	$u+ 	$|BT 	 	 	 	 
U 
t 
 
 
 \

&u &
 & & & &P W)CC
OO#5uhdNefff
; 
u 
eSj9I 
 
 
 gf
@ W+cc*oo%7PTPghhh[  <    ih W(33z??Iu"Euh^b^uvvv+ # e E VY    wv W(33z??"4eXFFF+ e eCQVJFWAX8Y    GF Ws:	51JE2%	  	S 	T#Y 	 	 	 	 W(33z??C"=bPTPghhh0+ 0 0C 0E 0 0 0 ih0
 Ws:JsCx%	    	
    
   8 Ws:J0%	   { |    #+ #u #U #| # # # #4 W+cc*oou%=uhVZVmnnn7[ 7% 7 7% 7 7 7 on7 W+cc*oou%=uhVZVmnnn<[ <e <E <e < < < on< W*SS__$6xtOfgggK  %    hg888!+8698BE8NS8	d5e$%	&8 8 8 8t WJIFPUx_c_v  DK D# Dc D% DTXY]^cdgindn^oYpTq D D D D
 Ws:	95x%	  { S  U W[\`afgjlqgqar\sWt     W)E8UHDD[\\\3U 3tDud4cSXjHYCZ>[7[1\,]'^ 3 3 3 ]\3j W/%5($Jabbb.5 .T%[ . . . cb.
!!&*5$s)+;&<!EJ!UZ!	eT#Y	! ! ! !FWt Wc W# We W W W Wr W+i%;UHTXTklll::#&:/4:	d5T%U
*;%< ==>?	@: : : ml:
 W.I(>xW[Wnooo99#&9/49	d5T%U
*;%< ==>?	@9 9 9 po9 9 9 9 9r'   r   )"r   typingr   r   r   r   r   r   	fakeredisr	   r7   fakeredis._command_args_parsingr
   fakeredis._commandsr   r   r   r   r   r   fakeredis._helpersr   r   r   r   r   fakeredis._typingr   fakeredis.modelr   r   r   r   r   rD   r'   r&   <module>rD     s.    8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 # # # # # # 8 8 8 8 8 8 P P P P P P P P P P P P P P P P Q Q Q Q Q Q Q Q Q Q Q Q Q Q ) ) ) ) ) ) O O O O O O O O O O O Op9 p9 p9 p9 p9 p9 p9 p9 p9 p9r'   