o
    `+ i	                     @   sh   d dl mZmZmZ d dlmZmZmZmZm	Z	 d dl
mZ edZedZG dd deeef ZdS )	    )AsyncIteratorIteratorSequence)AnyCallableOptionalTypeVarUnion)	BaseStoreKVc                
   @   sP  e Zd ZdZdeeef deegef dee	ge
f deege	f ddf
dd	Zd
ee deee	  fddZd
ee deee	  fddZdeeee	f  ddfddZdeeee	f  ddfddZd
ee ddfddZd
ee ddfddZdddee deee ee f fddZdddee deee ee f fddZdS )EncoderBackedStorea  Wraps a store with key and value encoders/decoders.

    Examples that uses JSON for encoding/decoding:

    .. code-block:: python

        import json

        def key_encoder(key: int) -> str:
            return json.dumps(key)

        def value_serializer(value: float) -> str:
            return json.dumps(value)

        def value_deserializer(serialized_value: str) -> float:
            return json.loads(serialized_value)

        # Create an instance of the abstract store
        abstract_store = MyCustomStore()

        # Create an instance of the encoder-backed store
        store = EncoderBackedStore(
            store=abstract_store,
            key_encoder=key_encoder,
            value_serializer=value_serializer,
            value_deserializer=value_deserializer
        )

        # Use the encoder-backed store methods
        store.mset([(1, 3.14), (2, 2.718)])
        values = store.mget([1, 2])  # Retrieves [3.14, 2.718]
        store.mdelete([1, 2])  # Deletes the keys 1 and 2
    storekey_encodervalue_serializervalue_deserializerreturnNc                 C   s   || _ || _|| _|| _dS )zInitialize an EncodedStore.N)r   r   r   r   )selfr   r   r   r    r   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/langchain/storage/encoder_backed.py__init__3   s   
zEncoderBackedStore.__init__keysc                    s0    fdd|D } j |} fdd|D S ).Get the values associated with the given keys.c                       g | ]}  |qS r   r   .0keyr   r   r   
<listcomp>B       z+EncoderBackedStore.mget.<locals>.<listcomp>c                    "   g | ]}|d ur  |n|qS Nr   r   valuer   r   r   r   D       )r   mgetr   r   encoded_keysvaluesr   r   r   r'   @   s
   
zEncoderBackedStore.mgetc                    s8    fdd|D } j |I dH } fdd|D S )r   c                    r   r   r   r   r   r   r   r   K   r    z,EncoderBackedStore.amget.<locals>.<listcomp>Nc                    r!   r"   r#   r$   r   r   r   r   M   r&   )r   amgetr(   r   r   r   r+   I   s   
zEncoderBackedStore.amgetkey_value_pairsc                    "    fdd|D } j | dS )"Set the values for the given keys.c                    $   g | ]\}}  | |fqS r   r   r   r   r   r%   r   r   r   r   T       z+EncoderBackedStore.mset.<locals>.<listcomp>N)r   msetr   r,   Zencoded_pairsr   r   r   r3   R   s   
zEncoderBackedStore.msetc                    *    fdd|D } j |I dH  dS )r.   c                    r/   r   r0   r1   r   r   r   r   \   r2   z,EncoderBackedStore.amset.<locals>.<listcomp>N)r   amsetr4   r   r   r   r6   Z   s
   
zEncoderBackedStore.amsetc                    r-   )2Delete the given keys and their associated values.c                    r   r   r   r   r   r   r   r   d   r    z.EncoderBackedStore.mdelete.<locals>.<listcomp>N)r   mdeleter   r   r)   r   r   r   r8   b   s   zEncoderBackedStore.mdeletec                    r5   )r7   c                    r   r   r   r   r   r   r   r   i   r    z/EncoderBackedStore.amdelete.<locals>.<listcomp>N)r   amdeleter9   r   r   r   r:   g   s   zEncoderBackedStore.amdeleteprefixr<   c                c   s    | j j|dE dH  dS z6Get an iterator over keys that match the given prefix.r;   N)r   
yield_keys)r   r<   r   r   r   r>   l   s   zEncoderBackedStore.yield_keysc                C  s*   | j j|d2 z	3 dH W }|V  q6 dS r=   )r   ayield_keys)r   r<   r   r   r   r   r?   v   s   zEncoderBackedStore.ayield_keys)__name__
__module____qualname____doc__r
   strr   r   r   r   bytesr   r   listr   r'   r+   tupler3   r6   r8   r:   r	   r   r>   r   r?   r   r   r   r   r      s>    "

		
r   N)collections.abcr   r   r   typingr   r   r   r   r	   Zlangchain_core.storesr
   r   r   r   r   r   r   r   <module>   s    