
    Ah	                         S SK JrJrJr  S SKJrJrJrJrJ	r	  S SK
Jr  \" S5      r\" S5      r " S S\\\4   5      rg)	    )AsyncIteratorIteratorSequence)AnyCallableOptionalTypeVarUnion)	BaseStoreKVc            
          \ rS rSrSrS\\\4   S\\	/\4   S\\
/\4   S\\/\
4   SS4
S	 jrS
\\	   S\\\
      4S jrS
\\	   S\\\
      4S jrS\\\	\
4      SS4S jrS\\\	\
4      SS4S jrS
\\	   SS4S jrS
\\	   SS4S jrSS.S\\   S\\\	   \\   4   4S jjrSS.S\\   S\\\	   \\   4   4S jjrSrg)EncoderBackedStore   a  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                 4    Xl         X l        X0l        X@l        g)zInitialize an EncodedStore.N)r   r   r   r   )selfr   r   r   r   s        X/var/www/html/shao/venv/lib/python3.13/site-packages/langchain/storage/encoder_backed.py__init__EncoderBackedStore.__init__3   s     
& 0"4    keysc                     U Vs/ sH  o R                  U5      PM     nnU R                  R                  U5      nU Vs/ sH  nUb  U R                  U5      OUPM     sn$ s  snf s  snf ).Get the values associated with the given keys.)r   r   mgetr   r   r   keyencoded_keysvaluesvalues         r   r   EncoderBackedStore.mget@   ss    DH"IDS#3#3C#8D"I.  
 /4.?D##E*UJ
 	
 #J
s
   A!A&c                    #    U Vs/ sH  o R                  U5      PM     nnU R                  R                  U5      I Sh  vN nU Vs/ sH  nUb  U R                  U5      OUPM     sn$ s  snf  N/s  snf 7f)r   N)r   r   amgetr   r    s         r   r'   EncoderBackedStore.amgetI   s~     DH"IDS#3#3C#8D"Izz''55  
 /4.?D##E*UJ
 	
 #J5
s-   A7A+ A7 A0A7	A2(	A72A7key_value_pairsc                     U VVs/ sH'  u  p#U R                  U5      U R                  U5      4PM)     nnnU R                  R                  U5        gs  snnf z"Set the values for the given keys.N)r   r   r   msetr   r)   r!   r$   encoded_pairss        r   r,   EncoderBackedStore.msetR   sX     .
-
 c"D$9$9%$@A- 	 
 	

&	
s   -Ac                    #    U VVs/ sH'  u  p#U R                  U5      U R                  U5      4PM)     nnnU R                  R                  U5      I Sh  vN   gs  snnf  N7fr+   )r   r   r   amsetr-   s        r   r1   EncoderBackedStore.amsetZ   sh      .
-
 c"D$9$9%$@A- 	 
 jj}---	
 	.s   A$-A!A$A"A$c                     U Vs/ sH  o R                  U5      PM     nnU R                  R                  U5        gs  snf z2Delete the given keys and their associated values.N)r   r   mdeleter   r   r!   r"   s       r   r5   EncoderBackedStore.mdeleteb   s6    9=>#((->

<( ?s   <c                    #    U Vs/ sH  o R                  U5      PM     nnU R                  R                  U5      I Sh  vN   gs  snf  N
7fr4   )r   r   amdeleter6   s       r   r9   EncoderBackedStore.amdeleteg   sB     9=>#((->jj!!,/// ?/s   AA A AAprefixr<   c             #   R   #    U R                   R                  US9 Sh  vN   g N7fz6Get an iterator over keys that match the given prefix.r;   N)r   
yield_keys)r   r<   s     r   r?   EncoderBackedStore.yield_keysl   s"      ::(((777s   '%'c               d   #    U R                   R                  US9  Sh  vN nU7v   M   N
 g7fr>   )r   ayield_keys)r   r<   r!   s      r   rB   EncoderBackedStore.ayield_keysv   s0      //v/> 	#I	>s   0.,.0.0)r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   strr   r   r   r   bytesr   r   listr   r   r'   tupler,   r1   r5   r9   r
   r   r?   r   rB   __static_attributes__ 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   rN   r   r   <module>rR      sB    = =  ,CLCLo1a4 or   