ó
    ýÞ j•0  ã                  ó  • S SK Jr  S SKrS SKJrJrJr  S SKJrJr  S SK	J
r
Jr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r J!r!  Sr"\\
S/\
4   r#SS jr$S S jr%      S!S jr&    S"S jr'    S#S jr(        S$S jr)              S%S jr*SSSSS.               S&S jjr+S'S jr,SSS.         S(S jjr-SSS.         S(S jjr.S)S jr/g)*é    )ÚannotationsN)ÚCallableÚIterableÚMapping)ÚdatetimeÚtimezone)ÚAnyÚcast)ÚRunnableConfig)ÚBaseCheckpointSaverÚ
Checkpoint)Úuuid6)Ú_DeltaSnapshot)Ú#DELTA_MAX_SUPERSTEPS_SINCE_SNAPSHOT)ÚPUSH)ÚMISSING)ÚBaseChannel)ÚDeltaChannel)ÚManagedValueMappingÚManagedValueSpecé   c            	     ó¦   • [        [        [        [        SS95      [        R
                  " [        R                  5      R                  5       0 0 0 S9$ )Néþÿÿÿ©Ú	clock_seq)ÚvÚidÚtsÚchannel_valuesÚchannel_versionsÚversions_seen)	r   ÚLATEST_VERSIONÚstrr   r   Únowr   ÚutcÚ	isoformat© ó    ÚV/var/www/html/gaurav/venv/lib/python3.13/site-packages/langgraph/pregel/_checkpoint.pyÚempty_checkpointr*      sA   € ÜÜ
