
    <i)                         d dl Z d dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZ d dlmZmZ d dlmZ  G d d          Z G d	 d
          ZdS )    N)AnyCallableListOptional)_msgs)commandKeyInt	BitOffsetBitValuefix_range_string	fix_rangeCommandItem)SimpleError	casematch)VersionTypec                   4    e Zd ZU eed<   eed<   deddfdZdS )BitfieldEncodingsignedsizeencodingreturnNc                 ,   t          j        d|          }|t          t          j                  |d         dk    | _        t          |d                   | _        | j        dk     s| j        | j        rdndk    rt          t          j                  d S )Ns   ^([ui])(\d+)$      i   @   ?   )rematchr   msgsINVALID_BITFIELD_TYPEr   intr   )selfr   r    s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/commands_mixins/bitmap_mixin.py__init__zBitfieldEncoding.__init__   s    *H55=d8999Ah$&aMM	9q==DIt{)BCCd8999 DC    )__name__
__module____qualname__bool__annotations__r#   bytesr&    r'   r%   r   r      sJ         LLL
III	: 	:4 	: 	: 	: 	: 	: 	:r'   r   c                   
    e Zd Zdededdf fdZededefd            Z e	 e
e          efefej                  d	ed
ededefd            Z e	d e
e          fefej                  d	ededefd            Z e	 e
e          ef          d	ededefd            Z e	 e
e          eef          d	edededefd            Zedeeegef         dedefd            Z e	e e
            f e
e          f          dedededefd            Zd	edededefdZ	 	 d!d	ededededee         dedee         fdZ e	 e
e          fef          d	ededeee                  fd             Z xZS )"BitmapCommandsMixinargskwargsr   Nc                 >     t                      j        |i | |  d S N)superr&   )r$   r1   r2   	__class__s      r%   __initzBitmapCommandsMixin.__init$   s+    $)&)))!!!r'   valuec                 @    d                     d | D                       S )N c                 z    g | ]8}t          |                              d                               dd          9S )0b   0)binlstriprjust).0is     r%   
<listcomp>z<BitmapCommandsMixin._bytes_as_bin_string.<locals>.<listcomp>*   s:    IIIaAd++11!S99IIIr'   )join)r8   s    r%   _bytes_as_bin_stringz(BitmapCommandsMixin._bytes_as_bin_string(   s#    wwII5IIIJJJr'   )flagskeybitc                    |dk    r|dk    rt          t          j                  t          |          dk    rt          t          j                  t          |          dk    r$| j        dk     rt          t          j                  d}t          |          dk    rR| j        dk    rGt          |d         d          }|s/t          |d         d          st          t          j                  |j        
|dk    rd	ndS t          |          dk    rdnt          j	        |d                   }|r| 
                    |j                  n|j        }t          |          dk    rt          |          nt          j	        |d                   }t          |          }t          |||          \  }}||cxk    rd	k    rn nd	S |r
|||         n| 
                    |||                   }|                    t          |                    }	|	d	k    r|	|r|n|d
z  z  }	n0|dk    r*t          |          dk    rt          |j                  d
z  }	|	S )Nr   r         Fr      bit   byter=   )r   r!   BIT_ARG_MUST_BE_ZERO_OR_ONElenSYNTAX_ERROR_MSGversionr   r8   r
   decoderF   r   findstr)
r$   rH   rI   r1   bit_modestartsource_valueendlengthresults
             r%   bitposzBitmapCommandsMixin.bitpos,   sF   !88qd>???t99q==d3444t99>>dlT11d3444t99>>dld22 a&11H 9Id1gw$?$? 9!$"7888922q(YY!^^DG)<)<?GVt00;;;SY#&t99>>c,sz$q'7J7J\""uc622
sC222:r|E#I..@Y@YZfglmpgpZq@r@r""3s88,,R<<x8eeeai8FFAXX#d))q.. ^^a'Fr'   BITCOUNT)namefixedrepeatrG   c                    t          |          dk    rI|j        dS t          t                              |j        d                                        d          S dt          |          cxk    rdk    sn t          t          j                  	 t          j
        |d                   }t          j
        |d                   }n%# t          $ r}| j        dk    r|Y d }~dS d }~ww xY wd}t          |          dk    r$| j        d	k     rt          t          j                  t          |          dk    rR| j        d	k    rGt          |d         d
          }|s/t          |d         d          st          t          j                  |j        dS |r]|                     |j        r|j        nd          }t          ||t          |                    \  }}|                    d||          }|S t          ||t          |j                            \  }}|j        ||         }t          t                              |d                                        d          S )Nr   little1r   rK   r   )rM      FrL   rN   rO   r'   )rR   r8   r?   r#   
