
    AHjF                     f    d dl mZ d Zd Zd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd ZddZd Zd Zy)   )	nativestrc                     t        t        |             D ci c]#  }t        | |   d         t        | |   d         % c}S c c}w )N       )rangelenr   )aListis     W/root/tools/cai/cai_env/lib/python3.12/site-packages/redis/commands/timeseries/utils.pylist_to_dictr      s>    DI#e*DUVqIeAhqk"IeAhqk$::VVVs   (Ac                 j    t        t        |             D ci c]  }| |   d   | |   d    c}S c c}w )zCConvert a list of [key, value] pairs to a dict without forcing str.r   r   )r   r   )pairsr
   s     r   _pairs_to_dictr      s4    .3CJ.?@E!HQKq!$@@@s   0c           
          | j                         D ci c]2  \  }}t        |      t        |t        t        f      rt        |      n|4 c}}S c c}}w )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      sJ     GGIAq 	!jUCL&AilqH  s   7Ac                    | sg S t        | d         dkD  r<| D cg c].  }t        |d   g|dd D cg c]  }t        |       c}z         0 c}}S | D cg c]  }t        |d   t        |d         f        c}S c c}w c c}}w c c}w )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Laqtf!AB%8Qa889LL0891E1Q4qt%&99  9L9s   BA<B#B<Bc                     | sg S t        | d         dkD  r3| D cg c]%  }|d   g|dd D cg c]  }t        |       c}z   ' c}}S | D cg c]  }|d   t        |d         g c}S c c}w c c}}w c c}w )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Eq1AabE2q%(22EE)12AQqT51;22 3E2s   A/A*A/A5*A/c                 @    | syt        | d         t        | d         fS )z2Parse get response. Used by TS.GET (legacy shape).Nr   r   intr   )r   s    r   	parse_getr&   0   s%    x{U8A;///    c                 @    | syt        | d         t        | d         gS )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           
      0   g }| D ]  }|d   s/|j                  t        |d         t        |d         ddgi       7|j                  t        |d         t        |d         t        |d   d         t	        |d   d         gi        t        |d       S )z&Parse multi get response (RESP2 wire).r   r   r   Nc                 4    t        | j                               S Nlistkeysr   s    r   <lambda>zparse_m_get.<locals>.<lambda>N       T!&&(^ r'   key)appendr   r   r%   r   sorted)r   resitems      r   parse_m_getr9   >   s    
C AwJJ	$q'*\$q'-BD$,OPQJJd1g&$T!W-DGAJd1gaj))	 #344r'   c                    t        | t              rbi }| j                         D ]K  \  }}t        |      dkD  r|d   ng }|s|d   g g||<   (|d   t	        |d         t        |d         gg||<   M |S i }| D ]T  }|d   st        |d         g g||d   <   t        |d         t	        |d   d         t        |d   d         gg||d   <   V |S )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   r7   r4   r8   samples         r   parse_m_get_unifiedr=   Q   s    (D!!) 	IIC #D	AT!W2F GR=C Gc&)neF1I6F%GHC	I 

C Aw*473R8CQL tAw'T!WQZ%Q
"34CQL	 Jr'   c           
      X   g }| j                         D ]  \  }}|d   rt        |d         ni }t        |      dkD  r|d   ng }|s |j                  t	        |      |ddgi       R|j                  t	        |      |t        |d         t        |d         gi        t        |d       S )u6   RESP3 wire → today's RESP2 legacy shape for TS.MGET.r   r   Nc                 4    t        | j                               S r,   r-   r0   s    r   r1   z3parse_m_get_resp3_to_resp2_legacy.<locals>.<lambda>x   r2   r'   r3   )r   r   r   r5   r   r%   r   r6   )r   r   r7   r4   r8   labelsr<   s          r   !parse_m_get_resp3_to_resp2_legacyrA   n   s    
C^^% U	T-1!Wa)"IMarJJ	#t(<=>JJ	#VAYvayAQ(RSTU #344r'   c           	          g }| D ];  }|j                  t        |d         t        |d         t        |d         gi       = t	        |d       S )z(Parse multi range response (RESP2 wire).r   r   r   c                 4    t        | j                               S r,   r-   r0   s    r   r1   zparse_m_range.<locals>.<lambda>   r2   r'   r3   )r5   r   r   r    r6   )r   r   r7   r8   s       r   parse_m_rangerD   {   sX    
C X

Id1g&d1g)>DQRG@T(UVWX#344r'   Nc                     | dg iS t        | t              r| }n| g}d|D cg c]  }t        |      j                          c}iS c c}w )Naggregators)r   r.   r   lower)aggregation_typerF   aggs      r   _m_range_metadatarJ      sS     r"""D)&'(kJsIcN002JKKJs    Ac                 B   t        | t              rHi }| j                         D ]1  \  }}t        |      dkD  r|d   ng }|d   |t	        |d         g||<   3 |S i }t        |j                  d            }| D ]%  }t        |d         |t	        |d         g||d   <   ' |S )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   rH   )r   r;   r   r   r"   rJ   getr   )r   r   r7   r4   r8   metadatas         r   parse_m_range_unifiedrO      s     (D!!) 	JIC"%d)a-tAwRHQ+>tBx+HICH	J 

C ,>!?@H 
47#Q(
DG
 Jr'   c                     g }| j                         D ]F  \  }}|d   rt        |d         ni }|d   }|j                  t        |      |t	        |      gi       H t        |d       S )uG   RESP3 wire → today's RESP2 legacy shape for TS.MRANGE / TS.MREVRANGE.r   rL   c                 4    t        | j                               S r,   r-   r0   s    r   r1   z5parse_m_range_resp3_to_resp2_legacy.<locals>.<lambda>   r2   r'   r3   )r   r   r5   r   r    r6   )r   r   r7   r4   r8   r@   sampless          r   #parse_m_range_resp3_to_resp2_legacyrS      sq    
C^^% E	T-1!Wa)"r(

IcNV[-A$BCDE #344r'   r,   )helpersr   r   r   r   r    r"   r&   r)   r9   r=   rA   rD   rJ   rO   rS    r'   r   <module>rV      sQ    WA
	:
3025&:
55	L25r'   