
    9i$                    @   d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ ee ee    z  e!gee"e ef   z  f   Z#e$edef   e$e df   f   Z% G d de      Z& ed       Z' G d d      Z(y)    )annotations)AsyncIteratorCallableIteratorMappingSequence)cached_property)Any)RunnableRunnableConfig)merge_configs)CONFCONFIG_KEY_READ)RunnableCallableRunnableSeq)find_subgraph_pregel)ChannelWrite)PregelProtocol)CachePolicyRetryPolicy.c                       e Zd ZU dZded<   dZded<   dZded	<   dddd
	 	 	 	 	 	 	 	 	 d fdZdddd fdZddZ	ddZ
eddd	 	 	 	 	 	 	 	 	 dd       Z xZS )ChannelReadzImplements the logic for reading state from CONFIG_KEY_READ.
    Usable both as a runnable as well as a static method to call imperatively.str | list[str]channelFboolfreshNCallable[[Any], Any] | Nonemapper)r   r   tagsc                   t         |   | j                  | j                  |d d       || _        || _        || _        y )NF)funcafuncr   nametrace)super__init___read_areadr   r   r   )selfr   r   r   r   	__class__s        `/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langgraph/pregel/_read.pyr&   zChannelRead.__init__!   sE     	++ 	 	
 
    r#   c                   |rnJt        | j                  t              rd| j                   d}nddj                  | j                         d}t        |   ||      S )NzChannelRead<>,r-   )
isinstancer   strjoinr%   get_name)r)   suffixr#   r*   s      r+   r4   zChannelRead.get_name4   sZ    c*!$,,q1D!#((4<<"8!9;DwT22r,   c                h    | j                  || j                  | j                  | j                        S N)selectr   r   do_readr   r   r   r)   _configs      r+   r'   zChannelRead._read=   s-    ||4<<tzz$++  
 	
r,   c                p   K   | j                  || j                  | j                  | j                        S wr7   r9   r;   s      r+   r(   zChannelRead._areadB   s1     ||4<<tzz$++  
 	
s   46)r   r   c                   	 | t            t           }|r | |||            S  |||      S # t        $ r t        d      w xY w)NzWNot configured with a read functionMake sure to call in the context of a Pregel process)r   r   KeyErrorRuntimeError)r=   r8   r   r   reads        r+   r:   zChannelRead.do_readG   s]    	$Tl?;D $vu-..&&  	G 	s	   , A)
r   r   r   r   r   r   r   list[str] | NonereturnNoneN)r5   
str | Noner#   rG   rD   r2   )r<   r
   r=   r   rD   r
   )
r=   r   r8   r   r   r   r   r   rD   r
   )__name__
__module____qualname____doc____annotations__r   r   r&   r4   r'   r(   staticmethodr:   __classcell__)r*   s   @r+   r   r      s    R E4*.F'. .2!%  	
 ,  
&3 3



 
 .2''  ' 	'
 ,' 
' 'r,   r   c                    | S rF    )inputs    r+   <lambda>rR   \   s    u r,   c            	      v   e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!dZd"dZed#d       Zed$d       Z	ed%d       Z
	 d&	 	 	 	 	 	 	 d'dZ	 d&	 	 	 	 	 	 	 d'dZ	 d&	 	 	 	 	 	 	 d(dZ	 d&	 	 	 	 	 	 	 d)d Zy)*
PregelNodezA node in a Pregel graph. This won't be invoked as a runnable by the graph
    itself, but instead acts as a container for the components necessary to make
    a PregelExecutableTask for a node.r   channelsz	list[str]triggersr   r   list[Runnable]writerszRunnable[Any, Any]boundzSequence[RetryPolicy] | Noneretry_policyCachePolicy | Nonecache_policyzSequence[str] | Noner   Mapping[str, Any] | NonemetadatazSequence[PregelProtocol]	subgraphsN)r   rX   r   r^   rY   rZ   r\   r_   c       
           || _         t        |      | _        || _        |xs g | _        ||nt
        | _        |	| _        t        |t              r	|f| _
        n|| _
        || _        || _        |
|
| _        y | j                  t
        ur)	 t        | j                        }|r	|g| _        y g | _        y g | _        y # t        $ r d }Y (w xY wrF   )rU   listrV   r   rX   DEFAULT_BOUNDrY   r\   r1   r   rZ   r   r^   r_   r   	Exception)r)   rU   rV   r   rX   r   r^   rY   rZ   r\   r_   subgraphs               r+   r&   zPregelNode.__init__   s     !X}"#/U]
(lK0!-D ,D	  &DNZZ}, /

; "*!#DN    s   B; ;C	C	c                    i | j                   |}|j                  dd        |j                  dd        |j                  dd        t        di |S )Nflat_writersnodeinput_cache_keyrP   )__dict__poprT   )r)   updateattrss      r+   copyzPregelNode.copy   sN    +4==+F+		.$'		&$		#T*"E""r,   c                   | j                   j                         }t        |      dkD  rt        |d   t              rt        |d   t              rqt	        |d   j
                  |d   j
                  z         |d<   |j                          t        |      dkD  r't        |d   t              rt        |d   t              rq|S )zJGet writers with optimizations applied. Dedupes consecutive ChannelWrites.   )writes)rX   rm   lenr1   r   rr   rj   r)   rX   s     r+   rf   zPregelNode.flat_writers   s     ,,##%L172;572;5 'r{))GBK,>,>>GBK KKM L172;572;5 r,   c                
   | j                   }| j                  t        u r|sy| j                  t        u rt        |      dk(  r|d   S | j                  t        u rt	        | S |rt	        | j                  g| S | j                  S )z3Get a runnable that combines `bound` and `writers`.Nro   r   )rf   rY   rb   rs   r   rt   s     r+   rg   zPregelNode.node   sy     ##::&wZZ=(S\Q->1:ZZ=(((tzz4G44::r,   c                    | j                   t        | j                  t              rt	        | j                        fS | j                  ffS )zsGet a cache key for the input to the node.
        This is used to avoid calculating the same input multiple times.)r   r1   rU   ra   tuple)r)   s    r+   rh   zPregelNode.input_cache_key   sG    
 KK$--. $-- 
 	
 --!	
 	
r,   c                    | j                   | j                  d} | j                  j                  |t	        ||      fi |S N)r^   r   )r^   r   rY   invoker   r)   rQ   r=   kwargsself_configs        r+   rz   zPregelNode.invoke   sF     48==$))&T tzz  +v.
 
 	
r,   c                   K   | j                   | j                  d} | j                  j                  |t	        ||      fi | d {   S 7 wry   )r^   r   rY   ainvoker   r{   s        r+   r   zPregelNode.ainvoke   sT      48==$))&T'TZZ''+v.
 
 
 	
 
s   AAAAc              +     K   | j                   | j                  d} | j                  j                  |t	        ||      fi |E d {    y 7 wry   )r^   r   rY   streamr   r{   s        r+   r   zPregelNode.stream   sO      48==$))&T$4::$$+v.
 
 	
 	
s   AAAAc                  K   | j                   | j                  d} | j                  j                  |t	        ||      fi |2 3 d {   }| 7 
6 y wry   )r^   r   rY   astreamr   )r)   rQ   r=   r|   r}   items         r+   r   zPregelNode.astream	  sc      48==$))&T,$**,,+v.
 
 	 	$
 J	 
s*   AAAA	AAAA)rU   r   rV   zSequence[str]r   r   rX   zlist[Runnable] | Noner   rC   r^   r]   rY   Runnable[Any, Any] | NonerZ   z*RetryPolicy | Sequence[RetryPolicy] | Noner\   r[   r_   zSequence[PregelProtocol] | NonerD   rE   )rk   zdict[str, Any]rD   rT   )rD   rW   )rD   r   )rD   INPUT_CACHE_KEY_TYPErF   )rQ   r
   r=   RunnableConfig | Noner|   
Any | NonerD   r
   )rQ   r
   r=   r   r|   r   rD   zIterator[Any])rQ   r
   r=   r   r|   r   rD   zAsyncIterator[Any])rH   rI   rJ   rK   rL   r&   rm   r	   rf   rg   rh   rz   r   r   r   rP   r,   r+   rT   rT   _   s   * R  ('IP  /.;$$9
1&&5''% /3)-!%-1+/CG+/59&  "&   	& 
 ,&  '&  &  +&  )&  A&  )&  3&  
& P#      
 
 )-

 &
 	

 

  )-

 &
 	

 

  )-

 &
 	

 

  )- & 	
 
r,   rT   N))
__future__r   collections.abcr   r   r   r   r   	functoolsr	   typingr
   langchain_core.runnablesr   r   langgraph._internal._configr   langgraph._internal._constantsr   r   langgraph._internal._runnabler   r   langgraph.pregel._utilsr   langgraph.pregel._writer   langgraph.pregel.protocolr   langgraph.typesr   r   r2   r   dict	READ_TYPErw   r   r   rb   rT   rP   r,   r+   <module>r      s    " P P % > 5 @ G 8 0 4 4cHSM)40#S#X2FFG	Xc3h/sCx@A B'" B'J !!45v vr,   