
    }
i\              	      *   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
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mZmZmZmZ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#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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZT d dlUmVZV d dlWmXZXmYZY d dlZm[Z[ d dl\m]Z] d dl^m_Z_m`Z` d dlambZbmcZc d dldmeZemfZfmgZgmhZhmiZimjZjmkZk e
e&dz  dge&f         Zlejm        dk    Zn G d d e          Zo G d! d"e          Zp G d# d$          Zqdd-Zr	 ddd;ZsddAZtddHZueddddddIddJdd`            ZvedddIddaddh            ZvddddddIddJddjZveCfZw G dk dle          ZxddddddIdmddyZydddddIdzddZzdddddIdzddZ{ddZ|ddZ}ddZ~ddZddZddZddZ ej                    Z G d d          ZddZdS )    )annotationsN)defaultdictdeque)CallableIterableMappingSequence)copy)partial)sha1)AnyLiteral
NamedTupleProtocolcastoverload)	Callbacks)AsyncParentRunManagerParentRunManager)RunnableConfig)BaseCheckpointSaverChannelVersions
CheckpointPendingWriteV)	BaseStore)xxh3_128_hexdigest)merge_configspatch_config)CACHE_NS_WRITESCONFCONFIG_KEY_CHECKPOINT_IDCONFIG_KEY_CHECKPOINT_MAPCONFIG_KEY_CHECKPOINT_NSCONFIG_KEY_CHECKPOINTERCONFIG_KEY_READCONFIG_KEY_RESUME_MAPCONFIG_KEY_RUNTIMECONFIG_KEY_SCRATCHPADCONFIG_KEY_SENDCONFIG_KEY_TASK_IDERROR	INTERRUPT	NO_WRITESNS_ENDNS_SEPNULL_TASK_IDPREVIOUSPULLPUSHRESERVEDRESUMERETURNTASKS)PregelScratchpad)	EMPTY_SEQMISSING)BaseChannel)Topic)UntrackedValue)
TAG_HIDDEN)ManagedValueMapping)get_runnable_for_task
identifier)read_channels)logger)INPUT_CACHE_KEY_TYPE
PregelNode)DEFAULT_RUNTIMERuntime)AllCacheKeyCachePolicyPregelExecutableTask
PregelTaskRetryPolicySend)      c                  r    e Zd ZdZedd            Zedd            Zedd            Zedd
            ZdS )WritesProtocolzProtocol for objects containing writes to be applied to checkpoint.
    Implemented by PregelTaskWrites and PregelExecutableTask.returntuple[str | int | tuple, ...]c                    d S N selfs    C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/pregel/_algo.pypathzWritesProtocol.path\   s    58S    strc                    d S rW   rX   rY   s    r[   namezWritesProtocol.name_   s    3r]   Sequence[tuple[str, Any]]c                    d S rW   rX   rY   s    r[   writeszWritesProtocol.writesb   s    363r]   Sequence[str]c                    d S rW   rX   rY   s    r[   triggerszWritesProtocol.triggerse   s    ),r]   N)rT   rU   )rT   r^   )rT   ra   )rT   rd   )	__name__
