
    ng\jF                     h    S SK Jr  S rS rS rS rS rS rS rS	 r	S
 r
S rS rSS jrS rS rg)   )	nativestrc                     [        [        U 5      5       Vs0 s H"  n[        X   S   5      [        X   S   5      _M$     sn$ s  snf )N       )rangelenr   )aListis     Z/home/edenadmin/noVNC/venv/lib/python3.13/site-packages/redis/commands/timeseries/utils.pylist_to_dictr      s@    DI#e*DUVDUqIehqk"Iehqk$::DUVVVs   )Ac                 l    [        [        U 5      5       Vs0 s H  oU   S   X   S   _M     sn$ s  snf )zCConvert a list of [key, value] pairs to a dict without forcing str.r   r   )r   r   )pairsr
   s     r   _pairs_to_dictr      s6    .3CJ.?@.?!HQK!$.?@@@s   1c           
          U R                  5        VVs0 s H7  u  p[        U5      [        U[        [        45      (       a  [        U5      OU_M9     snn$ s  snnf )zApply ``nativestr`` to every key and string-typed value of ``d``.

Used by the RESP3-to-RESP2-legacy adapters so labels coming from a
RESP3 native map match today's RESP2 ``list_to_dict`` semantics.
)itemsr   
isinstancebytesstr)dkvs      r   _nativestr_dictr      sP     GGIDA 	!jUCL&A&AilqH  s   >Ac                 6   U (       d  / $ [        U S   5      S:  aB  U  VVs/ s H2  n[        US   /USS  Vs/ s H  n[        U5      PM     sn-   5      PM4     snn$ U  Vs/ s H  n[        US   [        US   5      45      PM!     sn$ s  snf s  snnf s  snf )zFParse range response. Used by TS.RANGE and TS.REVRANGE (legacy shape).r   r   r   N)r   tuplefloatresponsekwargsrr   s       r   parse_ranger       s    	
8A;!CKL8aqtf!AB%8%Qa%8898LL0891E1Q4qt%&99  9L9s   BBB"&BBc                    U (       d  / $ [        U S   5      S:  a8  U  VVs/ s H(  o"S   /USS  Vs/ s H  n[        U5      PM     sn-   PM*     snn$ U  Vs/ s H  o"S   [        US   5      /PM     sn$ s  snf s  snnf s  snf )zUnified parser for TS.RANGE / TS.REVRANGE.

Returns ``list[list]`` rather than ``list[tuple]`` so the unified
shape is symmetric with the RESP3 wire format.
r   r   r   N)r   r   r   s       r   parse_range_unifiedr"   #   s     	
8A;!<DEHq1AabE2Eq%(E22HEE)12AqT51;22 3E2s   A<A7	A<B7A<c                 J    U (       d  g[        U S   5      [        U S   5      4$ )z2Parse get response. Used by TS.GET (legacy shape).Nr   r   intr   )r   s    r   	parse_getr&   0   s%    x{U8A;///    c                 J    U (       d  g[        U S   5      [        U S   5      /$ )z4Unified parser for TS.GET. Returns ``[int, float]``.Nr   r   r$   )r   r   s     r   parse_get_unifiedr)   7   s%    eHQK011r'   c           
      :   / nU  H  nUS   (       d0  UR                  [        US   5      [        US   5      SS/05        M=  UR                  [        US   5      [        US   5      [        US   S   5      [	        US   S   5      /05        M     [        US S9$ )z&Parse multi get response (RESP2 wire).r   r   r   Nc                 4    [        U R                  5       5      $ Nlistkeysr   s    r   <lambda>parse_m_get.<locals>.<lambda>N       T!&&(^r'   key)appendr   r   r%   r   sorted)r   resitems      r   parse_m_getr:   >   s    
CAwJJ	$q'*\$q'-BD$,OPQJJd1g&$T!W-DGAJd1gaj))	  #344r'   c                    [        U [        5      (       ah  0 nU R                  5        HP  u  p4[        U5      S:  a  US   O/ nU(       d  US   / /X#'   M-  US   [	        US   5      [        US   5      //X#'   MR     U$ 0 nU  HY  nUS   (       d  [        US   5      / /X$S   '   M$  [        US   5      [	        US   S   5      [        US   S   5      //X$S   '   M[     U$ )a  Unified parser for TS.MGET.

Emits ``{key: [labels_dict, sample]}`` where ``sample`` is
``[int, float]`` or ``[]`` when no sample exists. Handles both wire
formats: the RESP2 wire arrives as a list of ``[key, label_pairs,
sample]`` triples; the RESP3 wire is already keyed by name.
r   r   r   )r   dictr   r   r%   r   r   )r   r   r8   r5   r9   samples         r   parse_m_get_unifiedr>   Q   s     (D!!!)IC #D	AT!W2F GR= Gc&)neF1I6F%GH * 

CAw*473R8CQL tAw'T!WQZ%Q
"34CQL	  Jr'   c           
      l   / nU R                  5        H  u  p4US   (       a  [        US   5      O0 n[        U5      S:  a  US   O/ nU(       d!  UR                  [	        U5      USS/05        M]  UR                  [	        U5      U[        US   5      [        US   5      /05        M     [        US S9$ )u6   RESP3 wire → today's RESP2 legacy shape for TS.MGET.r   r   Nc                 4    [        U R                  5       5      $ r,   r-   r0   s    r   r1   3parse_m_get_resp3_to_resp2_legacy.<locals>.<lambda>x   r3   r'   r4   )r   r   r   r6   r   r%   r   r7   )r   r   r8   r5   r9   labelsr=   s          r   !parse_m_get_resp3_to_resp2_legacyrC   n   s    
C^^%	-1!Wa)"IMarJJ	#t(<=>JJ	#VAYvayAQ(RST & #344r'   c           	          / nU  H<  nUR                  [        US   5      [        US   5      [        US   5      /05        M>     [	        US S9$ )z(Parse multi range response (RESP2 wire).r   r   r   c                 4    [        U R                  5       5      $ r,   r-   r0   s    r   r1   parse_m_range.<locals>.<lambda>   r3   r'   r4   )r6   r   r   r    r7   )r   r   r8   r9   s       r   parse_m_rangerG   {   sQ    
C

Id1g&d1g)>DQRG@T(UVW #344r'   Nc                     U c  S/ 0$ [        U [        5      (       a  U nOU /nSU Vs/ s H  n[        U5      R                  5       PM     sn0$ s  snf )Naggregators)r   r.   r   lower)aggregation_typerI   aggs      r   _m_range_metadatarM      sZ     r"""D))&'(kJksIcN002kJKKJs   #Ac                 P   [        U [        5      (       aI  0 nU R                  5        H1  u  p4[        U5      S:  a  US   O/ nUS   U[	        US   5      /X#'   M3     U$ 0 n[        UR                  S5      5      nU  H%  n[        US   5      U[	        US   5      /X$S   '   M'     U$ )a  Unified parser for TS.MRANGE / TS.MREVRANGE.

Emits ``{key: [labels_dict, metadata, samples]}`` regardless of wire
format. RESP2 has no metadata element on the wire, so the command options
are used to synthesize the same ``{"aggregators": ...}`` structure that
RESP3 returns.
r   r   r   rK   )r   r<   r   r   r"   rM   getr   )r   r   r8   r5   r9   metadatas         r   parse_m_range_unifiedrR      s     (D!!!)IC"%d)a-tAwRHQ+>tBx+HICH * 

C ,>!?@H47#Q(
G  Jr'   c                     / nU R                  5        HK  u  p4US   (       a  [        US   5      O0 nUS   nUR                  [        U5      U[	        U5      /05        MM     [        US S9$ )uG   RESP3 wire → today's RESP2 legacy shape for TS.MRANGE / TS.MREVRANGE.r   rO   c                 4    [        U R                  5       5      $ r,   r-   r0   s    r   r1   5parse_m_range_resp3_to_resp2_legacy.<locals>.<lambda>   r3   r'   r4   )r   r   r6   r   r    r7   )r   r   r8   r5   r9   rB   sampless          r   #parse_m_range_resp3_to_resp2_legacyrW      sh    
C^^%	-1!Wa)"r(

IcNV[-A$BCD & #344r'   r,   )helpersr   r   r   r   r    r"   r&   r)   r:   r>   rC   rG   rM   rR   rW    r'   r   <module>rZ      sQ    WA
	:
3025&:
55	L25r'   