
    }
i                    ^   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#d
S )    )annotations)CallableSequence)Any
NamedTupleTypeVarcast)RunnableRunnableConfig)CONFCONFIG_KEY_SENDTASKS)RunnableCallable)MISSING)InvalidUpdateError)SendNR)boundc                  J    e Zd ZU ded<   	 eZded<   	 dZded<   	 dZd	ed
<   dS )ChannelWriteEntrystrchannelr   valueFbool	skip_noneNzCallable | Nonemapper)__name__
__module____qualname____annotations__PASSTHROUGHr   r   r        C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/pregel/_write.pyr   r      sW         LLL#E:I7"F""""99r#   r   c                  :    e Zd ZU ded<   	 eZded<   	 dZded<   dS )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&   %   sF         ====0E:;?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)tags;Sequence[ChannelWriteEntry | ChannelWriteTupleEntry | Send]r,   Sequence[str] | Nonec                   t                                          | j        | j        d |d           t	          t
          t          t          z  t          z           |          | _	        d S )NF)funcafuncnamer,   trace)
super__init___write_awriter	   listr   r&   r   r+   )selfr+   r,   	__class__s      r$   r5   zChannelWrite.__init__5   sf     	, 	 	
 	
 	
 "%;;dBCV
 
r#   r2   suffix
str | Noner2   returnr   c                   |s(dd                     d | j        D                        d}t                                          ||          S )NzChannelWrite<,c              3     K   | ]>}t          |t                    r|j        nt          |t                    rd n|j        V  ?dS )z...N)
isinstancer   r   r&   node).0ws     r$   	<genexpr>z(ChannelWrite.get_name.<locals>.<genexpr>H   s        ,p  ,p  _`AGX9Y9Y  -ZAIIhrst  wM  iN  iN  `Z_d_d  TU  TZ  ,p  ,p  ,p  ,p  ,p  ,pr#   >r;   )joinr+   r4   get_name)r9   r<   r2   r:   s      r$   rI   zChannelWrite.get_nameF   s     	s s388  ,p  ,p  dh  do  ,p  ,p  ,p  $p  $p  s  s  sDwwT222r#   inputr   configr   Nonec                Z    fd| j         D             }|                     ||           S )Nc                   g | ]}t          |t                    r/|j        t          u r!t          |j        |j        |j                  n9t          |t                    r#|j        t          u rt          |j                  n|S r"   rB   r   r   r!   r   r   r   r&   rD   writerJ   s     r$   
<listcomp>z'ChannelWrite._write.<locals>.<listcomp>L        
 
 
 	 %!2338={8R8R emUEOU\RRR %!788=B[K=W=W (e<<<
 
 
r#   r+   do_writer9   rJ   rK   r+   s    `  r$   r6   zChannelWrite._writeK   sT    
 
 
 
 
 
 
 		
 	
 	
 r#   c                ^   K   fd| j         D             }|                     ||           S )Nc                   g | ]}t          |t                    r/|j        t          u r!t          |j        |j        |j                  n9t          |t                    r#|j        t          u rt          |j                  n|S r"   rO   rP   s     r$   rR   z(ChannelWrite._awrite.<locals>.<listcomp>[   rS   r#   rT   rV   s    `  r$   r7   zChannelWrite._awriteZ   sX      
 
 
 
 
 
 
 		
 	
 	
 r#   Tallow_passthroughr   c                ~   |D ]}t          |t                    r>|j        t          k    rt	          d          |j        t          u r|st	          d          t          |t                    r|j        t          u r|st	          d          | t                   t                   } |t          |                     d S )Nz*Cannot write to the reserved channel TASKSz"PASSTHROUGH value must be replaced)rB   r   r   r   r   r   r!   r&   r   r   _assemble_writes)rK   r+   rY   rE   rQ   s        r$   rU   zChannelWrite.do_writei   s      
	S 
	SA!.// S9%%,D   7k))2C),-QRRR!344 S7k))2C),-QRRR "$<8v&&'''''r#   runnabler
   c                f    t          | t                    pt          | dt                    t          uS )zFUsed by PregelNode to distinguish between writers and other runnables._is_channel_writer)rB   r*   getattrr   )r\   s    r$   	is_writerzChannelWrite.is_writer   s1     x.. Ox!5w??wN	
r#   r'   c                   t          | t                    rd | j        D             pdS t          | dt                    x}r|t          ur~t          t          t          t          t          z  t          dz  f                  |          }d |D             }d |D             }d t          t          |          |          D             S dS dS )zEUsed to get conditional writes a writer declares for static analysis.c                ^    g | ]*}t          |t                    |j        |j        D ]}|+S r"   )rB   r&   r(   )rD   entryrE   s      r$   rR   z2ChannelWrite.get_static_writes.<locals>.<listcomp>   sd       e%;<< BG 	      r#   Nr^   c                    g | ]\  }}|S r"   r"   )rD   e_s      r$   rR   z2ChannelWrite.get_static_writes.<locals>.<listcomp>   s    000A1000r#   c                    g | ]\  }}|S r"   r"   )rD   rf   las      r$   rR   z2ChannelWrite.get_static_writes.<locals>.<listcomp>   s    111B"111r#   c                "    g | ]\  }}g ||R S r"   r"   )rD   trh   s      r$   rR   z2ChannelWrite.get_static_writes.<locals>.<listcomp>   s&    UUUUQ!RUUUr#   )rB   r*   r+   r_   r   r	   r   tupler   r   r   zipr[   )r\   r+   entrieslabelss       r$   get_static_writeszChannelWrite.get_static_writes   s    
 h-- 	V %_   
  x)=wGGGV 	VW$$U#4t#;S4Z#GHI  1000011&111UUc2B72K2KV.T.TUUUU	V 	V$$r#   r   r(   <Sequence[tuple[ChannelWriteEntry | Send, str | None]] | Nonec                >    t                               | 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.r^   )object__setattr__)r\   r(   s     r$   register_writerzChannelWrite.register_writer   s"     	8%96BBBr#   )r+   r-   r,   r.   )N)r<   r=   r2   r=   r>   r   )rJ   r   rK   r   r>   rL   )T)rK   r   r+   r-   rY   r   r>   rL   )r\   r
   r>   r   )r\   r
   r>   r'   )r\   r   r(   rp   r>   r   )r   r   r   __doc__r    r5   rI   r6   r7   staticmethodrU   r`   ro   rt   __classcell__)r:   s   @r$   r*   r*   .   s]        M M DCCC= &*	
 
 
 
 
 
 
 
