
    KiS                         d Z ddlmZ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mZ ddlmZmZmZmZ ddlmZ  G d d	      Zy
)z:Command mixin for emulating `redis-py`'s BF functionality.    )AnyListUnionDict)_msgs)extract_args)commandKeyCommandItemFloatInt)SimpleErrorOK	casematchSimpleString)ScalableBloomFilterc                   <   e 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      ded	edefd
       Z e	d e
e      fd      ded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      efd      ded	ed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efefej*                        dedededede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eeef   f   fd       Z e	d e
       efdej*                        dededee   fd        Z e	d! e
       eefdej*                        deded"edefd#       Zy$)%BFCommandsMixinkeyitemreturnc                 d    | j                   j                  |      }| j                          |rdS dS Nr      )valueadd_itemupdated)r   r   ress      e/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fakeredis/stack/_bf_mixin.py_bf_addzBFCommandsMixin._bf_add   s,    ii  &qQ    c                 &    || j                   v rdS dS )Nr   r   )r   )r   r   s     r   	_bf_existzBFCommandsMixin._bf_exist   s    SYY&q.Q.r!   zBF.ADD )namefixedrepeatr   c                 .    t         j                  ||      S Nr   r    selfr   r   s      r   bf_addzBFCommandsMixin.bf_add   s    &&sE22r!   zBF.CARDc                 .    |j                   j                  S r)   )r   elements_added)r,   r   s     r   bf_cardzBFCommandsMixin.bf_card   s    yy'''r!   zBF.MADDvaluesc                 V    |D cg c]  }t         j                  ||       }}|S c c}w r)   r*   r,   r   r1   r   r   s        r   bf_maddzBFCommandsMixin.bf_madd    s-    @FGu&&sE2GG
 H   &z	BF.EXISTSc                 .    t         j                  ||      S r)   r   r#   r+   s      r   bf_existzBFCommandsMixin.bf_exist%   s    ((e44r!   z
BF.MEXISTSc                 V    |D cg c]  }t         j                  ||       }}|S c c}w r)   r7   r3   s        r   
bf_mexistszBFCommandsMixin.bf_mexists)   s-    BHI((e4II
 Jr5   z
BF.RESERVE)r%   r&   r'   flags
error_ratecapacityargsc                    |j                   t        t        j                        t	        |d      \  \  }}}||rt        t        j
                        |d}|rt        j                  n|}|j                  t        |||             t        S )N)
+expansion
nonscaling   )
r   r   msgsITEM_EXISTS_MSGr   $NONSCALING_FILTERS_CANNOT_EXPAND_MSGr   	NO_GROWTHupdater   )	r,   r   r<   r=   r>   	expansionnon_scaling_scales	            r   
bf_reservezBFCommandsMixin.bf_reserve.   s     99 d2233&249U&V# K! [dGGHHI1<#--)

&xUCD	r!   z	BF.INSERTc                    t        |ddd      \  \  }}}}}}t        |      dk  st        |d   d      st        d      |d	d  }	|xs d
}|xs d}|j                  |rt        t
        j                        ||rt        t
        j                        |d}|rt        j                  n|}
|j                  t        |||
      |_        |	D cg c]  }| j                  ||       }}|j                          |S c c}w )N)z	+capacityz.errorr@   rA   nocreateFT)error_on_unexpectedleft_from_first_unexpectedrB   r   s   items...r   gMbP?d   )r   lenr   r   r   rC   NOT_FOUND_MSGrE   r   rF   r    r   )r,   r   r>   r=   r<   rH   rI   	no_create	left_argsitemsrK   r   r   s                r   	bf_insertzBFCommandsMixin.bf_insertD   s	   O[K %'+	P
LA:y+y9 y>AYy|X%Fe$$!"(5
?s99d0011 [dGGHHI1<#--)99+Hj%HCI3894t||C&99
 :s   C=zBF.INFOc                    |j                   t        |j                         t        urt        d      t	        |      dkD  rt        t
        j                        t	        |      dk(  r|j                   j                  |j                   j                  |j                   j                  dz   |j                   j                  |j                   j                  dkD  r|j                   j                  dS d dS t        |d   d      r|j                   j                  S t        |d   d      r|j                   j                  S t        |d   d      r|j                   j                  dz   S t        |d   d      r|j                   j                  S t        |d   d	      r1|j                   j                  dkD  r|j                   j                  S d S t        t
        j                        )
NrQ   r   r   )s   Capacitys   Sizes   Number of filterss   Number of items inserteds   Expansion rates   CAPACITYs   SIZEs   FILTERSs   ITEMSs	   EXPANSION)r   typer   r   rS   rC   SYNTAX_ERROR_MSGestimated_elementsr/   
expansionsrK   r   )r,   r   r>   s      r   bf_infozBFCommandsMixin.bf_infoa   s   99SYY7J Je$$t9q=d3344t9> YY9911&)ii&:&:Q&>-0YY-E-E69iioo6I399?? 
 PT  T!Wk*99///tAw(99///tAw
+99''!++tAw)99+++tAw-+.99+?+?!+C399''MMd3344r!   zBF.SCANDUMPiteratorc                     |j                   t        t        j                        |dk(  rt	        |j                         }d|gS dd gS r   )r   r   rC   rT   bytes)r,   r   r_   ss       r   bf_scandumpzBFCommandsMixin.bf_scandump|   sE    99d0011q=cii Aq6Mt9r!   zBF.LOADCHUNKdatac                     |j                   4t        |j                         t        urt        t        j
                        |j                  t        j                  |             t        S r)   )	r   rZ   r   r   rC   rT   rG   bf_frombytesr   )r,   r   r_   rd   s       r   bf_loadchunkzBFCommandsMixin.bf_loadchunk   sJ    99 T#))_<O%Od0011

&33D9:	r!   N) __name__
__module____qualname__staticmethodr   ra   intr    r#   r	   r
   r   r-   r0   r   r4   r8   r:   r   r   rC   FLAG_LEAVE_EMPTY_VALfloatr   rL   rX   r   r   r   r^   rc   rg   r$   r!   r   r   r      s   [  #  
 /{ /% /C / / (3':#;U"CBO3+ 3e 3 3 P3 )C(;$<#>rJ(; (3 ( K( )C(;$<e#DeXV;  49  W +c*=&>%FrR5K 5 5# 5 S5 ,s+>'?&GQVPXYk E d3i  Z E

 x''	
k 
u 
 
TY 
^j 
	
 +ceXuh?[  49  @8 )CE8UH=5; 5u 5sDPSDT?T9U 5 >54 -s|BdF_F_`{ c d3i  a .U(;BdNgNgh s % L  ir!   r   N)__doc__typingr   r   r   r   	fakeredisr   rC   fakeredis._command_args_parsingr   fakeredis._commandsr	   r
   r   r   r   fakeredis._helpersr   r   r   r   fakeredis.modelr   r   r$   r!   r   <module>rv      s1    @ ) ) $ 8 E E G G / r!   