
    9|h                         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y)    )
AnyAsyncIteratorCallableIteratorListOptionalSequenceTupleTypeVarUnion)	BaseStoreKVc            
       n   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y)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                 <    || _         || _        || _        || _        y)zInitialize an EncodedStore.N)r   r   r   r   )selfr   r   r   r   s        _/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain/storage/encoder_backed.py__init__zEncoderBackedStore.__init__7   s#     
& 0"4    keysc                     |D cg c]  }| j                  |       }}| j                  j                  |      }|D cg c]  }|| j                  |      n| c}S c c}w c c}w ).Get the values associated with the given keys.)r   r   mgetr   r   r   keyencoded_keysvaluesvalues         r   r   zEncoderBackedStore.mgetD   so    DH"IS4#3#3C#8"I"I.  
 /4.?D##E*UJ
 	
 #J
s
   AA"c                    K   |D cg c]  }| j                  |       }}| j                  j                  |       d{   }|D cg c]  }|| j                  |      n| c}S c c}w 7 ,c c}w w)r   N)r   r   amgetr   r    s         r   r&   zEncoderBackedStore.amgetM   s{     DH"IS4#3#3C#8"I"Izz''55  
 /4.?D##E*UJ
 	
 #J5
s,   A3A' A3A, A3A.$	A3.A3key_value_pairsc                     |D cg c]'  \  }}| j                  |      | j                  |      f) }}}| j                  j                  |       yc c}}w z"Set the values for the given keys.N)r   r   r   msetr   r'   r!   r$   encoded_pairss        r   r*   zEncoderBackedStore.msetV   sW     .
U c"D$9$9%$@A
 
 	

&	
s   ,Ac                    K   |D cg c]'  \  }}| j                  |      | j                  |      f) }}}| j                  j                  |       d{    yc c}}w 7 wr)   )r   r   r   amsetr+   s        r   r.   zEncoderBackedStore.amset^   sh      .
U c"D$9$9%$@A
 
 jj}---	
 	.s   A#,A!A#A!A#c                     |D cg c]  }| j                  |       }}| j                  j                  |       yc c}w z2Delete the given keys and their associated values.N)r   r   mdeleter   r   r!   r"   s       r   r1   zEncoderBackedStore.mdeletef   s7    9=>#((->>

<( ?s   ;c                    K   |D cg c]  }| j                  |       }}| j                  j                  |       d{    yc c}w 7 
wr0   )r   r   amdeleter2   s       r   r4   zEncoderBackedStore.amdeletek   sD     9=>#((->>jj!!,/// ?/s   AA AA
 Aprefixr6   c             #   X   K   | j                   j                  |      E d{    y7 wz6Get an iterator over keys that match the given prefix.r5   N)r   
yield_keys)r   r6   s     r   r9   zEncoderBackedStore.yield_keysp   s#      ::(((777s    *(*c               h   K   | j                   j                  |      2 3 d{   }| 7 
6 ywr8   )r   ayield_keys)r   r6   r!   s      r   r;   zEncoderBackedStore.ayield_keysx   s7      //v/> 	 	#I	>s   20.0202)__name__
__module____qualname____doc__r   strr   r   r   r   bytesr   r	   r   r   r   r&   r
   r*   r.   r1   r4   r   r   r9   r   r;    r   r   r   r      sw    D5c"5 qc3h'5 #A3:.	5
 %cUAX.5 
5
! 
hqk): 

 
Xa[0A 
'HU1a4[$9 'd '.8E!Q$K+@ .T .)HQK )D )
08A; 04 0 *.8!#8	x{HSM)	*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   rB   r   r   <module>rE      sA      ,CLCLk1a4 kr   