__module____qualname____doc__propertyr\   r`   rc   rf   rX   r]   r[   rS   rS   X   sv        A A 888 X8 X666 X6,,, X,,,r]   rS   c                  <    e Zd ZU dZded<   ded<   ded<   ded	<   d
S )PregelTaskWriteszSimplest implementation of WritesProtocol, for usage with writes that
    don't originate from a runnable task, eg. graph input, update_state, etc.rU   r\   r^   r`   ra   rc   rd   rf   N)rg   rh   ri   rj   __annotations__rX   r]   r[   rm   rm   i   sM         Q Q ('''III%%%%r]   rm   c                  N    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ddZdS )Callfuncinputretry_policycache_policy	callbacksr   rr   &tuple[tuple[Any, ...], dict[str, Any]]rs   Sequence[RetryPolicy] | Nonert   CachePolicy | Noneru   r   rv   rT   Nonec               L    || _         || _        || _        || _        || _        d S rW   rq   )rZ   rr   rs   rt   ru   rv   s         r[   __init__zCall.__init__|   s-     	
(("r]   N)rr   r   rs   rw   rt   rx   ru   ry   rv   r   rT   rz   )rg   rh   ri   	__slots__rn   r|   rX   r]   r[   rp   rp   s   sh         NINNN1111....$$$$# # # # # #r]   rp   
checkpointr   interrupt_nodesAll | Sequence[str]tasksIterable[PregelExecutableTask]rT   list[PregelExecutableTask]c                n   t          t          t          | d                                                   d                    } |            | d                             t
          i           t          fd| d                                         D                       }|rfd|D             ng S )z@Check if the graph should be interrupted based on current state.channel_versionsNversions_seenc              3  R   K   | ]!\  }}|                     |          k    V  "d S rW   get).0chanversionnull_versionseens      r[   	<genexpr>z#should_interrupt.<locals>.<genexpr>   sN       + +D' 	$((4...+ + + + + +r]   c                    g | ]B}d k    r/|j         r't          |j                             dt                    vrn	|j        v @|CS )*tags)configr?   r   r:   r`   )r   taskr   s     r[   
<listcomp>z$should_interrupt.<locals>.<listcomp>   sk     	
 	
 	
 #c))  * ")K)KKK Y/11  211r]   )typenextitervaluesr   r-   anyitems)r~   r   r   version_type any_updates_since_prev_interruptr   r   s    `   @@r[   should_interruptr      s     T*-?"@"G"G"I"IJJDQQRRL<>>Lo&**9b99D'* + + + + +'(:;AACC+ + + ( ($$ ,	 	
 	
 	
 	
	
 	
 	
 	
 r]   F
scratchpadr9   channelsMapping[str, BaseChannel]managedr@   r   selectlist[str] | strfreshbooldict[str, Any] | Anyc                ^    t          t                    }t          |t                    r1g }|j        D ]&\  }}	||k    r||                             |	           'nHfd|D             }fd|D             }|j        D ]$\  }}	||v r||                             |	           %|rRi }
|D ]<}||                                         }|                    ||                    ||
|<   =t          |
|          }nt          ||          }|r"|                     fd|D                        |S )zFunction injected under CONFIG_KEY_READ in task config, to read current state.
    Used by conditional edges to read a copy of the state with reflecting the writes
    from that node only.c                    g | ]}|v |	S rX   rX   r   kr   s     r[   r   zlocal_read.<locals>.<listcomp>   s    :::aQ'\\\\\r]   c                    g | ]}|v|	S rX   rX   r   s     r[   r   zlocal_read.<locals>.<listcomp>   s#    888q'7'7!'7'7'7r]   c                H    i | ]}||                                        S rX   r   )r   r   r   r   s     r[   
<dictcomp>zlocal_read.<locals>.<dictcomp>   s+    KKKq'!*..44KKKr]   )	r   list
isinstancer^   rc   appendr
   updaterC   )r   r   r   r   r   r   updatedmanaged_keyscvlocal_channelsr   ccr   s   ` `           r[   
local_readr      s}    %0$5$5G&# 
%K 	% 	%DAqF{{
!!!$$$	% ;:::6:::8888V888K 	% 	%DAqF{{
!!!$$$ 
113 	# 	#A!!!##BIIgaj!!! "N1~v66x00 MKKKKKlKKKLLLMr]   current
int | Nonechannelrz   intc                    | | dz   ndS )zHDefault channel versioning function, increments the current int version.N   rX   )r   r   s     r[   	incrementr      s    !-7Q;;14r]   Iterable[WritesProtocol]get_next_versionGetNextVersion | Nonetrigger_to_nodesMapping[str, Sequence[str]]set[str]c                    t          |d           }t          d |D                       }|D ]G} d                             |j        i                                fd|j        D                        H|d}n; | d         r't           d                                                   ndd          }fd|D             D ])}|                                         r|| d         |<   *t          t                    }	|D ]}|j        D ]v\  }}
|t          t          t          t          t           t"          fv r.|v r|	|                             |
           Nt'          j        d	|j         d
|j         d| d           wt-                      }|	                                D ]`\  }}|v rW|                             |          r<|:| d         |<   |                                         r|                    |           a|rD ]|}|                                         r`||vr\|                             t4                    r<|:| d         |<   |                                         r|                    |           }|rp|                    |          r[D ]X}|                                         r<|:| d         |<   |                                         r|                    |           Y|S )aX  Apply writes from a set of tasks (usually the tasks from a Pregel step)
    to the checkpoint and channels, and return managed values writes to be applied
    externally.

    Args:
        checkpoint: The checkpoint to update.
        channels: The channels to update.
        tasks: The tasks to apply writes from.
        get_next_version: Optional function to determine the next version of a channel.
        trigger_to_nodes: Mapping of channel names to the set of nodes that can be triggered by updates to that channel.

    Returns:
        Set of channels that were updated in this step.
    c                :    t          | j        d d                   S )NrP   )task_path_strr\   )ts    r[   <lambda>zapply_writes.<locals>.<lambda>   s    afRaRj(A(A r]   )keyc              3  $   K   | ]}|j         V  d S rW   )rf   r   r   s     r[   r   zapply_writes.<locals>.<genexpr>   s$      ..1AJ......r]   r   c                B    i | ]}|d          v |d          |         S )r   rX   )r   r   r~   s     r[   r   z apply_writes.<locals>.<dictcomp>   sA       :&8999 j!34T:999r]   Nr   c                B    h | ]}|j         D ]}|t          v|v |S rX   )rf   r5   )r   r   r   r   s      r[   	<setcomp>zapply_writes.<locals>.<setcomp>  sQ       M  xDH$4$4 	 %5$4$4$4r]   zTask z with path z wrote to unknown channel z, ignoring it.)sortedr   
setdefaultr`   r   rf   maxr   consumer   r   rc   r.   r4   r6   r-   r7   r,   r   rD   warningr\   setr   is_availableaddr:   
isdisjointfinish)r~   r   r   r   r   	bump_stepr   next_versionr   pending_writes_by_channelvalupdated_channelsvalss   ``           r[   apply_writesr      s   0 5AABBBE .......I  
 
?#..ty"==DD    M  	
 	
 	
 	
 '' 01J1299;;<<<
 
      @ @ D>!!## 	@(@3?J)*40 7B$6G6G 	 	 	 	ID#	4FEJJJ!!)$/66s;;;;kDIkk$)kkW[kkk   	 "%/5577 / /
d8~$$T** /|/G7C
-.t4D>..00 /$((...  3 	3 	3D~**,, 3=M1M1MD>((33 38P;GJ1248~2244 3(,,T222  /%001ABB / 	/ 	/D~$$&& /<+C7C
-.t4D>..00 /$((... r]   rX   )storecheckpointermanagerr   r   rt   ru   pending_writeslist[PendingWrite]	processesMapping[str, PregelNode]r   r   stepstopfor_executionLiteral[False]r   Literal[None]r   r   "Mapping[str, Sequence[str]] | Noner   set[str] | Nonert   Sequence[RetryPolicy]ru   dict[str, PregelTask]c                   d S rW   rX   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   ru   s                   r[   prepare_next_tasksr   E  s	    &  Cr]   )r   r   rt   ru   Literal[True]BaseStore | NoneBaseCheckpointSaver | None/None | ParentRunManager | AsyncParentRunManagerry   dict[str, PregelExecutableTask]c                   d S rW   rX   r   s                   r[   r   r   [  s	    & '*cr]   7dict[str, PregelTask] | dict[str, PregelExecutableTask]c                  i }t          j        | d                             dd                    }t          |           }g }t	          t
          t                   dz  |                    t                              }|r|	                                rt          |                                          D ]b\  }}t          t          |fdfi d| d|d|d|d	|d
|d|d|d|d|d|d|	d|
d|d|d|d|x}r|                    |           c|rQ|rOt                      }|D ].}|                    |          x}r|                    |           /t!          |          }n| d         sd}n|                                }|D ]_}t          t$          |fdfi d| d|d|d|d	|d
|d|d|d|d|d|d|	d|
d|d|d|d|x}r|                    |           `d |D             S )a{  Prepare the set of tasks that will make up the next Pregel step.

    Args:
        checkpoint: The current checkpoint.
        pending_writes: The list of pending writes.
        processes: The mapping of process names to PregelNode instances.
        channels: The mapping of channel names to BaseChannel instances.
        managed: The mapping of managed value names to functions.
        config: The `Runnable` configuration.
        step: The current step.
        for_execution: Whether the tasks are being prepared for execution.
        store: An instance of BaseStore to make it available for usage within tasks.
        checkpointer: `Checkpointer` instance used for saving checkpoints.
        manager: The parent run manager to use for the tasks.
        trigger_to_nodes: Optional: Mapping of channel names to the set of nodes
            that are can be triggered by that channel.
        updated_channels: Optional. Set of channel names that have been updated during
            the previous step. Using in conjunction with trigger_to_nodes to speed
            up the process of determining which nodes should be triggered in the next
            step.

    Returns:
        A dictionary of tasks to be executed. The keys are the task ids and the values
        are the tasks themselves. This is the union of all PUSH tasks (Sends)
        and PULL tasks (nodes triggered by edges).
    id- Nr~   checkpoint_id_bytescheckpoint_null_versionr   r   r   r   r   r   r   r   r   r   r   input_cacheru   rt   r   rX   c                    i | ]
}|j         |S rX   )r   r   s     r[   r   z&prepare_next_tasks.<locals>.<dictcomp>  s    ###AD!###r]   )binascii	unhexlifyreplacer  r   r=   rO   r   r8   r   	enumerateprepare_single_taskr4   r   r   r   r   keysr3   )r~   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   ru   r  r  r   r   tasks_channelidx_r   triggered_nodesr   node_idscandidate_nodesr`   s                                r[   r   r   q  sn   Z 46K",Z-=-E-Ec2-N-NOO*:66L57Ett+X\\%-@-@AAM #3355 # 1 1 3 344 	# 	#FC*s   &: %8$7	
 )5  .~ $) "   v T T ,m e *\   !" (K#$ *\%& *\' t #* T"""  +, +$'EE' 	1 	1G+//888x 1&&x000)/)@)@*+ +#..**    &4L
 
 
 "z
 !4 3	

 %1L
 *>
  i
 X
 G
 6
 
 
 (-
 %
 &
  G!
" $#
$ &%
& &'
 
4 	* LL##U####r]   c                      e Zd Zd	dZdS )
	_TaskIDFn	namespacebytespartsstr | bytesrT   r^   c                    d S rW   rX   )rZ   r  r  s      r[   __call__z_TaskIDFn.__call__  s    r]   Nr  r  r  r  rT   r^   )rg   rh   ri   r  rX   r]   r[   r  r    s(             r]   r  )r   r   r   r  ru   rt   	task_pathtuple[Any, ...]task_id_checksum
str | Noner  r  r  V | Noner  &dict[INPUT_CACHE_KEY_TYPE, Any] | None(None | PregelTask | PregelExecutableTaskc               v   |	                     t          i           }|                     t          d          }|d         dk    rt          nt          }| d         t
          k    rt          | d         t                    rst          t          t          t          t          t          t          t          f         |           |fi d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|S | d         t
          k    rdt          t          t          t          t          f         |           |fi d|d|d|d	|d
|d|	d|
d|d|d|d|d|d|d|d|d|d|S | d         t          k    r@t          t          | d                   }||vrdS ||         }|dS t          ||d         |d                              |          ||          rt          t!          |j                            }|r| t$           | n|} |||t          |
          |t          g|R  }| t&           | }t)          |	t                                        t*                    ||t-          |                                          |	t                                        t0                    |
|          }	 t3          ||||||          }|t4          u rdS n># t6          $ r1}t8          r$|                    d| d| dd          d            d}~ww xY w|
||| dd         |d}|||k    sJ | d |             |re|j        x} rY|j        r|                     |j                   tC                      }!|j"        p|}|ry|#                    |          }"tI          tJ          tM          |          pd!|ft-          t          |"t                    r|"                                n|"          |j'                  }#nd}#t          tP          |                     tR          tT                              }$|$+                    |d"                              tX          d          |#          }$||j-        d$}%t]          ||| |!t_          ta          |	t          tb          |%                    ||r|2                    d%|
           ndtf          |th          |!j5        tl          to          tp          |||ts          | dd         ||!|                    tt          |p|                     tt                    tv          i |                     tv          i           ||d&         itx          dt          |t*          |tR          |$i	'          ||j=        p||#|| dd         |j>        |j?        (          S dS t          ||| dd                   S dS dS ))zPrepares a single task for the next Pregel step, given a task path, which
    uniquely identifies a PUSH or PULL task within the graph.r   r   r   r   r~   r  r   r   r   r   r   r   r   r   r   r   ru   rt   	parent_nstask_id_funcr   Nr   r   )r   r  r   zBefore task with name 'z' and path 'rP   'langgraph_steplanggraph_nodelanggraph_triggerslanggraph_pathlanggraph_checkpoint_ns != __dynamic__channel_values)previousr   metadatar   graph:step:r   run_namerv   configurablewriters	subgraphs)Ar   r!   r$   _xxhash_str
_uuid5_strr4   r   rp   prepare_push_task_functionalr   tupler^   r   prepare_push_task_sendr3   	_triggersr   rf   r0   r/   _scratchpadr)   r   encoder'   _proc_inputr;   	ExceptionSUPPORTS_EXC_NOTESadd_notenoder1  r   r   ru   key_funcrJ   r    rB   ttlrH   r(   rG   overrider2   r   rL   r   r   r   	get_childr+   r*   extendr&   r   r   rm   r%   r#   r"   rt   flat_writersr8  rM   )&r  r  r~   r  r  r   r   r   r   r   r   r   r   r   r   r   r  ru   rt   r5  r#  r$  r`   procrf   checkpoint_nstask_idtask_checkpoint_nsr   r   excr1  rE  rc   args_key	cache_keyruntimeadditional_configs&                                         r[   r	  r	    s   0 ::dB''L  !92>>I",S/A"5"5;;:L|t
9R=$ ? ?+sE3T12I>>
 
 
 "z
 !4 3	

 *>
 X
 G
 6
 
 
 (-
 %
 &
 G
 &
  &!
"  i#
$ &%
 	
* 
1		%sEz"I..
 
 
 "z
 !4 3	

 *>
 X
 G
 6
 
  i
 
 (-
 %
 &
 G
  &!
" &#
$  i%
& &'
 	
, 
1		C1&&y  F"*F)*'++D11#
 
 S	@ VDM2233H<EOy8&8$8884M"l#D		   G %2!D6!D7!D!D$t  !677"#5#<#<#>#>??t  !677 J!"/ +)   '>>F "   % LLT$TTIbqbMTTT    #'"&&."+BQB-+= H  +"2222w4V4VDT4V4V222 Z@9$4 W} 7 6665:WWF#'#4#DL# )#/#8#8#=#=$, /!+D!1!1!B] $
 / (2(C'@'@%2HOO$5$5$5)1	  ),% %		  %)	"!1!12Do!V!V G &..!+,<!=!A!A(D!Q!Q# /  G
 %- $	) )% 0$) &^=N(O(O  &* $+!* 1 12F2F2F G G G%) !3G / /$.$.$,$+$4(1"1"(,(.(0	%& %&2" 2" !8$0 %Q'3'7'78O'P'P 9 <"&2&6&67PRT&U&U<"$-z$/?<" <" !9$ 8:L 5z 2G7*' ' 'P !)9\!!"1" $ 1"&.g4 4 4 4GW Wr "'42A2???y 
	S	@ S	@s   0K 
L,LL)r   r   r   ru   rt   !tuple[str, tuple, int, str, Call]r#  r^   r$  !PregelTask | PregelExecutableTaskc                  |                     t          i           }| d         }t          |j                  }|j        }|t          d          t          }|r| t           | n|} |||t          |          |t          t          | d                   t          | d                             }| d| }g | dd         dR }|||||d	}|||k    sJ | d
|             |
rbt                      }|j        p|}|r |j        |j        d         i |j        d         }t          t           t#          |j                  pdft%          t'          |t                    r|                                n|          |j                  }nd}t-          |                     t.                    ||t%          |                                          |                     t0                    ||	          }t3          t4          |                     t6          t8                              } |                     |          } t=          ||j        ||t?          tA          |d|i          ||j!        p|r|"                    d|           ndtF          |tH          |j%        tL          tO          tP          |||tS          ||||                    tT          |p|                     tT                    tV          i |                     tV          i           ||d         itX          dtZ          |t.          |t6          | i	          ||j.        p||||
  
        S t_          |||          S )zIPrepare a push task with an attached caller. Used for the functional API.r"  Nz1`call` functions must have a `__name__` attributer      :rP   Tr&  r,  r   r-  )r   r1  r2  r   r3  )0r   r!   rA   rr   r`   
ValueErrorPUSH_TRIGGERr0   r^   r4   r   r   ru   rF  rs   rJ   r    rB   r   r   r@  rG  r?  r)   r'   r   rH   r(   rG   rH  rL   r   r   rv   rI  r+   r*   rJ  r&   r   r   rm   r%   r#   r"   r$   rt   rM   )!r  r  r~   r  r   r   r   r   r   r   r   r   r   r   ru   rt   r#  r$  r5  callproc_r`   rf   rM  rN  rO  in_progress_task_pathr1  rc   rQ  rR  r   rS  s!                                    r[   r;  r;    s   0 ::dB''LR=D!$),,E:D|LMMM*H4=Gy0&0$0004MlD		il##IaL G *55G55 3im2T22&/#5 H #****w,N,N<L,N,N*** E@).(8L 	,|,djmMtz!}MMH)1#	**;m #)3Hc)B)BPHOO%%%   	* 	*II I 233188::;;233
 

 w 0 01C_ U UVV"""//#Jfz8&<==. R?FPG%%&:D&:&:;;;D&#V]#W"" ()>fhWW& & ,$Q(8(89P(Q(Q- 0&**+DbII0!:d#30 0 -d,.@):&+  : -!M'
 '
 '	
R '4)>???r]   tuple[str, tuple](PregelTask | PregelExecutableTask | Nonec               v	   t          |           dk    rQt          t          | d                   }|t                                                   sd S |t                                                   }|dk     s|t          |          k    rd S ||         }t          |t                    s't          j	        dt          |           d           d S |j        |vrt          j	        d|j         d           d S ||j                 }|j        }|d S t          }|r| t           |j         n|j        } |||t          |          |j        t          t          |                    }nt          j	        d|             d S |                    t           i           }| d| }g | d d	         d
R }||j        |||d}|||k    sJ | d|             |
r|j        r|                    |j                   t'                      }|j        p|}|r|                    |j                  } t/          t0          t3          |          pd|j        ft5          t          | t                    r|                                 n|           |j                  }!nd }!t;          |t                                        t<                    ||t5          |                                          |t                                        t>                    ||	          }"t          t@          |                    tB          tD                              }#|##                    ||d                             tH          d                     }#||j%        d}$tM          |j        |j        ||tO          tQ          ||$          |j        |r|)                    d|           nd tT          |tV          |j,        tZ          t]          t^          |"||ta          ||j        ||                    tb          |p|                    tb                    td          i |                    td          i           ||d         itf          d th          |t<          |"tB          |#i	          ||j5        p||!|||j6        |j7                  S tq          ||j        |          S )NrX  r   r   zIgnoring invalid packet type z in pending sendszIgnoring unknown node name z Ignoring invalid PUSH task path rY  rP   Fr&  r,  r-  r.  )r   r/  r0  r2  r   r3  r6  )9lenr   r   r8   r   r   r   rO   rD   r   r   rE  r[  r0   r^   r4   r!   r1  r   r   ru   rF  argrJ   r    rB   r   r@  rG  r?  r)   r'   rH   r(   rG   rH  r2   r   rL   r   r   rI  r+   r*   rJ  r&   r   r   rm   r%   r#   r"   r$   rt   rK  r8  rM   )%r  r  r~   r  r   r   r   r   r   r   r   r   r   r   ru   rt   r#  r$  r   r  sendspacketrL  	proc_noderf   rM  rN  r5  rO  translated_task_pathr1  rc   rQ  rR  r   rS  rT  s%                                        r[   r=  r=  ]  s   . 9~~ 3	!%%++-- 	F ( 3 3 5 577cSZZ''Fs&$'' 	NOVOOO   F;i''NWWWWXXXF%I	F3<My/&/&+///&+ 	 ,IIKHH
 
 	E)EEFFF::dB''L)55G55 3Yrr]2E22 +&.#5 H #****w,N,N<L,N,N*** SF= 	+OODM***).(8L 	#,,VZ88H #%%6K
 #)3Hc)B)BPHOO%%%   
 
II I 4L233188::;;4L233
 

 w 0 01C_ U UVV""*-=">"B"B8T"R"R # 
 
 !I-
 -
 $KJf&788?FPG%%&:D&:&:;;;D '#V]#W"" (0&+vx & & ,$Q(8(89P(Q(Q- 0&**+DbII0!:d#30 0 -d,.@):&/  @ - %nW,
 ,
 ,
 ,	
\ '6;0DEEEr]   c                p    | d                                          D ]} t          |                      c S dS )z6Get the null version for the checkpoint, if available.r   N)r   r   )r~   r   s     r[   r  r     sB     0188::  tG}}4r]   versionsr   r   ChannelVersions | Noner   r   rL  rF   c                   |(|j         D ]}| |                                         r dS  nU|j         D ]M}| |                                         r1|                    ||          |                    ||          k    r dS NdS )NTF)rf   r   r   )r   ri  r   r   rL  r   s         r[   r>  r>  	  s     |M 	 	D~**,, tt	 M 	 	D~**,, l2 2|,,2- 2- tt5r]   parent_scratchpadPregelScratchpad | NonerN  namespace_hash
resume_mapdict[str, Any] | Nonec           
         t                    dk    rD ](}|d         t          k    r|d         t          k    r| n)d D ]A}|d         |k    r3|d         t          k    r"|d         }t          |t                    s|g} nBg }~|r!||v r||         }	|                    |	           nd g }dd fd	}
t          ||t                      t                      ||
t                      
          S )Nr   r   rX  Fr   r   rT   r   c                                         |           S d S | r/	                                d         S # t          $ r Y d S w xY wd         S )NrX  )get_null_resumeremoverZ  )r   null_resume_writerl  r   s    r[   rs  z$_scratchpad.<locals>.get_null_resumeE  s    $ ,(88AAA4 	%%&7888(++   tt ##s   = 
A
A)r   r   call_counterinterrupt_counterresumers  subgraph_counterF)r   r   rT   r   )rb  r1   r6   r   r   r   r9   LazyAtomicCounter)rl  r   rN  rn  ro  r   r   wtask_resume_writemapped_resume_writers  ru  s   ``         @r[   r?  r?    sg    >Q 	% 	%At|##!$%! !%   	# 	#Atw1Q46>>$%aD!!"3T:: <):(;% "  	:.J66",^"<$$%8999 !$ $ $ $ $ $ $ $ $ &((+-- '*,,   r]   r   c                  |#| j         |v rt          || j                            S t          | j        t                    rgi }| j        D ]\}||v r8||                                         r||                                         ||<   >||                             |          ||<   ]nt          | j        t                    rV| j        |v rF|| j                                                 r || j                                                 }n%t          S t          S t          d| j                   |r| j
        | 
                    |          }|
||| j         <   |S )zLPrepare input for a PULL task, based on the process's channels and triggers.Nz2Invalid channels type, expected list or dict, got )input_cache_keyr
   r   r   r   r   r   r^   r;   RuntimeErrormapper)rL  r   r   r   r   r  r   r   s           r[   rA  rA  a  su    4#7;#F#FK 45666 $-&& 
 M 	: 	:DxD>..00 5 ( 2 2 4 4CI#DM--j99D			: 
DM3	'	' 
=H$$&3355 t}-1133NPPP
 
 	

  0kk# ,/D()Jr]   r  r  r  c                    t          | d          }|                    d                    d |D                                  |                                }|dd          d|dd          d|dd	          d|d	d
          d|d
d          	S )zAGenerate a UUID from the SHA-1 hash of a namespace and str parts.F)usedforsecurityr]   c              3  l   K   | ]/}t          |t                    r|                                n|V  0d S rW   r   r^   r@  r   ps     r[   r   z_uuid5_str.<locals>.<genexpr>  s=      OOAjC&8&8?


aOOOOOOr]   N   r                )r   r   join	hexdigest)r  r  shahexs       r[   r:  r:    s     y%
0
0
0CJJsxxOOOOOOOPPP
--//C"1"gJJAbD	JJC2JJJRUJJc"R%jJJJr]   c                    t          | d                    d |D                       z             }|dd          d|dd          d|dd          d|dd          d|dd	          	S )
z@Generate a UUID from the XXH3 hash of a namespace and str parts.r]   c              3  l   K   | ]/}t          |t                    r|                                n|V  0d S rW   r  r  s     r[   r   z_xxhash_str.<locals>.<genexpr>  s=      TT:a+=+=DQXXZZZ1TTTTTTr]   Nr  r   r  r  r  r  )r   r  )r  r  r  s      r[   r9  r9    s    
CHHTTeTTTTTT C "1"gJJAbD	JJC2JJJRUJJc"R%jJJJr]   tupstr | int | tuplec                    t          | t          t          f          r"dd                    d | D                        n't          | t                    r| dnt          |           S )z2Generate a string representation of the task path.~z, c              3  4   K   | ]}t          |          V  d S rW   )r   )r   xs     r[   r   z task_path_str.<locals>.<genexpr>  s*      441mA&&444444r]   010d)r   r<  r   r  r   r^   )r  s    r[   r   r     sm     cE4=))	6DII4444444666 c3]]]XXr]   c                  .    e Zd ZU dZded<   d
dZddZd	S )r{  _counterzCallable[[], int] | Noner  rT   rz   c                    d | _         d S rW   r  rY   s    r[   r|   zLazyAtomicCounter.__init__  s    r]   r   c                    | j         Dt          5  | j         t          j        d          j        | _         d d d            n# 1 swxY w Y   |                                  S )Nr   )r  LAZY_ATOMIC_COUNTER_LOCK	itertoolscount__next__rY   s    r[   r  zLazyAtomicCounter.__call__  s    = ) @ @=($-OA$6$6$?DM@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ }}s   &AAAN)rT   rz   )rT   r   )rg   rh   ri   r}   rn   r|   r  rX   r]   r[   r{  r{    sO         I&&&&        r]   r{  re  rO   c                    t          | j        t                    s| S fd| j                                        D             }t	          | j        |          S )a  Pop any values belonging to UntrackedValue channels in Send.arg for safe checkpointing.

    Send is often called with state to be passed to the dest node, which may contain
    UntrackedValues at the top level. Send is not typed and arg may be a nested dict.c                l    i | ]0\  }}t                              |          t                    -||1S rX   )r   r   r>   )r   r   r   r   s      r[   r   z5sanitize_untracked_values_in_send.<locals>.<dictcomp>  sI       Aq(,,q//>::	1  r]   )rE  rc  )r   rc  dictr   rO   rE  )re  r   sanitized_args    ` r[   !sanitize_untracked_values_in_sendr    sk     fj$''    J$$&&  M
 V[m4444r]   )r~   r   r   r   r   r   rT   r   rz  )r   r9   r   r   r   r@   r   rS   r   r   r   r   rT   r   )r   r   r   rz   rT   r   )r~   r   r   r   r   r   r   r   r   r   rT   r   )"r~   r   r   r   r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   ru   r   rT   r   )"r~   r   r   r   r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   ru   ry   rT   r   )"r~   r   r   r   r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   ru   ry   rT   r   )(r  r  r  r  r~   r   r  r  r  r  r   r   r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  ru   ry   rt   r   rT   r   )&r  rU  r  r  r~   r   r  r  r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   ry   rt   r   r#  r^   r$  r  rT   rV  )(r  r_  r  r  r~   r   r  r  r   r   r   r   r   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   ry   rt   r   r#  r^   r$  r  r   r   rT   r`  )r~   r   rT   r  )r   r   ri  r   r   rj  r   r   rL  rF   rT   r   )rl  rm  r   r   rN  r^   rn  r^   ro  rp  r   r   r   r   rT   r9   )rL  rF   r   r@   r   r   r   r   r   r9   r  r  rT   r   r  )r  r  rT   r^   )re  rO   r   r   rT   rO   )
__future__r   r  r  sys	threadingcollectionsr   r   collections.abcr   r   r   r	   r
   	functoolsr   hashlibr   typingr   r   r   r   r   r   langchain_core.callbacksr    langchain_core.callbacks.managerr   r   langchain_core.runnables.configr   langgraph.checkpoint.baser   r   r   r   r   langgraph.store.baser   xxhashr   langgraph._internal._configr   r   langgraph._internal._constantsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   langgraph._internal._scratchpadr9   langgraph._internal._typingr:   r;   langgraph.channels.baser<   langgraph.channels.topicr=   "langgraph.channels.untracked_valuer>   langgraph.constantsr?   langgraph.managed.baser@   langgraph.pregel._callrA   rB   langgraph.pregel._iorC   langgraph.pregel._logrD   langgraph.pregel._readrE   rF   langgraph.runtimerG   rH   langgraph.typesrI   rJ   rK   rL   rM   rN   rO   GetNextVersionversion_inforC  rS   rm   rp   r   r   r   r   r   r[  r  r	  r;  r=  r  r>  r?  rA  r:  r9  r   Lockr  r{  r  rX   r]   r[   <module>r     s   " " " " " "      



     * * * * * * * * A A A A A A A A A A A A                                  / . . . . . T T T T T T T T : : : : : :              + * * * * * % % % % % % C C C C C C C C                                                     6 = < < < < < : : : : : : : : / / / / / / * * * * * * = = = = = = * * * * * * 6 6 6 6 6 6 D D D D D D D D . . . . . . ( ( ( ( ( ( C C C C C C C C 6 6 6 6 6 6 6 6                  1t8T*A-.%0 - - - - -X - - -"    z   # # # # # # # #2   N $ $ $ $ $N5 5 5 5
i i i iX 
  "&!;?(,*,"&#          
 * 
 <@(,*,'+#* * * * * 
*@ #/3?C;?(,*,'+#y$ y$ y$ y$ y$ y$x w       ( #/3?C:>'+*,)e@ e@ e@ e@ e@ e@l #/3?C'+*,%}@ }@ }@ }@ }@ }@\ #/3?C'+*,%`F `F `F `F `F `FF      (A A A AH, , , ,^K K K KK K K K    *9>++         5 5 5 5 5 5r]   