
    9i                    .   d dl mZ d dlmZmZ d dlmZmZmZm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ eeeeef      gd
f   Z ede      Z e       Z e       Z G d de      Z  G d de      Z! G d de      Z"	 	 	 	 ddZ#y
)    )annotations)CallableSequence)Any
NamedTupleTypeVarcast)RunnableRunnableConfig)CONFCONFIG_KEY_SENDTASKS)RunnableCallable)MISSING)InvalidUpdateError)SendNR)boundc                  H    e Zd ZU ded<   	 eZded<   	 dZded<   	 dZd	ed
<   y)ChannelWriteEntrystrchannelr   valueFbool	skip_noneNzCallable | Nonemapper)__name__
__module____qualname____annotations__PASSTHROUGHr   r   r        a/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langgraph/pregel/_write.pyr   r      s1    L#E3:It7"FO"9r#   r   c                  8    e Zd ZU ded<   	 eZded<   	 dZded<   y)ChannelWriteTupleEntryz1Callable[[Any], Sequence[tuple[str, Any]] | None]r   r   r   N,Sequence[tuple[str, Any, str | None]] | Nonestatic)r   r   r   r    r!   r   r(   r"   r#   r$   r&   r&   %   s&    ==0E3:;?F8?8r#   r&   c                       e Zd ZU dZded<   	 dd	 	 	 d fdZdddd fdZdd	Zdd
Ze		 d	 	 	 	 	 	 	 dd       Z
e	dd       Ze		 	 	 	 dd       Ze		 d	 	 	 	 	 dd       Z xZS )ChannelWritezImplements the logic for sending writes to CONFIG_KEY_SEND.
    Can be used as a runnable or as a static method to call imperatively.z7list[ChannelWriteEntry | ChannelWriteTupleEntry | Send]writesN)tagsc                   t         |   | j                  | j                  d |d       t	        t
        t        t        z  t        z     |      | _	        y )NF)funcafuncnamer,   trace)
super__init___write_awriter	   listr   r&   r   r+   )selfr+   r,   	__class__s      r$   r3   zChannelWrite.__init__5   sR     	,, 	 	
 "%;;dBCV
r#   r0   c               v    |s&ddj                  d | j                  D               d}t        |   ||      S )NzChannelWrite<,c              3     K   | ]>  }t        |t              r|j                  nt        |t              rd n|j                   @ yw)z...N)
isinstancer   r   r&   node).0ws     r$   	<genexpr>z(ChannelWrite.get_name.<locals>.<genexpr>H   s[       ,p  _`AGX9YAIIhrst  wM  iN_d  TU  TZ  TZ  -Z  ,ps   AA>r9   )joinr+   r2   get_name)r7   suffixr0   r8   s      r$   rD   zChannelWrite.get_nameF   s`    "388  ,p  dh  do  do  ,p  $p  #q  qr  sDwT22r#   c           	     r   | j                   D cg c]  }t        |t              r>|j                  t        u r,t        |j
                  ||j                  |j                        n9t        |t              r(|j                  t        u rt        |j                  |      n| }}| j                  ||       |S c c}w N
r+   r=   r   r   r!   r   r   r   r&   do_writer7   inputconfigwriter+   s        r$   r4   zChannelWrite._writeK   s     
 	 %!23{8R emmUEOOU\\R %!78U[[K=W (e<	
 
 		
 
s   BB4c           	     z  K   | j                   D cg c]  }t        |t              r>|j                  t        u r,t        |j
                  ||j                  |j                        n9t        |t              r(|j                  t        u rt        |j                  |      n| }}| j                  ||       |S c c}w wrG   rH   rJ   s        r$   r5   zChannelWrite._awriteZ   s      
 	 %!23{8R emmUEOOU\\R %!78U[[K=W (e<	
 
 		
 
s   B;BB6 B;c                P   |D ]  }t        |t              r=|j                  t        k(  rt	        d      |j
                  t        u r|st	        d      t        |t              sa|j
                  t        u st|rwt	        d       | t           t           } |t        |             y )Nz*Cannot write to the reserved channel TASKSz"PASSTHROUGH value must be replaced)r=   r   r   r   r   r   r!   r&   r   r   _assemble_writes)rL   r+   allow_passthroughr@   rM   s        r$   rI   zChannelWrite.do_writei   s      
	SA!./99%,D  77k)2C,-QRR!3477k)2C,-QRR
	S "$<8v&'r#   c                T    t        | t              xs t        | dt              t        uS )zFUsed by PregelNode to distinguish between writers and other runnables._is_channel_writer)r=   r*   getattrr   )runnables    r$   	is_writerzChannelWrite.is_writer   s+     x. Ox!5w?wN	
