
    <i[                         d Z ddlZddlmZmZmZ ddl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  G d	 d
e          Z G d d          ZdS )zECommand mixin for emulating `redis-py`'s cuckoo filter functionality.    N)ListAnyDict)CountingCuckooFilterCuckooFilterFullError)_msgs)extract_args)commandCommandItemIntKey)SimpleErrorOK	casematchSimpleStringc            	       n     e Zd Zddedededef fdZd	ed
ef fdZd	ed
ef fdZd	ed
ef fdZ	 xZ
S )ScalableCuckooFilter         capacitybucket_sizemax_iterations	expansionc                 z    t                                          ||||           || _        d| _        d| _        d S Nr   )super__init__initial_capacityinserteddeleted)selfr   r   r   r   	__class__s        /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fakeredis/stack/_cf_mixin.pyr   zScalableCuckooFilter.__init__   s;    ;	JJJ%-    itemreturnc                     	 t                                          |           n# t          $ r Y dS w xY w| xj        dz  c_        dS )NFr   T)r   addr   r    r"   r&   r#   s     r$   insertzScalableCuckooFilter.insert   sX    	GGKK$ 	 	 	55	ts   !% 
33c                 F    t                                          |          S N)r   checkr*   s     r$   countzScalableCuckooFilter.count   s    ww}}T"""r%   c                 n    t                                          |          r| xj        dz  c_        dS dS )Nr   TF)r   remover!   r*   s     r$   deletezScalableCuckooFilter.delete    s5    77>>$ 	LLALL4ur%   )r   r   r   )__name__
__module____qualname__intr   bytesboolr+   r/   r2   __classcell__)r#   s   @r$   r   r      s          3 C ad      5 T      #% #C # # # # # #5 T          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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j                  dededede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 ))CFCommandsMixinkeyr&   r'   c                     | j         "|                     t          d                     | j                             |          }|                                  |rdndS )N   r   r   )valueupdater   r+   updated)r<   r&   ress      r$   _cf_addzCFCommandsMixin._cf_add(   sU    9JJ+D11222it$$qqQr%   c                 *    | j         || j         v rdndS Nr   r   )r?   )r<   r&   s     r$   	_cf_existzCFCommandsMixin._cf_exist0   s    Y*tsy/@/@qqqHr%   zCF.ADD )namefixedrepeatflagsr?   c                 8    t                               ||          S r-   )r;   rC   r"   r<   r?   s      r$   cf_addzCFCommandsMixin.cf_add4   s    &&sE222r%   zCF.ADDNXc                 N    ||j         v rdS t                              ||          S r   )r?   r;   rC   rM   s      r$   cf_addnxzCFCommandsMixin.cf_addnx8   s*    CI1&&sE222r%   zCF.COUNTc                     |j         dS t          |j                   t          urt          t          j                  |j                             |          S r   )r?   typer   r   msgsWRONGTYPE_MSGr/   )r"   r<   r&   s      r$   cf_countzCFCommandsMixin.cf_count>   sH    91	??"666d0111yt$$$r%   zCF.DELc                     |j         t          t          j                  |j                             |          }|rdndS rE   )r?   r   rS   NOT_FOUND_MSGr2   )r"   r<   r?   rB   s       r$   cf_delzCFCommandsMixin.cf_delF   s>    9d0111iu%%qqQr%   z	CF.EXISTSc                 8    t                               ||          S r-   r;   rF   rM   s      r$   cf_existzCFCommandsMixin.cf_existM   s    ((e4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?   rR   r   r   r   lenbucketsr6   r   expansion_rater    r!   r   	max_swaps)r"   r<   s     r$   cf_infozCFCommandsMixin.cf_infoQ   s    9SY7K K Ke$$$Y'"%ci&7"8"8"%sy'9CI<V'VZ]ZcZr&r"s"s),);(+	(9I1"y2"y7	
 	
 		
r%   z	CF.INSERT)rH   rI   rJ   argsc                     t          |ddd          \  \  }}}t          |          dk     st          |d         d          st          d          |d	d          }|pd
}j        |rt          t
          j                  j        t          |          _         fd|D             }                                 |S )Nz	+capacitynocreateFTerror_on_unexpectedleft_from_first_unexpectedr   r      itemsr]   r   r>   c                 <    g | ]}                     |          S rG   )rC   ).0r&   r<   r"   s     r$   
<listcomp>z-CFCommandsMixin.cf_insert.<locals>.<listcomp>p   s'    9994t||C&&999r%   )	r	   r^   r   r   r?   rS   rW   r   rA   )r"   r<   rc   r   	no_create	left_argsitemsrB   s   ``      r$   	cf_insertzCFCommandsMixin.cf_insert`   s    +7+cg,
 ,
 ,
(9y
 y>>AYy|X%F%Fe$$$!""#t9d01119,X66CI999995999
r%   zCF.INSERTNXc                    t          |ddd          \  \  }}}t          |          dk     st          |d         d          st          d          |d	d          }|pd
}|j        |rt          t
          j                  |j        t          |          |_        g }|D ]J}||j        v r|                    d           !|                    | 	                    ||                     K|
                                 |S )Nre   FTrg   r   r   rj   r]   r   r>   )r	   r^   r   r   r?   rS   rW   r   appendrC   rA   )	r"   r<   rc   r   rn   ro   rp   rB   r&   s	            r$   cf_insertnxzCFCommandsMixin.cf_insertnxt   s   +7+cg,
 ,
 ,
(9y
 y>>AYy|X%F%Fe$$$!""#t9d01119,X66CI 	4 	4Dsy  

1

4<<T223333
r%   z
CF.MEXISTSvaluesc                 $    fd|D             }|S )Nc                 F    g | ]}t                               |          S rG   rZ   )rl   r?   r<   s     r$   rm   z.CFCommandsMixin.cf_mexists.<locals>.<listcomp>   s)    III((e44IIIr%   rG   )r"   r<   ru   rB   s    `  r$   
cf_mexistszCFCommandsMixin.cf_mexists   s!    IIII&III
r%   z
CF.RESERVEr   c                     |j         t          t          j                  t	          |d          \  \  }}}}|pd}|pd}t          |||          }|                    |           t          S )N)z+bucketsizez+maxiterationsz
+expansionr   r   )r   r   )r?   r   rS   ITEM_EXISTS_MSGr	   r   r@   r   )	r"   r<   r   rc   r   r   r   _r?   s	            r$   
cf_reservezCFCommandsMixin.cf_reserve   s~    9 d23336BA7
 7
30ni! (-2!&Q$X;Wefff

5	r%   zCF.SCANDUMPiteratorc                 2   |j         t          t          j                  t	          j                    }|dk    r[|j                             |           |                    d           |                                }|	                                 d|gS dd gS )Nr   r   )
r?   r   rS   rW   ioBytesIOtofileseekreadclose)r"   r<   r}   fss        r$   cf_scandumpzCFCommandsMixin.cf_scandump   s    9d0111JLLq==IQFF1IIIAGGIIIq6Mt9r%   zCF.LOADCHUNKr{   datac                     |j         4t          |j                   t          urt          t          j                  t                              |          |_         |                                 t          S r-   )	r?   rR   r   r   rS   rW   	frombytesrA   r   )r"   r<   r{   r   s       r$   cf_loadchunkzCFCommandsMixin.cf_loadchunk   sU    9 T#)__<P%P%Pd0111(22488		r%   N) r3   r4   r5   staticmethodr   r7   r6   rC   rF   r
   r   r   rS   FLAG_DO_NOT_CREATErN   rP   rU   rX   r[   r   r   rb   r   rq   rt   rx   r   FLAG_LEAVE_EMPTY_VALr   r|   r   r   rG   r%   r$   r;   r;   '   s       [  #    \ I{ I% IC I I I \I W(33';#<#<e"DRW[Wnooo3+ 3e 3 3 3 3 po3 W*SS)=%>%>$FrY]Ypqqq3K 3 3# 3 3 3 rq3
 W*SS)=%>%>$FrY]Ypqqq%K %u % % % % rq% W(33';#<#<e"DRW[Wnooo+ e     po W+cc*>&?&?%GPRZ^Zqrrr5K 5 5# 5 5 5 sr5 W)CCEE8Bd>UVVV
; 
4s
+; 
 
 
 WV
 W+cceeXuh???[  49    @?& W-xAAA{ 5 T#Y    BA. W,ss+?'@'@%&HRWQYZZZk E d3i    [Z W,ssuuclE84Kdeeek S  <    fe W-s|BdF_```{ c d3i    a` W.U(;BdNghhh  5 \    ih  r%   r;   )__doc__r   typingr   r   r   	probablesr   r   	fakeredisr   rS   fakeredis._command_args_parsingr	   fakeredis._commandsr
   r   r   r   fakeredis._helpersr   r   r   r   r   r;   rG   r%   r$   <module>r      s   K K 				 " " " " " " " " " " A A A A A A A A # # # # # # 8 8 8 8 8 8 > > > > > > > > > > > > G G G G G G G G G G G G    /   2M M M M M M M M M Mr%   