from_bytescountr   r!   rS   r
   rU   rT   r   rF   r   )	r$   rH   r1   rY   r[   erX   r8   ress	            r%   bitcountzBitmapCommandsMixin.bitcountP   s=    t99>>y qs~~ci::;;AA#FFFCII""""""""d3444	JtAw''E*T!W%%CC 	 	 	|v%%11111	 t99>>dlT11d3444t99>>dld22 a&11H 9Id1gw$?$? 9!$"788891 	--39.Mcii#NNE)%c%jjAAJE3{{3s33CJ%eS#ci..AA
s	%)$3>>%223399#>>>s   4C 
C*C%%C*)ra   offsetc                     |                     d          }|dz  }|dz  }d|z
  }	 ||         }n# t          $ r Y dS w xY wd|z  |z  rdndS )Nr'   r=   rM   r   r   )get
IndexError)r$   rH   rl   r8   byte	remainingactual_bitoffset
actual_vals           r%   getbitzBitmapCommandsMixin.getbitv   sy    {QJ	y=	tJJ 	 	 	11	**j8?qqa?s   / 
==c                    |j         |j         nd}|dz  }|dz  }d|z
  }t          |          dz
  |k     r|t          |          dz
  z
  }|d|z  z  }||         }	|dk    r	|	d|z  z  }
n	|	d|z   z  }
|	|
k    r|nd|z
  }t          |          }|
||<   t          |          |j         k    s| j        dk    r(|	|
k    r"|                    t          |                     |S )N    r=   rM   r   )   )r8   rR   	bytearrayr-   rT   update)r$   rH   rl   r8   valrp   rq   rr   neededold_bytenew_byte	old_valuereconstructeds                r%   setbitzBitmapCommandsMixin.setbit   s   90ciig{QJ	y=s88a<$ SXX\*F7V##Ct9A::1(8#89HHA)9$9"::H%11EEq5y	!#&d39,,1E1E(V^J^J^JJu]++,,,r'   opkeysc                      |d         j         }|d         j         }d}|t          |          k     r]||         j         ||         j         nd}t           fdt          ||          D                       }|dz  }|t          |          k     ]|S )Nr   r   r'   c              3   6   K   | ]\  }} ||          V  d S r4   r.   )rB   abr   s      r%   	<genexpr>z-BitmapCommandsMixin._bitop.<locals>.<genexpr>   s1      ==TQ1a======r'   )r8   rR   r-   zip)r   r   r8   ansrC   s   `    r%   _bitopzBitmapCommandsMixin._bitop   s    Q1gm#d))mm%)!W]%>DGMMCE====Se__=====CFA #d))mm 
r'   op_namedstc                    t          |          dk    r,t          t          j                            d                    t          |d          r | j        d g|R  }nt          |d          r | j        d g|R  }nt          |d          r | j        d g|R  }nt          |d	          rot          |          d
k    rt          t          j                  |d         j        t          fdt          t                              D                       }n,t          t          j                            d                    ||_        t          |j                  S )Nr   bitops   andc                     | |z  S r4   r.   r   r   s     r%   <lambda>z+BitmapCommandsMixin.bitop.<locals>.<lambda>   
    1q5 r'   s   orc                     | |z  S r4   r.   r   s     r%   r   z+BitmapCommandsMixin.bitop.<locals>.<lambda>   r   r'   s   xorc                     | |z  S r4   r.   r   s     r%   r   z+BitmapCommandsMixin.bitop.<locals>.<lambda>   r   r'   s   notr   c                 &    g | ]}d |         z
  S )   r.   )rB   rC   rz   s     r%   rD   z-BitmapCommandsMixin.bitop.<locals>.<listcomp>   s"    JJJQ,Q/JJJr'   )rR   r   r!   WRONG_ARGS_MSG6formatr   r   BITOP_NOT_ONE_KEY_ONLYr8   r-   range)r$   r   r   r   rj   rz   s        @r%   r   zBitmapCommandsMixin.bitop   si   t99>>d299'BBCCCWf%% 	D$+0084888CCw&& 
	D$+0084888CCw'' 	D$+0084888CCw'' 	D4yyA~~!$"=>>>q'-CJJJJ%C//JJJKKCCd299'BBCCC	39~~r'   r   c                     d}t          d|j                  D ]4}|dz  }|                     |||z             r||j        r|dk    rdndz  }5|S )Nr   r   rP   )r   r   rt   r   )r$   rH   r   rl   r   rC   s         r%   _bitfield_getz!BitmapCommandsMixin._bitfield_get   sh    q(-(( 	? 	?AAIC{{3
