
    Ng                         d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 d dlmZ  e	d          Z e	d          Z G d deeef                   ZdS )    )
AnyAsyncIteratorCallableIteratorListOptionalSequenceTupleTypeVarUnion)	BaseStoreKVc            
           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Zd	ee         deee	                  fd
Zd	ee         deee	                  fdZdeeee	f                  ddfdZdeeee	f                  ddfdZd	ee         ddfdZd	ee         ddfdZdddee         deee         ee         f         fdZdddee         deee         ee         f         f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                 >    || _         || _        || _        || _        dS )zInitialize an EncodedStore.N)r   r   r   r   )selfr   r   r   r   s        \/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/storage/encoder_backed.py__init__zEncoderBackedStore.__init__7   s)     
& 0"4    keysc                 p      fd|D             } j                             |          } fd|D             S ).Get the values associated with the given keys.c                 :    g | ]}                     |          S  r   .0keyr   s     r   
<listcomp>z+EncoderBackedStore.mget.<locals>.<listcomp>F   '    "I"I"IS4#3#3C#8#8"I"I"Ir   c                 B    g | ]}|                     |          n|S Nr   r#   valuer   s     r   r%   z+EncoderBackedStore.mget.<locals>.<listcomp>H   A     
 
 
 /4.?D##E***U
 
 
r   )r   mgetr   r   encoded_keysvaluess   `   r   r-   zEncoderBackedStore.mgetD   sZ    "I"I"I"ID"I"I"I..
 
 
 

 
 
 	
r   c                     K    fd|D             } j                             |           d{V } fd|D             S )r   c                 :    g | ]}                     |          S r    r!   r"   s     r   r%   z,EncoderBackedStore.amget.<locals>.<listcomp>O   r&   r   Nc                 B    g | ]}|                     |          n|S r(   r)   r*   s     r   r%   z,EncoderBackedStore.amget.<locals>.<listcomp>Q   r,   r   )r   amgetr.   s   `   r   r4   zEncoderBackedStore.amgetM   sr      "I"I"I"ID"I"I"Iz''55555555
 
 
 

 
 
 	
r   key_value_pairsc                 X      fd|D             } j                             |           dS )"Set the values for the given keys.c                 j    g | ]/\  }}                     |                              |          f0S r    r   r   r#   r$   r+   r   s      r   r%   z+EncoderBackedStore.mset.<locals>.<listcomp>X   N     
 
 
U c""D$9$9%$@$@A
 
 
r   N)r   msetr   r5   encoded_pairss   `  r   r<   zEncoderBackedStore.msetV   sG    
 
 
 
-
 
 
 	
&&&&&r   c                 h    K    fd|D             } j                             |           d{V  dS )r7   c                 j    g | ]/\  }}                     |                              |          f0S r    r9   r:   s      r   r%   z,EncoderBackedStore.amset.<locals>.<listcomp>`   r;   r   N)r   amsetr=   s   `  r   rA   zEncoderBackedStore.amset^   s_      
 
 
 
-
 
 
 j}-----------r   c                 X      fd|D             } j                             |           dS )2Delete the given keys and their associated values.c                 :    g | ]}                     |          S r    r!   r"   s     r   r%   z.EncoderBackedStore.mdelete.<locals>.<listcomp>h   '    >>>#((-->>>r   N)r   mdeleter   r   r/   s   `  r   rF   zEncoderBackedStore.mdeletef   s8    >>>>>>>
<(((((r   c                 h    K    fd|D             } j                             |           d{V  dS )rC   c                 :    g | ]}                     |          S r    r!   r"   s     r   r%   z/EncoderBackedStore.amdelete.<locals>.<listcomp>m   rE   r   N)r   amdeleterG   s   `  r   rJ   zEncoderBackedStore.amdeletek   sN      >>>>>>>j!!,///////////r   prefixrL   c             #   L   K   | j                             |          E d{V  dS z6Get an iterator over keys that match the given prefix.rK   N)r   
yield_keys)r   rL   s     r   rO   zEncoderBackedStore.yield_keysp   s9       :(((77777777777r   c               \   K   | j                             |          2 3 d{V }|W V  6 dS rN   )r   ayield_keys)r   rL   r$   s      r   rQ   zEncoderBackedStore.ayield_keysx   s[       //v/>> 	 	 	 	 	 	 	#IIIII ?>>s   +)__name__
__module____qualname____doc__r   strr   r   r   r   bytesr   r	   r   r   r-   r4   r
   r<   rA   rF   rJ   r   r   rO   r   rQ   r    r   r   r   r      s)          D5c"5 qc3h'5 #A3:.	5
 %cUAX.5 
5 5 5 5
! 
hqk): 
 
 
 

 
Xa[0A 
 
 
 
'HU1a4[$9 'd ' ' ' '.8E!Q$K+@ .T . . . .)HQK )D ) ) ) )
08A; 04 0 0 0 0 *.8 8 8!#8	x{HSM)	*8 8 8 8 *.  !#	}Qs!33	4     r   r   N)typingr   r   r   r   r   r   r	   r
   r   r   langchain_core.storesr   r   r   r   r    r   r   <module>rZ      s                           , + + + + +GCLLGCLLk k k k k1a4 k k k k kr   