U
    ¯ªhS  ã                   @   s¬   d dl mZ ddlmZmZ ddlT ddlmZmZm	Z	m
Z
mZ G dd„ dƒ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é   )Úget_protocol_versionÚ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-4avdqdik/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   sx   t ttttti}tti}i }|| _t| _|j	| _	t
| jƒdkrJ| |¡ n
| |¡ | ¡ D ]\}}| j ||¡ q\dS ©zCreate a new RedisBloom client.)Ú3é   N)ZCMS_INITBYDIMr   ZCMS_INITBYPROBZ	CMS_MERGEZCMS_INFOr
   ÚclientÚCMSCommandsÚcommandmixinÚexecute_commandr   Úupdater   Úset_response_callback©Úselfr1   ÚkwargsZ_MODULE_CALLBACKSZ_RESP2_MODULE_CALLBACKSZ_RESP3_MODULE_CALLBACKSÚkÚvr   r   r   Ú__init__[   s&       û	 ÿ
zCMSBloom.__init__N©r(   r)   r*   r<   r   r   r   r   r-   Z   s   r-   c                   @   s   e Zd Zdd„ ZdS )Ú	TOPKBloomc                 K   s|   t ti}tttttttti}i }|| _t	| _
|j| _t| jƒdkrN| |¡ n
| |¡ | ¡ D ]\}}| j ||¡ q`dS r.   )ZTOPK_RESERVEr   ZTOPK_ADDr   ZTOPK_INCRBYZ	TOPK_INFOr   Z	TOPK_LISTr1   ÚTOPKCommandsr3   r4   r   r5   r   r6   r7   r   r   r   r<   y   s*     ÿ    ü
zTOPKBloom.__init__Nr=   r   r   r   r   r>   x   s   r>   c                   @   s   e Zd Zdd„ ZdS )ÚCFBloomc                 K   sp   t ti}tti}i }|| _t| _|j| _t| jƒdkrB| 	|¡ n
| 	|¡ | 
¡ D ]\}}| j ||¡ qTdS r.   )Z
CF_RESERVEr   ZCF_INFOr	   r1   Ú
CFCommandsr3   r4   r   r5   r   r6   r7   r   r   r   r<   ˜   s     ÿ ÿ
zCFBloom.__init__Nr=   r   r   r   r   r@   —   s   r@   c                   @   s   e Zd Zdd„ ZdS )ÚTDigestBloomc                 K   sŒ   t ti}tttttttttt	t
t	tt	tti}i }|| _t| _|j| _t| jƒdkr^| |¡ n
| |¡ | ¡ D ]\}}| j ||¡ qpdS r.   )ZTDIGEST_CREATEr   ZTDIGEST_BYRANKr   ZTDIGEST_BYREVRANKZTDIGEST_CDFZTDIGEST_INFOr   ZTDIGEST_MINÚfloatZTDIGEST_MAXZTDIGEST_TRIMMED_MEANZTDIGEST_QUANTILEr1   ÚTDigestCommandsr3   r4   r   r5   r   r6   r7   r   r   r   r<   »   s:     ÿ        ø

zTDigestBloom.__init__Nr=   r   r   r   r   rB   º   s   rB   c                   @   s   e Zd Zdd„ ZdS )ÚBFBloomc                 K   sp   t ti}tti}i }|| _t| _|j| _t| jƒdkrB| 	|¡ n
| 	|¡ | 
¡ D ]\}}| j ||¡ qTdS r.   )Z
BF_RESERVEr   ZBF_INFOr   r1   Ú
BFCommandsr3   r4   r   r5   r   r6   r7   r   r   r   r<   ß   s     ÿ ÿ
zBFBloom.__init__Nr=   r   r   r   r   rE   Þ   s   rE   N)Zredis._parsers.helpersr   Zhelpersr   r   ÚcommandsÚinfor   r	   r
   r   r   r   r2   r-   r?   r>   rA   r@   rD   rB   rF   rE   r   r   r   r   Ú<module>   s   R#$