++ ?X_>arrQ>
r'   r   overflowincrc                 @   |j         rd|j        dz
  z   }d|j        dz
  z  dz
  }nd}d|j        z  dz
  }|                     |||          }	||	n|}
|j         s|
dz  }
|dk    r||
|z   cxk    r|k    sn d S |dk    r'|
|z   |k    r|d}}
|j         s|dk     r|
|z   |k     r|d}}
|
|z  }
|
d|j        z  dz
  z  }
|j         r|
|k    r|
d|j        z  z  }
t          d|j                  D ]/}|
|j        |z
  dz
  z	  dz  }|                     |||z   |           0||
n|	S )Nr   r   l       FAIL   SAT)r   r   r   r   r   )r$   rH   r   rl   r   r8   r   	min_value	max_valuer   	new_valuerC   rI   s                r%   _bitfield_setz!BitmapCommandsMixin._bitfield_set   s    ? 	1 123Ix}q01Q6IIIhm+q0I  h77 =CCe	 	'&Iw	Y5E(R(R(R(R(R(R(R(R44)++"+Q4	 /4!88T1AI1M1M"+Q4	T	a8=(A--	? 	,y944hm++Iq(-(( 	. 	.A!2Q!671<CKKVaZ----!Myys2r'   )ra   rb   c           
      F   d}g }d}|t          |          k     rt          ||         d          rW|dz   t          |          k     rA||dz                                            }|dvrt          t          j                  |dz  }nt          ||         d          r||dz   t          |          k     rft          ||dz                      }t          j        ||dz                      }|	                    | 
                    |||                     |dz  }nst          ||         d	          r|dz   t          |          k     r|                     |t          ||dz                      t          j        ||dz                      t          j        ||dz                      |
          }|	                    |           |dz  }nt          ||         d          r|dz   t          |          k     r|                     |t          ||dz                      t          j        ||dz                      t          j        ||dz                      |          }|	                    |           |dz  }nt          t          j                  |t          |          k     |S )N   WRAPr   s   overflowr   )r   r   r   r   s   getrK   s   set)rH   r   rl   r8   r   rf   s   incrby)rH   r   rl   r   r   )rR   r   upperr   r!   INVALID_OVERFLOW_TYPEr   r   rU   appendr   r   r
   rS   )	r$   rH   r1   r   resultsrC   r   rl   r~   s	            r%   bitfieldzBitmapCommandsMixin.bitfield   s   ')#d))mma+.. 91q53t993D3DA;,,..#===%d&@AAAQ47F++ 9AD		0A0A+DQK88")$q1u+66t11#xHHIIIQ47F++ 9AD		0A0A ..-d1q5k::$+DQK88*T!a%[11% /  	 y)))Q47I.. 91q53t993D3D ..-d1q5k::$+DQK88DQK00% /  	 y)))Q!$"7888A #d))mmD r'   )Nr   ) r(   r)   r*   r   _BitmapCommandsMixin__initstaticmethodr-   rW   rF   r   r	   r
   r!   FLAG_DO_NOT_CREATEr   r#   r^   rk   r   rt   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r6   s   @r%   r0   r0   #   s       "C "3 "4 " " " " " " KE Kc K K K \K Wcc%jj#0GHHH!+ !C ! !# ! ! ! IH!F W*SSZZM5($Jabbb#?K #? #?# #? #? #? cb#?J WCCJJ	*+++	@+ 	@s 	@s 	@ 	@ 	@ ,+	@ Wcc%jj)X.//+ s 3 3    0/, 8S#JO, [ S    \ WeSSUU^cc%jj]++U  [ S    ,+& 8H RU Z]      $'3 '3'3 #'3 	'3
 '3 }'3 '3 
#'3 '3 '3 '3R WCCJJ=%222&K & &$x}:M & & & 32& & & & &r'   r0   )r   typingr   r   r   r   	fakeredisr   r!   fakeredis._commandsr   r	   r
   r   r   r   r   r   fakeredis._helpersr   r   fakeredis._typingr   r   r0   r.   r'   r%   <module>r      s8   				 0 0 0 0 0 0 0 0 0 0 0 0 # # # # # #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6 5 5 5 5 5 5 5 ) ) ) ) ) ): : : : : : : : m m m m m m m m m mr'   