
    <i                         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 ddlmZmZmZmZmZ ddlmZmZmZmZ  G d d	e          Z G d
 d          ZdS )z:Command mixin for emulating `redis-py`'s BF functionality.    )AnyListUnionDict)ExpandingBloomFilter)_msgs)extract_args)commandKeyCommandItemFloatInt)SimpleErrorOK	casematchSimpleStringc                   j     e Zd ZdZddededef fdZd	ed
ef fdZ	e
deded
d fd            Z xZS )ScalableBloomFilterr   d   MbP?   capacity
error_ratescalec                 Z    t                                          ||           || _        d S N)super__init__r   )selfr   r   r   	__class__s       /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/stack/_bf_mixin.pyr   zScalableBloomFilter.__init__   s(    :...


    keyreturnc                     || v rdS | j         | j        k    r)| j        | j        k    rt	          t
          j                  t          t          |           	                    |           dS )NTF)
r   	NO_GROWTHelements_addedestimated_elementsr   msgsFILTER_FULL_MSGr   r   add)r   r#   r    s     r!   add_itemzScalableBloomFilter.add_item   se    $;;4:''D,?4CZ,Z,Zd2333!4((,,S111ur"   bkwargsc                     |                      |          \  }}}}t          ||          }|                    ||           ||_        |S )N)r   r   )_parse_footerr   _parse_blooms_added_elements)clsr-   r.   sizeest_els	added_elsfprblms           r!   bf_frombytesz ScalableBloomFilter.bf_frombytes   sS    (+(9(9!(<(<%gy#!7sCCC!T"""'
r"   )r   r   r   )__name__
__module____qualname__r&   intfloatr   bytesboolr,   classmethodr   r9   __classcell__)r    s   @r!   r   r      s        I       c            E d       U c 6K    [    r"   r   c                      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d$S )%BFCommandsMixinr#   itemr$   c                 j    | j                             |          }|                                  |rdndS Nr      )valuer,   updated)r#   rE   ress      r!   _bf_addzBFCommandsMixin._bf_add&   s2    i  &&qqQr"   c                     || j         v rdndS )NrH   r   )rI   )r#   rE   s     r!   	_bf_existzBFCommandsMixin._bf_exist,   s    SY&&qqQ.r"   zBF.ADD )namefixedrepeatrI   c                 8    t                               ||          S r   rD   rL   r   r#   rI   s      r!   bf_addzBFCommandsMixin.bf_add0   s    &&sE222r"   zBF.CARDc                     |j         j        S r   )rI   r'   )r   r#   s     r!   bf_cardzBFCommandsMixin.bf_card4   s    y''r"   zBF.MADDvaluesc                 $    fd|D             }|S )Nc                 F    g | ]}t                               |          S rO   rT   .0rI   r#   s     r!   
<listcomp>z+BFCommandsMixin.bf_madd.<locals>.<listcomp>:   s)    GGGu&&sE22GGGr"   rO   r   r#   rY   rK   s    `  r!   bf_maddzBFCommandsMixin.bf_madd8   s!    GGGGGGG
r"   z	BF.EXISTSc                 8    t                               ||          S r   rD   rN   rU   s      r!   bf_existzBFCommandsMixin.bf_exist=   s    ((e444r"   z
BF.MEXISTSc                 $    fd|D             }|S )Nc                 F    g | ]}t                               |          S rO   rb   r\   s     r!   r^   z.BFCommandsMixin.bf_mexists.<locals>.<listcomp>C   s)    III((e44IIIr"   rO   r_   s    `  r!   
bf_mexistszBFCommandsMixin.bf_mexistsA   s!    IIII&III
r"   z
BF.RESERVE)rP   rQ   rR   flagsr   r   argsc                 &   |j         t          t          j                  t	          |d          \  \  }}}||rt          t          j                  |d}|rt          j        n|}|                    t          |||                     t          S )N)
+expansion
nonscalingr   )
rI   r   r)   ITEM_EXISTS_MSGr	   $NONSCALING_FILTERS_CANNOT_EXPAND_MSGr   r&   updater   )	r   r#   r   r   rh   	expansionnon_scaling_r   s	            r!   
bf_reservezBFCommandsMixin.bf_reserveF   s     9 d2333&249U&V&V# K! [ dGHHHI1<K#--)

