U
    ‰då  ã                   @   sª   d dl mZ ddlmZ ddlT ddlmZmZmZm	Z	m
Z
 G dd„ deƒZG d	d
„ d
eeƒZG dd„ deeƒZG dd„ deeƒZG dd„ deeƒZG dd„ deeƒZdS )é    )Úbool_oké   )Úparse_to_listé   )Ú*)ÚBFInfoÚCFInfoÚCMSInfoÚTDigestInfoÚTopKInfoc                   @   s”   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS )ÚAbstractBlooma  
    The client allows to interact with RedisBloom and use all of
    it's functionality.

    - BF for Bloom Filter
    - CF for Cuckoo Filter
    - CMS for Count-Min Sketch
    - TOPK for TopK Data Structure
    - TDIGEST for estimate rank statistics
    c                 C   s   |   dg¡ | |7 } dS )zAppend ITEMS to params.ZITEMSN©Úextend)ÚparamsÚitems© r   ú>/tmp/pip-unpacked-wheel-f5h5_hbx/redis/commands/bf/__init__.pyÚappend_items   s    zAbstractBloom.append_itemsc                 C   s   |dk	r|   d|g¡ dS )zAppend ERROR to params.NÚERRORr   )r   Úerrorr   r   r   Úappend_error   s    zAbstractBloom.append_errorc                 C   s   |dk	r|   d|g¡ dS )zAppend CAPACITY to params.NZCAPACITYr   )r   Úcapacityr   r   r   Úappend_capacity    s    zAbstractBloom.append_capacityc                 C   s   |dk	r|   d|g¡ dS )zAppend EXPANSION to params.NZ	EXPANSIONr   )r   Z	expansionr   r   r   Úappend_expansion&   s    zAbstractBloom.append_expansionc                 C   s   |dk	r|   dg¡ dS )z Append NONSCALING tag to params.NZ
NONSCALINGr   )r   ZnoScaler   r   r   Úappend_no_scale,   s    zAbstractBloom.append_no_scalec                 C   s"   t |ƒdkr|  d¡ | |7 } dS )zAppend WEIGHTS to params.r   ZWEIGHTSN)ÚlenÚappend)r   Úweightsr   r   r   Úappend_weights2   s    
zAbstractBloom.append_weightsc                 C   s   |dk	r|   dg¡ dS )zAppend NOCREATE tag to params.NZNOCREATEr   )r   ZnoCreater   r   r   Úappend_no_create9   s    zAbstractBloom.append_no_createc                 C   s2   t t|ƒƒD ] }|  || ¡ |  || ¡ qdS )z/Append pairs of items and increments to params.N©Úranger   r   )r   r   Z
incrementsÚir   r   r   Úappend_items_and_increments?   s    z)AbstractBloom.append_items_and_incrementsc                 C   s2   t t|ƒƒD ] }|  || ¡ |  || ¡ qdS )z,Append pairs of items and weights to params.Nr    )r   r   r   r"   r   r   r   Úappend_values_and_weightsF   s    z'AbstractBloom.append_values_and_weightsc                 C   s   |dk	r|   d|g¡ dS )zAppend MAXITERATIONS to params.NZMAXITERATIONSr   )r   Zmax_iterationsr   r   r   Úappend_max_iterationsM   s    z#AbstractBloom.append_max_iterationsc                 C   s   |dk	r|   d|g¡ dS )zAppend BUCKETSIZE to params.NZ
BUCKETSIZEr   )r   Zbucket_sizer   r   r   Úappend_bucket_sizeS   s    z AbstractBloom.append_bucket_sizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r   r   r   r   r   r#   r$   r%   r&   r   r   r   r   r      s.   









r   c                   @   s   e Zd Zdd„ ZdS )ÚCMSBloomc                 K   sL   t ttttttti}|| _t| _|j	| _	| 
¡ D ]\}}| j ||¡ q0dS ©zCreate a new RedisBloom client.N)ZCMS_INITBYDIMr   ZCMS_INITBYPROBZ	CMS_MERGEZCMS_INFOr	   ÚclientÚCMSCommandsÚcommandmixinÚexecute_commandr   Úset_response_callback©Úselfr.   ÚkwargsZMODULE_CALLBACKSÚkÚvr   r   r   Ú__init__[   s        ú	zCMSBloom.__init__N©r'   r(   r)   r8   r   r   r   r   r,   Z   s   r,   c                   @   s   e Zd Zdd„ ZdS )Ú	TOPKBloomc              
   K   sP   t ttttttttti}|| _t	| _
|j| _| ¡ D ]\}}| j ||¡ q4dS r-   )ZTOPK_RESERVEr   ZTOPK_ADDr   ZTOPK_INCRBYZ	TOPK_LISTZ	TOPK_INFOr   r.   ÚTOPKCommandsr0   r1   r   r2   r3   r   r   r   r8   p   s          ù
zTOPKBloom.__init__Nr9   r   r   r   r   r:   o   s   r:   c                   @   s   e Zd Zdd„ ZdS )ÚCFBloomc                 K   sD   t ttti}|| _t| _|j| _| ¡ D ]\}}| j 	||¡ q(dS r-   )
Z
CF_RESERVEr   ZCF_INFOr   r.   Ú
CFCommandsr0   r1   r   r2   r3   r   r   r   r8   †   s     
 õzCFBloom.__init__Nr9   r   r   r   r   r<   …   s   r<   c                   @   s   e Zd Zdd„ ZdS )ÚTDigestBloomc                 K   sh   t tttttttttttt	t
tttttttti}|| _t| _|j| _| ¡ D ]\}}| j ||¡ qLdS r-   )ZTDIGEST_CREATEr   ZTDIGEST_CDFr   ZTDIGEST_QUANTILEZTDIGEST_MINÚfloatZTDIGEST_MAXZTDIGEST_TRIMMED_MEANZTDIGEST_INFOr
   ZTDIGEST_RANKZTDIGEST_REVRANKZTDIGEST_BYRANKZTDIGEST_BYREVRANKr.   ÚTDigestCommandsr0   r1   r   r2   r3   r   r   r   r8       s8               òzTDigestBloom.__init__Nr9   r   r   r   r   r>   Ÿ   s   r>   c                   @   s   e Zd Zdd„ ZdS )ÚBFBloomc                 K   sD   t ttti}|| _t| _|j| _| ¡ D ]\}}| j 	||¡ q(dS r-   )
Z
BF_RESERVEr   ZBF_INFOr   r.   Ú
BFCommandsr0   r1   r   r2   r3   r   r   r   r8   ½   s      ÷zBFBloom.__init__Nr9   r   r   r   r   rA   ¼   s   rA   N)Zredis.clientr   Zhelpersr   ÚcommandsÚinfor   r   r	   r
   r   Úobjectr   r/   r,   r;   r:   r=   r<   r@   r>   rB   rA   r   r   r   r   Ú<module>   s   R