r#   c                ,   t        | t              rM| j                  D cg c]1  }t        |t              r|j                  r|j                  D ]  }| 3 c}}xs dS t        | dt              x}r|t        urt        t        t        t        t        z  t        dz  f      |      }|D cg c]  \  }}|	 }}}|D cg c]  \  }}|	 }}}t        t        |      |      D 	cg c]  \  }	}g |	| c}}	S yyc c}}w c c}}w c c}}w c c}}	w )zEUsed to get conditional writes a writer declares for static analysis.NrS   )r=   r*   r+   r&   r(   rT   r   r	   r   tupler   r   r   ziprP   )
rU   entryr@   r+   e_entrieslalabelsts
             r$   get_static_writeszChannelWrite.get_static_writes   s    
 h- &__e%;<	   
  x)=wGGVGW$U#4t#;S4Z#GHI *00A100*01B"11.12B72KV.TUUQ!RUU % H 11Us   6C>,D D
'Dc                4    t         j                  | d|       | S )zUsed to mark a runnable as a writer, so that it can be detected by is_writer.
        Instances of ChannelWrite are automatically marked as writers.
        Optionally, a list of declared writes can be passed for static analysis.rS   )object__setattr__)rU   r(   s     r$   register_writerzChannelWrite.register_writer   s     	8%96Br#   )r+   ;Sequence[ChannelWriteEntry | ChannelWriteTupleEntry | Send]r,   zSequence[str] | NonerG   )rE   
str | Noner0   rg   returnr   )rK   r   rL   r   rh   None)T)rL   r   r+   rf   rQ   r   rh   ri   )rU   r
   rh   r   )rU   r
   rh   r'   )rU   r   r(   z<Sequence[tuple[ChannelWriteEntry | Send, str | None]] | Nonerh   r   )r   r   r   __doc__r    r3   rD   r4   r5   staticmethodrI   rV   ra   re   __classcell__)r8   s   @r$   r*   r*   .   s    M DC= &*	
K
 #	
"3 3
  #'((K(  ( 
	( (, 
 
 VV	5V V*  PT

L
 

 
r#   r*   c                   g }| D ]  }t        |t              r|j                  t        |f       +t        |t              r0|j                  |j                        x}sY|j                  |       kt        |t              ri|j
                  |j                  |j                        n|j                  }|t        u r|j                  r||j                  |j                  |f       t        d|        |S )z+Assembles the writes into a list of tuples.zInvalid write entry: )r=   r   appendr   r&   r   r   extendr   
SKIP_WRITEr   r   
ValueError)r+   tuplesr@   wwr   s        r$   rP   rP      s     %'F :aMM5!*%12XXagg&&r&b!,-)*)=AHHQWW%177E
"{{u}MM199e,-4QC899: Mr#   )r+   rf   rh   zlist[tuple[str, Any]])$
__future__r   collections.abcr   r   typingr   r   r   r	   langchain_core.runnablesr
   r   langgraph._internal._constantsr   r   r   langgraph._internal._runnabler   langgraph._internal._typingr   langgraph.errorsr   langgraph.typesr   rX   r   	TYPE_SENDr   rc   rp   r!   r   r&   r*   rP   r"   r#   r$   <module>r~      s    " .  > G G : / /  huS#X/0$67	Cx X
h:
 :9Z 9{# {|Gr#   