
    1yi)                         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y)    N)AnyCallableListOptional)_msgs)commandKeyInt	BitOffsetBitValuefix_range_string	fix_rangeCommandItem)SimpleError	casematch)VersionTypec                   2    e Zd ZU eed<   eed<   deddfdZy)BitfieldEncodingsignedsizeencodingreturnNc                 0   t        j                  d|      }|t        t        j                        |d   dk(  | _        t        |d         | _        | j                  dk  s| j                  | j
                  rdndkD  rt        t        j                        y )Ns   ^([ui])(\d+)$      i   @   ?   )rematchr   msgsINVALID_BITFIELD_TYPEr   intr   )selfr   r    s      h/var/www/html/content_weaver/venv/lib/python3.12/site-packages/fakeredis/commands_mixins/bitmap_mixin.py__init__zBitfieldEncoding.__init__   s}    *H5=d8899Ah$&aM	99q=DIIt{{Cd8899 D    )__name__
__module____qualname__bool__annotations__r#   bytesr&    r'   r%   r   r      s    L
I	: 	: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        |   |i | |  y N)superr&   )r$   r1   r2   	__class__s      r%   __initzBitmapCommandsMixin.__init$   s    $)&)r'   valuec           	          dj                  | D cg c],  }t        |      j                  d      j                  dd      . c}      S c c}w )N 0b   0)joinbinlstriprjust)r8   is     r%   _bytes_as_bin_stringz(BitmapCommandsMixin._bytes_as_bin_string(   s9    ww5IaAd+11!S9IJJIs   1A)flagskeybitc                 "   |dk7  r|dk7  rt        t        j                        t        |      dkD  rt        t        j                        t        |      dk(  r(| j
                  dk  rt        t        j                        d}t        |      dk(  rH| j
                  dk\  r9t        |d   d      }|s(t        |d   d      st        t        j                        |j                  	|dk(  rd	S dS t        |      dk(  rdnt        j                  |d         }|r| j                  |j                        n|j                  }t        |      dk  rt        |      nt        j                  |d         }t        |      }t        |||      \  }}||cxk(  rd	k(  ry	 |r||| n| j                  |||       }|j                  t        |            }	|	d	k7  r|	|r|z  }	|	S |d
z  z  }	|	S |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
   decoderC   r   findstr)
r$   rE   rF   r1   bit_modestartsource_valueendlengthresults
             r%   bitposzBitmapCommandsMixin.bitpos,   s   !8qd>>??t9q=d3344t9>dllT1d3344t9>dlld2 a&1HId1gw$?!$"7"788992(q(Y!^DG)<?Gt00;SYY#&t9>c,szz$q'7J\"uc62
sC2 2:|E#.@Y@YZfglmpZq@r""3s8,R<xe8F
  /4ai8F
 	 AX#d)q. ^a'Fr'   BITCOUNT)namefixedrepeatrD   c                 ^   t        |      dk(  rE|j                  yt        t        j	                  |j                  d            j                  d      S dt        |      cxk  rdk  sn t        t        j                        	 t        j                  |d         }t        j                  |d         }d}t        |      dk(  r(| j                  d	k  rt        t        j                        t        |      dk(  rH| j                  d	k\  r9t        |d   d
      }|s(t        |d   d      st        t        j                        |j                  y|rW| j                  |j                  r|j                  nd      }t        ||t        |            \  }}|j                  d||      }|S t        ||t        |j                              \  }}|j                  || }t        t        j	                  |d            j                  d      S # t        $ r}| j                  dk\  r|Y d }~yd }~ww xY w)Nr   little1r   rH   r   )rJ      FrI   rK   rL   r'   )rO   r8   r?   r#   
from_bytescountr   r!   rP   r
   rR   rQ   r   rC   r   )	r$   rE   r1   rV   rX   erU   r8   ress	            r%   bitcountzBitmapCommandsMixin.bitcountP   s    t9>yy s~~cii:;AA#FFCI""d3344	JJtAw'E**T!W%C
 t9>dllT1d3344t9>dlld2 a&1HId1gw$?!$"7"78899--399cii#NE)%c%jAJE3{{3s3CJ%eS#cii.A
s		%$3>>%2399#>>-  	||v%	s   0H 	H,H''H,)r^   offsetc                     |j                  d      }|dz  }|dz  }d|z
  }	 ||   }d|z  |z  rdS dS # t        $ r Y yw xY w)Nr'   r<   rJ   r   r   )get