"3 3 3 3 3 3 3 3 3
        #'( ( ( ( \(, 
 
 
 \
 V V V \V*  PT
 
 
 
 \
 
 
 
 
r#   r*   r+   r-   r>   list[tuple[str, Any]]c                   g }| D ]}t          |t                    r|                    t          |f           4t          |t                    r2|                    |j                  x}r|                    |           {t          |t                    rY|j        |                    |j                  n|j        }|t          u r|j
        r||                    |j        |f           t          d|           |S )z+Assembles the writes into a list of tuples.NzInvalid write entry: )rB   r   appendr   r&   r   r   extendr   
SKIP_WRITEr   r   
ValueError)r+   tuplesrE   wwr   s        r$   r[   r[      s    %'F : :a 	:MM5!*%%%%122 	:XXag&&&r "b!!!,-- 	:)*)=AHHQW%%%17E
""{ u}MM19e,----8Q88999Mr#   )r+   r-   r>   rx   )$
__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   rk   r   	TYPE_SENDr   rr   r|   r!   r   r&   r*   r[   r"   r#   r$   <module>r      s   " " " " " " . . . . . . . .            > = = = = = = = G G G G G G G G G G : : : : : : / / / / / / / / / / / /            huS#X/0$67	GCx   VXX
fhh: : : : :
 : : :9 9 9 9 9Z 9 9 9{ { { { {# { { {|     r#   