&xUCCDDD	r"   z	BF.INSERTc                     t          |ddd          \  \  }}}}}}t          |          dk     st          |d         d          st          d          |d	d          }	|pd
}|pd}j        |rt          t
          j                  ||rt          t
          j                  |d}|rt          j	        n|}
j        t          |||
          _         fd|	D             }
                                 |S )N)z	+capacityz.errorrj   rk   nocreateFT)error_on_unexpectedleft_from_first_unexpectedr   r   s   items...rH   r   r   c                 <    g | ]}                     |          S rO   )rL   )r]   rE   r#   r   s     r!   r^   z-BFCommandsMixin.bf_insert.<locals>.<listcomp>u   s'    9994t||C&&999r"   )r	   lenr   r   rI   r)   NOT_FOUND_MSGrm   r   r&   rJ   )r   r#   rh   r   r   ro   rp   	no_create	left_argsitemsr   rK   s   ``          r!   	bf_insertzBFCommandsMixin.bf_insert\   s,   O[K %'+	P
 P
 P
LA:y+y9 y>>AYy|X%F%Fe$$$!""(5
?s9d0111 [ dGHHHI1<K#--)9+Hj%HHCI999995999
r"   zBF.INFOc                 0   |j         t          |j                   t          urt          d          t	          |          dk    rt          t
          j                  t	          |          dk    rO|j         j        |j         j        |j         j	        dz   |j         j        |j         j
        dk    r|j         j
        n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	          r|j         j	        dk    r|j         j	        nd S t          t
          j                  )
Nrw   rH   r   )s   Capacitys   Sizes   Number of filterss   Number of items inserteds   Expansion rates   CAPACITYs   SIZEs   FILTERSs   ITEMSs	   EXPANSION)rI   typer   r   ry   r)   SYNTAX_ERROR_MSGr(   r'   
expansionsr   r   )r   r#   rh   s      r!   bf_infozBFCommandsMixin.bf_infoy   sx   9SY7J J Je$$$t99q==d3444t99>> Y91&)i&:Q&>-0Y-E69io6I6I39??t   T!Wk** 	59//tAw(( 		59//tAw
++ 	59'!++tAw)) 	59++tAw-- 	5+.9+?!+C+C39''Md3444r"   zBF.SCANDUMPiteratorc                     |j         t          t          j                  |dk    rt	          |j                   }d|gS dd gS rG   )rI   r   r)   rz   r?   )r   r#   r   ss       r!   bf_scandumpzBFCommandsMixin.bf_scandump   sF    9d0111q==ci  Aq6Mt9r"   zBF.LOADCHUNKdatac                     |j         4t          |j                   t          urt          t          j                  |                    t                              |                     t          S r   )	rI   r   r   r   r)   rz   rn   r9   r   )r   r#   r   r   s       r!   bf_loadchunkzBFCommandsMixin.bf_loadchunk   sT    9 T#)__<O%O%Od0111

&33D99:::	r"   N) r:   r;   r<   staticmethodr   r?   r=   rL   rN   r
   r   r   rV   rX   r   r`   rc   rf   r   r   r)   FLAG_LEAVE_EMPTY_VALr>   r   rr   r~   r   r   r   r   r   r   rO   r"   r!   rD   rD   %   s-       [  #    \
 /{ /% /C / / / \/ W(33':#;#;U"CBOOO3+ 3e 3 3 3 3 PO3 W)CC(;$<$<#>rJJJ(; (3 ( ( ( KJ( W)CC(;$<$<e#DeXVVV;  49    WV W+cc*=&>&>%FrRRR5K 5 5# 5 5 5 SR5 W,ss+>'?'?&GQVPXYYYk E d3i    ZY WCEE

 x'	 	 	
k 
u 
 
TY 
^j 
 
 
	 	
 W+cceeXuh???[  49    @?8 W)CCEE8UH===5; 5u 5sDPSDT?T9U 5 5 5 >=54 W-s|BdF_```{ c d3i    a` W.U(;BdNghhh s % L    ih  r"   rD   N)__doc__typingr   r   r   r   	probablesr   	fakeredisr   r)   fakeredis._command_args_parsingr	   fakeredis._commandsr
   r   r   r   r   fakeredis._helpersr   r   r   r   r   rD   rO   r"   r!   <module>r      s   @ @ ) ) ) ) ) ) ) ) ) ) ) ) * * * * * * # # # # # # 8 8 8 8 8 8 E E E E E E E E E E E E E E G G G G G G G G G G G G    .   0         r"   