IndexError)r$   rE   ri   r8   byte	remainingactual_bitoffset
actual_vals           r%   getbitzBitmapCommandsMixin.getbitv   sg    {QJ	y=	tJ **j8q?a?  		s   3 	??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                   k7  s| j                  dk(  r|	|
k7  r|j                  t        |             |S )N    r<   rJ   r   )   )r8   rO   	bytearrayr-   rQ   update)r$   rE   ri   r8   valrm   rn   ro   neededold_bytenew_byte	old_valuereconstructeds                r%   setbitzBitmapCommandsMixin.setbit   s    990ciig{QJ	y=s8a<$ SX\*F7V##Ct9A:1(8#89HA)9$9"::H%1Eq5y	!#&d399,1E(V^J^JJu]+,r'   opkeysc                     |d   j                   }|d   j                   }d}|t        |      k  rR||   j                   ||   j                   nd}t         fdt        ||      D              }|dz  }|t        |      k  rR|S )Nr   r   r'   c              3   6   K   | ]  \  }} ||        y wr4   r.   ).0abr~   s      r%   	<genexpr>z-BitmapCommandsMixin._bitop.<locals>.<genexpr>   s     =TQ1a=s   )r8   rO   r-   zip)r~   r   r8   ansrB   s   `    r%   _bitopzBitmapCommandsMixin._bitop   s|    Q1gmm#d)m%)!W]]%>DGMMCE=Se_==CFA #d)m 
r'   op_namedstc                    t        |      dk(  r(t        t        j                  j	                  d            t        |d      r | j                  d g| }nt        |d      r | j                  d g| }nt        |d      r | j                  d g| }nt        |d	      rht        |      d
k7  rt        t        j                        |d   j                  }t        t        t        |            D cg c]
  }d||   z
   c}      }n(t        t        j                  j	                  d            ||_        t        |j                        S c c}w )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      )rO   r   r!   WRONG_ARGS_MSG6formatr   r   BITOP_NOT_ONE_KEY_ONLYr8   r-   range)r$   r   r   r   rg   rw   rB   s          r%   r   zBitmapCommandsMixin.bitop   s   t9>d2299'BCCWf%$++0848Cw&$++0848Cw'$++0848Cw'4yA~!$"="=>>q'--C%C/JQ,Q/JKCd2299'BCC	399~	 Ks   7Er   c                     d}t        d|j                        D ]5  }|dz  }| j                  |||z         s||j                  r|dk(  rdndz  }7 |S )Nr   r   rM   )r   r   rq   r   )r$   rE   r   ri   r   rB   s         r%   _bitfield_getz!BitmapCommandsMixin._bitfield_get   s[    q(--( 	?AAIC{{3
+X__arQ>	? 
r'   overflowincrc                    |j                   r)d|j                  dz
  z   }d|j                  dz
  z  dz
  }nd}d|j                  z  dz
  }| j                  |||      }	||	n|}
|j                   s|
dz  }
|dk(  r||
|z   cxk  r|k  sy  y |dk(  r)|
|z   |kD  r|d}}
|j                   s|dk  r|
|z   |k  r|d}}
|
|z  }
|
d|j                  z  dz
  z  }
|j                   r|
|kD  r|
d|j                  z  z  }
t        d|j                        D ]0  }|
|j                  |z
  dz
  z	  dz  }| j	                  |||z   |       2 ||
S |	S )Nr   r   l       FAIL   SAT)r   r   r   r   r}   )r$   rE   r   ri   r   r8   r   	min_value	max_valuer   	new_valuerB   rF   s                r%   _bitfield_setz!BitmapCommandsMixin._bitfield_set   s    ?? 123Ix}}q01Q6IIhmm+q0I  h7 =Ce	&Iw	Y5E(R(R )S4)+"+Q4	4!8T1AI1M"+Q4	T	a8==(A--	??y94hmm++Iq(--( 	.A!2Q!671<CKKVaZ-	. "My2s2r'   )r^   r_   c           
      X   d}g }d}|t        |      k  rt        ||   d      rK|dz   t        |      k  r:||dz      j                         }|dvrt        t        j
                        |dz  }nt        ||   d      rf|dz   t        |      k  rUt        ||dz            }t        j                  ||dz            }|j                  | j                  |||             |dz  }n5t        ||   d	      r|dz   t        |      k  rn| j                  |t        ||dz            t        j                  ||dz            t        j                  ||dz            |
      }|j                  |       |dz  }nt        ||   d      r|dz   t        |      k  rn| j                  |t        ||dz            t        j                  ||dz            t        j                  ||dz            |      }|j                  |       |dz  }nt        t        j                        |t        |      k  r|S )N   WRAPr   s   overflowr   )r   r   r   r   s   getrH   s   set)rE   r   ri   r8   r   rc   s   incrby)rE   r   ri   r   r   )rO   r   upperr   r!   INVALID_OVERFLOW_TYPEr   r   rR   appendr   r   r
   rP   )	r$   rE   r1   r   resultsrB   r   ri   r{   s	            r%   bitfieldzBitmapCommandsMixin.bitfield   s   ')#d)ma+.1q53t93DA;,,.#==%d&@&@AAQ47F+AD	0A+DQK8"))$q1u+6t11#xHIQ47F+AD	0A ..-d1q5k:$++DQK8**T!a%[1% / 	 y)Q47I.1q53t93D ..-d1q5k:$++DQK8DQK0% / 	 y)Q!$"7"788A #d)mD r'   )Nr   ) r(   r)   r*   r   _BitmapCommandsMixin__initstaticmethodr-   rT   rC   r   r	   r
   r!   FLAG_DO_NOT_CREATEr   r#   r[   rh   r   rq   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 c%j#0G0GH!+ !C ! !# ! I!F *SZM5($JaJab#?K #? #?# #? c#?J CJ	*+	@+ 	@s 	@s 	@ ,	@ c%j)X./+ s 3 3  0, 8S#JO, [ S   eSU^c%j]+U  [ S  ,& 8H RU Z]   $'3'3 #'3 	'3
 '3 }'3 '3 
#'3R CJ=%2&K & &$x}:M & 3&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      s>    	 0 0 #	 	 	 6 ): : m mr'   