
    (Ggf                       d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZ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"y)    )annotations)AnyCallable
NamedTupleOptionalSequenceTypeVarUnioncast)RunnableRunnableConfig)ConfigurableFieldSpec)CONFCONFIG_KEY_SENDTASKSSend)InvalidUpdateError)RunnableCallableN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Optional[Callable]mapper)__name__
__module____qualname____annotations__PASSTHROUGHr   r   r        s/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langgraph/pregel/write.pyr   r      s2    L#E3:It7!%F%9r%   r   c                  (    e Zd ZU ded<   	 eZded<   y)ChannelWriteTupleEntryz4Callable[[Any], Optional[Sequence[tuple[str, Any]]]]r   r   r   N)r   r    r!   r"   r#   r   r$   r%   r&   r(   r(   '   s    @@0E3:r%   r(   c                       e Zd ZU dZded<   	 ddd	 	 	 	 	 d fdZ	 ddd	 	 	 	 	 d fdZedd	       Zdd
Z	ddZ
e	 d	 	 	 	 	 	 	 dd       Zedd       Ze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.z<list[Union[ChannelWriteEntry, ChannelWriteTupleEntry, Send]]writesN)tagsrequire_at_least_one_ofc                   t         |   | j                  | j                  d |d       t	        t
        t        t        t        t        f      |      | _
        y )NT)funcafuncnamer,   func_accepts_config)super__init___write_awriter   listr
   r   r(   r   r+   )selfr+   r,   r-   	__class__s       r&   r4   zChannelWrite.__init__5   sT     	,, $ 	 	
 (*@$FGH&
r%   r1   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>K   s[       ,p  _`AGX9YAIIhrst  wM  iN_d  TU  TZ  TZ  -Z  ,ps   AA>r:   )joinr+   r3   get_name)r8   suffixr1   r9   s      r&   rE   zChannelWrite.get_nameG   sb     "388  ,p  dh  do  do  ,p  $p  #q  qr  sDwT22r%   c                4    t        t        t        d d d       gS )N)idr1   descriptiondefault
annotation)r   r   )r8   s    r&   config_specszChannelWrite.config_specsN   s%     ""$ 
 	
r%   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r8   inputconfigwriter+   s        r&   r5   zChannelWrite._writeZ   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rN   rO   rQ   s        r&   r6   zChannelWrite._awritei   s      
 	 %!23{8R emmUEOOU\\R %!78U[[K=W (e<	
 
 		
 
s   B;BB6 B;c                "   |D ]{  }t        |t              r;|j                  t        k(  rt	        d      |j
                  t        u rt	        d      t        |t              s_|j
                  t        u srt	        d       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|        | t           t            } ||       y )Nz*Cannot write to the reserved channel TASKSz"PASSTHROUGH value must be replacedzInvalid write entry: )r>   r   r   r   r   r   r#   r(   r   appendr   extend
SKIP_WRITEr   
ValueErrorr   r   )rS   r+   r-   rA   tupleswwr   rT   s           r&   rP   zChannelWrite.do_writex   s\     
	SA!./99%,D  77k),-QRR!3477k),-QRR
	S )+ 	>A!T"uaj)A56!''**2*MM"%A01-.XX-A)qwwJ&;;5=qyy%01 #8!<==	> "$<8fr%   c                D    t        | t              xs t        | dd      du S )zFUsed by PregelNode to distinguish between writers and other runnables._is_channel_writerFT)r>   r*   getattrrunnables    r&   	is_writerzChannelWrite.is_writer   s+     x. Fx!5u=E	
r%   c                4    t         j                  | d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.r^   T)object__setattr__r`   s    r&   register_writerzChannelWrite.register_writer   s     	8%94@r%   )r+   @Sequence[Union[ChannelWriteEntry, ChannelWriteTupleEntry, Send]]r,   Optional[Sequence[str]]r-   rh   rN   )rF   Optional[str]r1   ri   returnr   )rj   zlist[ConfigurableFieldSpec])rR   r   rS   r   rj   None)rS   r   r+   rg   r-   rh   rj   rk   )ra   r   rj   r   )ra   r   rj   r   )r   r    r!   __doc__r"   r4   rE   propertyrL   r5   r6   staticmethodrP   rb   rf   __classcell__)r9   s   @r&   r*   r*   .   s    M IH= )-;?
P
 &	

 "9
& '+3EI3#35B3	3 	
 	
  <@##P# "9# 
	# #J 
 
  r%   r*   )#
__future__r   typingr   r   r   r   r   r	   r
   r   langchain_core.runnablesr   r   langchain_core.runnables.utilsr   langgraph.constantsr   r   r   r   langgraph.errorsr   langgraph.utils.runnabler   tupler   	TYPE_SENDr   rd   rY   r#   r   r(   r*   r$   r%   r&   <module>ry      s    "	 	 	 > @ B B / 5huS#X/0$67	Cx X
h:
 :;Z ;# r%   