ÜŒu˜rÑ"Ó#Ü�<Š<œŸ™Ó%×/Ñ/Ó1ØØØñð r(   c           
     ó˜   • [        [        R                  " U5      5      R                  S5      nU S SUS    SUS    SUS    SUS    3	$ )zþSynthetic task id for exit-mode DeltaChannel writes.

Embeds the superstep in the first UUID group so `ORDER BY task_id, idx`
preserves chronological order while remaining a valid RFC UUID (required by
Postgres `checkpoint_writes.task_id uuid` columns).
Ú-Ú08dé   é   é   r   )r#   ÚuuidÚUUIDÚsplit)ÚstepÚtask_idÚpartss      r)   Úexit_delta_task_idr7   '   sW   € ô ”—	’	˜'Ó"Ó#×)Ñ)¨#Ó.€EØ�3ˆZ�q˜˜q™˜
 ! E¨!¡H :¨Q¨u°Q©x¨j¸¸%À¹(¸ÐDÐDr(   c                ó$  • [        5       nU R                  5        Hq  u  p4[        U[        5      (       a  UR	                  5       (       d  M1  UR                  US5      u  pVXTR                  :¼  d  U[        :¼  d  M`  UR                  U5        Ms     U$ )u#  Return the set of DeltaChannel names that should snapshot now.

A channel snapshots when EITHER its accumulated update count reaches
`snapshot_frequency` OR the total supersteps since its last snapshot
reaches `DELTA_MAX_SUPERSTEPS_SINCE_SNAPSHOT`. This is a pure
predicate â€” no mutation.
©r   r   )	ÚsetÚitemsÚ
isinstancer   Úis_availableÚgetÚsnapshot_frequencyr   Úadd)ÚchannelsÚcounters_since_delta_snapshotÚresultÚnameÚchÚupdatesÚ
superstepss          r)   Údelta_channels_to_snapshotrH   2   sw   € ô “u€FØ—N‘NÖ$‰ˆÜ˜"œl×+Ñ+°2·?±?×3DÑ3DÙØ;×?Ñ?ÀÀfÓMÑˆà×,Ñ,Ó,ØÔ@Õ@à�J‰J�tÖñ %ð €Mr(   c                ó|   • U  VVVs1 sH%  oR                    H  u  p#U[        :w  d  M  UiM     M'     snnn$ s  snnnf )zDChannel names written by an update_state superstep (excluding PUSH).)Úwritesr   )Ú	run_tasksÚtaskÚcÚ_s       r)   Úget_updated_channels_from_tasksrO   J   s.   € ñ $ÕI™)�$·´©¨¸qÄD¹y�A±‰A™)ÓIÐIùÔIs   ‡7¨
7c                ó²   • U R                  5        VVs1 sH5  u  p[        U[        5      (       d  M  UR                  5       (       d  M3  UiM7     snn$ s  snnf )zFDeltaChannels to snapshot on the first update_state of a fresh thread.)r;   r<   r   r=   )rA   ÚkrE   s      r)   Ú$get_delta_channels_from_all_channelsrR   Q   sK   € ð —^‘^Ô%ôá%‰EˆAÜ�bœ,×'ó 	
à,.¯O©O×,=÷ 	
Ù%òð ùó s   ”A²AÁ	Ac               ó  • [        U=(       d    0 R                  S5      =(       d    0 5      n0 nU R                  5        HD  u  pV[        U[        5      (       d  M  UR                  US5      u  pxUS-  nXQ;   a  US-  nXx4XE'   MF     U$ )z˜Advance ``counters_since_delta_snapshot`` for update_state on a non-fresh thread.

Mirrors the per-superstep counter bump in ``_loop._put_checkpoint``.
rB   r9   r.   )Údictr>   r;   r<   r   )	rA   Úupdated_channelsÚprev_metadataÚprev_countersÚnew_countersÚch_namerE   ÚuÚss	            r)   Ú$create_metadata_for_update_state_apir\   \   s�   € ô Ø	×	˜"×!Ñ!Ð"AÓB×HÀbó€Mð 02€LØ—~‘~Ö'‰ˆÜ˜"œl×+Ñ+ÙØ× Ñ  ¨&Ó1‰ˆØ	ˆQ‰ˆØÓ&Ø�‰FˆAØ!" ˆÓñ (ð Ðr(   c               óú   • SUUS.nU(       a  [        U 5      U4$ [        U UUS9n[        X5      nU H  n	SXy'   M	     UR                  5        V	V
s0 sH  u  pšU
S:w  d  M  Xš_M     nn	n
U(       a  X¶S'   X†4$ s  sn
n	f )zEReturn ``(channels_to_snapshot, metadata)`` for an update_state head.Úupdate)Úsourcer4   Úparents)rV   r9   rB   )rR   r\   rH   r;   )rA   rU   r4   r`   Úsaved_metadataÚis_fresh_threadÚmetadatarX   Úchannels_to_snapshotrQ   r   Únon_zeros               r)   Ú+create_checkpoint_plan_for_update_state_apirf   u   s    € ð ØØñ €Hö
 Ü3°HÓ=¸xÐGÐGä7ØØØ$ñ€Lô
 6°hÓMÐÛ!ˆØ ˆ‹ñ "à!-×!3Ñ!3Ô!5ÔEÑ!5™˜¸¸f¹“�’Ñ!5€HÑEÞØ4<Ð0Ñ1ØÐ)Ð)ùó Fs   ÁA7Á A7)r   rU   Úget_next_versionrd   c               ó   • [         R                  " [        R                  5      R	                  5       nU=(       d
    [        5       nUc  U S   nU S   n	O}0 n[        U S   5      n	U Hg  n
X©;  a  M
  X   nX¦;   a5  Ub  Ub  X¤;  a  U" Xš   S5      Xš'   [        UR                  5       5      XŠ'   MH  UR                  5       nU[        Ld  Mc  XÈU
'   Mi     [        [        UU=(       d    [        [        US95      UU	U S   Uc  SS9$ [        U5      S9$ )uµ  Build a new Checkpoint from the previous one and live channel state.

For each name in `channels_to_snapshot`, a `_DeltaSnapshot(value)` blob
is written into `channel_values[k]`. Other delta channels are omitted
from `channel_values` â€” the ancestor walk reconstructs their state
from `checkpoint_writes`. Callers compute the set via
`delta_channels_to_snapshot(channels, counters)`; defaults to empty
(no snapshots) when not provided.
Nr   r    r   r!   ©r   r   r   r   r    r!   rU   )r   r$   r   r%   r&   r:   rT   r   r>   Ú
checkpointr   r   r"   r#   r   Úsorted)rj   rA   r4   r   rU   rg   rd   r   Úvaluesr    rQ   rE   r   s                r)   Úcreate_checkpointrm   •   s'  € ô& 
�Š”h—l‘lÓ	#×	-Ñ	-Ó	/€BØ/×8´3³5ÐØÑØÐ,Ñ-ˆØ%Ð&8Ñ9ÑàˆÜ 
Ð+=Ñ >Ó?ÐÛˆAØÓ(ÙØ‘ˆBØÓ(ð" $Ñ/Ø$Ñ,°Ó0Iá*:Ð;KÑ;NÐPTÓ*UÐ$Ñ'Ü*¨2¯6©6«8Ó4�“	à—M‘M“O�ØœGÔ#Ø !˜1“Iñ; ô< Ü
ØØ×+””U TÑ*Ó+ØØ)Ø  Ñ1Ø!1Ñ!9˜ñð ô @FÐFVÓ?Wñð r(   c                ó>   • [        U [        5      (       d  gU[        L $ )u  True if `spec` is a `DeltaChannel` and no value is stored at this
checkpoint, requiring an ancestor walk to reconstruct.

`_DeltaSnapshot` blobs and plain values (migration) resolve directly via
`from_checkpoint` â€” only absence (`MISSING`) triggers replay.
F)r<   r   r   )ÚspecÚstoreds     r)   Ú_needs_replayrq   Ù   s   € ô �dœL×)Ñ)ØØ”WÐÐr(   )ÚsaverÚconfigc               ó˜  • 0 n0 nU R                  5        H$  u  pg[        U[        5      (       a  XtU'   M   XuU'   M&     UR                  5        VVs/ sH0  u  ph[        X�S   R	                  U[
        5      5      (       d  M.  UPM2     n	nn0 n
U	(       a  Ub  Ub  UR                  X9S9n
0 nUR                  5        H†  u  phXj;   aP  [        [        U5      nX¦   nUR                  UR	                  S[
        5      5      nUR                  US   5        UnO(UR                  US   R	                  U[
        5      5      nXûU'   Mˆ     Xµ4$ s  snnf )aà  Hydrate channels from a checkpoint.

For most channels, `spec.from_checkpoint(checkpoint["channel_values"][k])`
is sufficient. `DeltaChannel` is the exception: when the channel is
absent from `channel_values`, an ancestor walk via
`saver.get_delta_channel_history` is required to find the nearest seed
(`_DeltaSnapshot` blob or pre-migration plain value) and accumulate
the writes between it and the target. All delta channels needing
replay are batched into a single saver call.
r   ©rs   rA   ÚseedrJ   )r;   r<   r   rq   r>   r   Úget_delta_channel_historyr
   r   Úfrom_checkpointÚreplay_writes©Úspecsrj   rr   rs   Úchannel_specsÚmanaged_specsrQ   r   ro   Údelta_channelsÚ	historiesrA   Ú
delta_specÚhistoryÚ	replay_chrE   s                   r)   Úchannels_from_checkpointrƒ   å   sR  € ð" -/€MØ13€MØ—‘–‰ˆÜ�aœ×%Ñ%Ø ˜!Óà ˜!Óñ	 ð %×*Ñ*Ô,ô!á,‰GˆAÜ˜Ð*:Ñ;×?Ñ?ÀÄ7ÓK×L÷ 	
Ù,ð ñ !ð
 $&€IÞ˜%Ñ+°Ñ0BØ×3Ñ3Øð 4ð 
ˆ	ð (*€HØ ×&Ñ&Ö(‰ˆà‹>Üœl¨DÓ1ˆJØ‘lˆGØ"×2Ñ2°7·;±;¸vÄwÓ3OÓPˆIØ×#Ñ# G¨HÑ$5Ô6Ø‰Bà×%Ñ% jÐ1AÑ&B×&FÑ&FÀqÌ'Ó&RÓSˆBØ�‹ñ )ð Ð"Ð"ùó/!s   Á,EÂ Ec             ƒ  ó´  #   • 0 n0 nU R                  5        H$  u  pg[        U[        5      (       a  XtU'   M   XuU'   M&     UR                  5        VVs/ sH0  u  ph[        X�S   R	                  U[
        5      5      (       d  M.  UPM2     n	nn0 n
U	(       a  Ub  Ub  UR                  X9S9I Sh  v•N n
0 nUR                  5        H†  u  phXj;   aP  [        [        U5      nX¦   nUR                  UR	                  S[
        5      5      nUR                  US   5        UnO(UR                  US   R	                  U[
        5      5      nXûU'   Mˆ     Xµ4$ s  snnf  N©7f)zAAsync version of `channels_from_checkpoint`. See docstring there.r   Nru   rv   rJ   )r;   r<   r   rq   r>   r   Úaget_delta_channel_historyr
   r   rx   ry   rz   s                   r)   Úachannels_from_checkpointr†     s_  é € ð -/€MØ13€MØ—‘–‰ˆÜ�aœ×%Ñ%Ø ˜!Óà ˜!Óñ	 ð %×*Ñ*Ô,ô!á,‰GˆAÜ˜Ð*:Ñ;×?Ñ?ÀÄ7ÓK×L÷ 	
Ù,ð ñ !ð
 $&€IÞ˜%Ñ+°Ñ0BØ×:Ñ:Øð ;ð 
÷ 
ˆ	ð (*€HØ ×&Ñ&Ö(‰ˆà‹>Üœl¨DÓ1ˆJØ‘lˆGØ"×2Ñ2°7·;±;¸vÄwÓ3OÓPˆIØ×#Ñ# G¨HÑ$5Ô6Ø‰Bà×%Ñ% jÐ1AÑ&B×&FÑ&FÀqÌ'Ó&RÓSˆBØ�‹ñ )ð Ð"Ð"ùó/!ñ
ùs%   ‚AEÁ,EÂEÂ$EÂ,EÂ-B*Ec                ó  • [        U S   U S   U S   U S   R                  5       U S   R                  5       U S   R                  5        VVs0 sH  u  pXR                  5       _M     snnU R                  SS 5      S9$ s  snnf )	Nr   r   r   r   r    r!   rU   ri   )r   Úcopyr;   r>   )rj   rQ   r   s      r)   Úcopy_checkpointr‰   B  s‹   € ÜØ
�S‰/Ø�dÑØ�dÑØ!Ð"2Ñ3×8Ñ8Ó:Ø#Ð$6Ñ7×<Ñ<Ó>Ø/9¸/Ñ/J×/PÑ/PÔ/RÔSÑ/R¡t q�qŸ&™&›(’{Ñ/RÒSØ#Ÿ™Ð(:¸DÓAñð ùó Ts   ÁA>)Úreturnr   )r4   Úintr5   r#   rŠ   r#   )rA   úMapping[str, BaseChannel]rB   zMapping[str, tuple[int, int]]rŠ   úset[str])rK   zIterable[Any]rŠ   r�   )rA   rŒ   rŠ   r�   )rA   rŒ   rU   r�   rV   úMapping[str, Any] | NonerŠ   zdict[str, tuple[int, int]])rA   rŒ   rU   r�   r4   r‹   r`   zdict[str, Any]ra   rŽ   rb   ÚboolrŠ   ztuple[set[str], dict[str, Any]])rj   r   rA   z Mapping[str, BaseChannel] | Noner4   r‹   r   z
str | NonerU   úset[str] | Nonerg   zGetNextVersion | Nonerd   r�   rŠ   r   )ro   r   rp   ÚobjectrŠ   r�   )
r{   z,Mapping[str, BaseChannel | ManagedValueSpec]rj   r   rr   zBaseCheckpointSaver | Noners   zRunnableConfig | NonerŠ   z5tuple[Mapping[str, BaseChannel], ManagedValueMapping])rj   r   rŠ   r   )0Ú
__future__r   r1   Úcollections.abcr   r   r   r   r   Útypingr	   r
   Úlangchain_core.runnablesr   Úlanggraph.checkpoint.baser   r   Úlanggraph.checkpoint.base.idr   Ú langgraph.checkpoint.serde.typesr   Úlanggraph._internal._configr   Úlanggraph._internal._constantsr   Úlanggraph._internal._typingr   Úlanggraph.channels.baser   Úlanggraph.channels.deltar   Úlanggraph.managed.baser   r   r"   ÚGetNextVersionr*   r7   rH   rO   rR   r\   rf   rm   rq   rƒ   r†   r‰   r'   r(   r)   Ú<module>r       s  ðÝ "ã ß 7Ñ 7ß 'ß å 3÷õ /Ý ;å KÝ /Ý /Ý /Ý 1ß Hà€à˜3 ˜+ sÐ*Ñ+€ôôEðØ'ðà#@ðð ôð0JØðJàôJðØ'ðàôðØ'ðàðð ,ð	ð
  ôð2*Ø'ð*àð*ð ð	*ð
 ð*ð -ð*ð ð*ð %ô*ðJ Ø(,Ø.2Ø,0ñAØðAà.ðAð ðAð
 	ðAð &ðAð ,ðAð *ðAð õAôH	ð  )-Ø$(ñ0#Ø7ð0#àð0#ð &ð	0#ð
 "ð0#ð ;õ0#ðn )-Ø$(ñ'#Ø7ð'#àð'#ð &ð	'#ð
 "ð'#ð ;õ'#õT	r(   