
    KiN                         d dl Z d dl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 d dlmZmZmZmZ d dlmZ  G d d	      Zy)
    N)ListAnyDict)_msgs)extract_args)commandCommandItemIntKey)SimpleErrorOK	casematchSimpleString)ScalableCuckooFilterc            	       0   e Zd ZdZedededefd       Zedededefd       Z	 e
d ee      efdej                  	      ded
edefd       Z e
d ee      efdej                  	      ded
edefd       Z e
d ee      efdej                  	      dededefd       Z e
d ee      efdej                  	      ded
edefd       Z e
d ee      efdej                  	      ded
edefd       Z e
d e       fdej                  	      dedeeef   fd       Z e
d e       fef      dededee   fd       Z e
d e       fef      dededee   fd       Z e
d ee      efef      dededee   fd       Z e
d e       efefej8                  	      ded ededefd!       Z e
d" e       efdej8                  	      ded#edee   fd$       Z e
d% e       eefdej8                  	      ded&ed'edefd(       Z y))*CFCommandsMixinzECommand mixin for emulating `redis-py`'s cuckoo filter functionality.keyitemreturnc                     | j                   | j                  t        d             | j                   j                  |      }| j	                          |rdS dS )N      r   )valueupdater   insertupdated)r   r   ress      e/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fakeredis/stack/_cf_mixin.py_cf_addzCFCommandsMixin._cf_add   sH    99JJ+D12iit$qQ    c                 >    | j                   || j                   v rdS dS Nr   r   )r   )r   r   s     r   	_cf_existzCFCommandsMixin._cf_exist   s!    YY*tsyy/@qHqHr    zCF.ADD )namefixedrepeatflagsr   c                 .    t         j                  ||      S N)r   r   selfr   r   s      r   cf_addzCFCommandsMixin.cf_add   s    &&sE22r    zCF.ADDNXc                 L    ||j                   v ryt        j                  ||      S Nr   )r   r   r   r+   s      r   cf_addnxzCFCommandsMixin.cf_addnx   s$    CII&&sE22r    zCF.COUNTc                     |j                   yt        |j                         t        urt        t        j
                        |j                   j                  |      S r/   )r   typer   r   msgsWRONGTYPE_MSGcount)r,   r   r   s      r   cf_countzCFCommandsMixin.cf_count$   sD    99		?"66d0011yyt$$r    zCF.DELc                     |j                   t        t        j                        |j                   j	                  |      }|rdS dS r"   )r   r   r3   NOT_FOUND_MSGdelete)r,   r   r   r   s       r   cf_delzCFCommandsMixin.cf_del,   s>    99d0011iiu%qQr    z	CF.EXISTSc                 .    t         j                  ||      S r*   r   r#   r+   s      r   cf_existzCFCommandsMixin.cf_exist3   s    ((e44r    zCF.INFOc           	      <   |j                   t        |j                         t        urt        d      |j                   j                  t        |j                   j                        t        |j                   j                  |j                   j                  z  |j                   j                  z        |j                   j                  |j                   j                  |j                   j                  |j                   j                  |j                   j                  dS )N...)s   Sizes   Number of bucketss   Number of filterss   Number of items inserteds   Number of items deleteds   Bucket sizes   Max iterationss   Expansion rate)r   r2   r   r   capacitylenbucketsintinitial_capacityexpansion_rateinserteddeletedbucket_size	max_swaps)r,   r   s     r   cf_infozCFCommandsMixin.cf_info7   s    99SYY7K Ke$$YY''"%cii&7&7"8"%syy'9'9CII<V<V'VZ]ZcZcZrZr&r"s),););(+		(9(9II11"yy22"yy77	
 		
r    z	CF.INSERT)r%   r&   r'   argsc                    t        |ddd      \  \  }}}t        |      dk  st        |d   d      st        d      |d	d  }|xs d
}|j                  |rt        t
        j                        |j                  t        |      |_        |D cg c]  }| j                  ||       }}|j                          |S c c}w N)z	+capacitynocreateFT)error_on_unexpectedleft_from_first_unexpected   r   s   itemsr?   r   r   )
