
    h	                         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eeef         Zy)	    )AsyncIteratorIteratorSequence)AnyCallableOptional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/eduruby.in/venv/lib/python3.12/site-packages/langchain/storage/encoder_backed.py__init__zEncoderBackedStore.__init__3   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.mget@   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.amgetI   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.msetR   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.amsetZ   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   r/   zEncoderBackedStore.mdeleteb   s7    9=>#((->>

<( ?s   ;c                    K   |D cg c]  }| j                  |       }}| j                  j                  |       d{    yc c}w 7 
wr.   )r   r   amdeleter0   s       r   r2   zEncoderBackedStore.amdeleteg   sD     9=>#((->>jj!!,/// ?/s   AA AA
 Aprefixr4   c             #   X   K   | j                   j                  |      E d{    y7 wz6Get an iterator over keys that match the given prefix.r3   N)r   
yield_keys)r   r4   s     r   r7   zEncoderBackedStore.yield_keysl   s#      ::(((777s    *(*c               h   K   | j                   j                  |      2 3 d{   }| 7 
6 ywr6   )r   ayield_keys)r   r4   r   s      r   r9   zEncoderBackedStore.ayield_keysv   s7      //v/> 	 	#I	>s   20.0202)__name__
__module____qualname____doc__r   strr   r   r   r   bytesr   r   listr   r   r$   tupler(   r,   r/   r2   r
   r   r7   r   r9    r   r   r   r      s    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)collections.abcr   r   r   typingr   r   r   r	   r
   langchain_core.storesr   r   r   r   rB   r   r   <module>rF      sB    = =  ,CLCLo1a4 or   