
    (Ggr              
           d dl mZ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  G d de      Z G d d	ee   eeeeef   ee   f         Zy
)    )AnyGeneric
NamedTupleOptionalSequenceTypeUnion)Self)BaseChannelValue)MISSING)EmptyChannelErrorInvalidUpdateErrorc                       e Zd ZU ee   ed<   y)WaitForNamesnamesN)__name__
__module____qualname__setr   __annotations__     /home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langgraph/channels/dynamic_barrier_value.pyr   r   
   s    s8Or   r   c                   J    e Zd ZU dZdZeee      ed<   ee   ed<   de	e   ddf fdZ
d	edefd
Zede	e   fd       Zede	e   fd       ZdefdZdeeee      ee   f   fdZdeeee      ee   f   defdZdeeeef      defdZdefdZdefdZdefdZ xZS )DynamicBarrierValuea  A channel that switches between two states

    - in the "priming" state it can't be read from.
        - if it receives a WaitForNames update, it switches to the "waiting" state.
    - in the "waiting" state it collects named values until all are received.
        - once all named values are received, it can be read once, and it switches
          back to the "priming" state.
    r   seenr   r   typreturnNc                 P    t         |   |       d | _        t               | _        y N)super__init__r   r   r   )selfr   	__class__s     r   r$   zDynamicBarrierValue.__init__   s     
E	r   valuec                 X    t        |t              xr |j                  | j                  k(  S r"   )
isinstancer   r   )r%   r'   s     r   __eq__zDynamicBarrierValue.__eq__$   s"    %!45S%++:SSr   c                     | j                   S )z,The type of the value stored in the channel.r   r%   s    r   	ValueTypezDynamicBarrierValue.ValueType'        xxr   c                     | j                   S )z/The type of the update received by the channel.r,   r-   s    r   
UpdateTypezDynamicBarrierValue.UpdateType,   r/   r   c                     | j                  | j                        }| j                  |_        | j                  |_        | j                  j                         |_        |S )zReturn a copy of the channel.)r&   r   keyr   r   copy)r%   emptys     r   r4   zDynamicBarrierValue.copy1   sA    txx(HH	jjYY^^%
r   c                 2    | j                   | j                  fS r"   r   r-   s    r   
checkpointzDynamicBarrierValue.checkpoint9   s    

DII&&r   r7   c                     | j                  | j                        }| j                  |_        |t        ur|\  }}||nd |_        ||_        |S r"   )r&   r   r3   r   r   r   )r%   r7   r5   r   r   s        r   from_checkpointz#DynamicBarrierValue.from_checkpoint<   sL     txx(HH	W$$KE4#(#4%$EKEJr   valuesc                    |D cg c]  }t        |t              s| c}x}r<t        |      dkD  rt        d| j                   d      |d   j
                  | _        y| j
                  rd}|D ]i  }t        |t              rJ || j
                  v r-|| j                  vs2| j                  j                  |       d}Pt        d| d| j
                          |S y c c}w )	N   zAt key 'z;': Received multiple WaitForNames updates in the same step.r   TFzValue z not in )r)   r   lenr   r3   r   r   add)r%   r:   vwait_for_namesupdatedr'   s         r   updatezDynamicBarrierValue.updateG   s    )/OA:a3NaOO>O>"Q&(txxj(cd  (*00DJZZ#G S%e\:::DJJ&DII-		e,"&,veWHTZZL-QRRS N $ Ps
   CCc                 J    | j                   | j                  k7  r
t               y r"   )r   r   r   r-   s    r   getzDynamicBarrierValue.get[   s    99

"#%%r   c                 4    | j                   | j                  k(  S r"   )r   r   r-   s    r   is_availablez DynamicBarrierValue.is_available`   s    yyDJJ&&r   c                 d    | j                   | j                  k(  rt               | _         d | _        yy)NTF)r   r   r   r-   s    r   consumezDynamicBarrierValue.consumec   s(    99

"DIDJr   )r   r   r   __doc__	__slots__r   r   r   r   r   r$   objectboolr*   propertyr.   r1   r
   r4   tupler7   r9   r   r	   r   rB   rD   rF   rH   __classcell__)r&   s   @r   r   r      s4    "ICJ
e*DK D 
TF Tt T 4;   DK  d 'E(3u:"6E
"BC '	U 4c%j @A			XeE<,?&@A d (U 
'd ' r   r   N)typingr   r   r   r   r   r   r	   typing_extensionsr
   langgraph.channels.baser   r   langgraph.constantsr   langgraph.errorsr   r   r   r   r   r   r   r   <module>rU      sU    L L L " 6 ' B: ZENKuUL-@'A3u: MNZr   