r   rA   r   r   r   r3   r8   r   r   r   )	r,   r   rK   r@   	no_create	left_argsitemsr   r   s	            r   	cf_insertzCFCommandsMixin.cf_insertF   s    +7+cg,
(9y
 y>AYy|X%Fe$$!"#t99d001199,X6CI3894t||C&99
 :s   B=zCF.INSERTNXc                    t        |ddd      \  \  }}}t        |      dk  st        |d   d      st        d      |d	d  }|xs d
}|j                  |rt        t
        j                        |j                  t        |      |_        g }|D ]C  }||j                  v r|j                  d       #|j                  | j                  ||             E |j                          |S rM   )r   rA   r   r   r   r3   r8   r   appendr   r   )	r,   r   rK   r@   rR   rS   rT   r   r   s	            r   cf_insertnxzCFCommandsMixin.cf_insertnxZ   s    +7+cg,
(9y
 y>AYy|X%Fe$$!"#t99d001199,X6CI 	4Dsyy 

1

4<<T23		4
 	
r    z
CF.MEXISTSvaluesc                 V    |D cg c]  }t         j                  ||       }}|S c c}w r*   r<   )r,   r   rY   r   r   s        r   
cf_mexistszCFCommandsMixin.cf_mexistsr   s-    BHI((e4II
 Js   &z
CF.RESERVEr@   c                     |j                   t        t        j                        t	        |d      \  \  }}}}|xs d}|xs d}t        |||      }|j                  |       t        S )N)z+bucketsizez+maxiterationsz
+expansion   rQ   )rH   max_iterations)r   r   r3   ITEM_EXISTS_MSGr   r   r   r   )	r,   r   r@   rK   rH   r^   	expansion_r   s	            r   
cf_reservezCFCommandsMixin.cf_reservew   so    99 d22336BA7
30ni! (-2!&Q$X;Wef

5	r    zCF.SCANDUMPiteratorc                 &   |j                   t        t        j                        t	        j
                         }|dk(  rP|j                   j                  |       |j                  d       |j                         }|j                          d|gS dd gS )Nr   r   )
r   r   r3   r8   ioBytesIOtofileseekreadclose)r,   r   rc   fss        r   cf_scandumpzCFCommandsMixin.cf_scandump   ss    99d0011JJLq=IIQFF1IAGGIq6Mt9r    zCF.LOADCHUNKra   datac                     |j                   4t        |j                         t        urt        t        j
                        t        j                  |      |_         |j                          t        S r*   )	r   r2   r   r   r3   r8   	frombytesr   r   )r,   r   ra   rn   s       r   cf_loadchunkzCFCommandsMixin.cf_loadchunk   sM    99 T#))_<P%Pd0011(2248		r    N)!__name__
__module____qualname____doc__staticmethodr	   bytesrC   r   r#   r   r   r   r3   FLAG_DO_NOT_CREATEr-   r0   r6   r:   r=   r   r   rJ   r   rU   rX   r[   r
   FLAG_LEAVE_EMPTY_VALr   rb   rm   rq   r$   r    r   r   r      s   O[  #   I{ I% IC I I (3';#<e"DRW[WnWno3+ 3e 3 3 p3 *S)=%>$FrY]YpYpq3K 3 3# 3 r3
 *S)=%>$FrY]YpYpq%K %u % % r% (3';#<e"DRW[WnWno+ e   p +c*>&?%GPRZ^ZqZqr5K 5 5# 5 s5 )CE8Bd>U>UV
; 
4s
+; 
 W
 +ceXuh?[  49  @& -xA{ 5 T#Y  B. ,s+?'@%&HRWQYZk E d3i  [ ,suclE84KdKdek S  <  f -s|BdF_F_`{ c d3i  a .U(;BdNgNgh  5 \  ir    r   )re   typingr   r   r   	fakeredisr   r3   fakeredis._command_args_parsingr   fakeredis._commandsr   r	   r
   r   fakeredis._helpersr   r   r   r   fakeredis.modelr   r   r$   r    r   <module>r      s/    	 " " # 8 > > G G 0O Or    