
    A'h              
           d dl mZ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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 G d dee   eeeeef   ee   f         Zy)    )SequenceSet)AnyGeneric
NamedTupleOptionalUnion)Self)BaseChannelValue)MISSING)EmptyChannelErrorInvalidUpdateErrorc                       e Zd ZU ee   ed<   y)WaitForNamesnamesN)__name__
__module____qualname__r   r   __annotations__     o/home/kushmeetdev/Regenta/Chatbot/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   setr   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/   r0   s    r   
UpdateTypezDynamicBarrierValue.UpdateType-   r2   r   c                     | j                  | j                        }| j                  |_        | j                  |_        | j                  j                         |_        |S zReturn a copy of the channel.)r'   r   keyr   r   copyr&   emptys     r   r9   zDynamicBarrierValue.copy2   sA    txx(HH	jjYY^^%
r   c                 2    | j                   | j                  fS r!   r   r0   s    r   
checkpointzDynamicBarrierValue.checkpoint:   s    

DII&&r   r=   c                     | j                  | j                        }| j                  |_        |t        ur|\  }}||nd |_        ||_        |S r!   )r'   r   r8   r   r   r   )r&   r=   r;   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
                  Xd}|D ]O  }t        |t              rJ || j
                  v s$|| j                  vs3| j                  j                  |       d}Q |S y c c}w N   zAt key 'z;': Received multiple WaitForNames updates in the same step.r   TFr*   r   lenr   r8   r   r   addr&   r@   vwait_for_namesupdatedr(   s         r   updatezDynamicBarrierValue.updateH       )/OA:a3NaOO>O>"Q&(txxj(cd  (*00DJZZ#G #%e\:::DJJ&5		+AIIMM%("G	#
 N $ P
   CCc                 J    | j                   | j                  k7  r
t               y r!   )r   r   r   r0   s    r   getzDynamicBarrierValue.getY   s    99

"#%%r   c                 4    | j                   | j                  k(  S r!   )r   r   r0   s    r   is_availablez DynamicBarrierValue.is_available^   s    yyDJJ&&r   c                 d    | j                   | j                  k(  rt               | _         d | _        yyNTF)r   r   r$   r0   s    r   consumezDynamicBarrierValue.consumea   s(    99

"DIDJr   )r   r   r   __doc__	__slots__r   r   r   r   r$   typer#   objectboolr,   propertyr1   r5   r
   r9   tupler=   r?   r   r	   r   rK   rO   rQ   rT   __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   c                   d    e Zd ZU dZdZeee      ed<   e	e   ed<   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   e
f   fdZde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de
fdZ xZS )DynamicBarrierValueAfterFinisha  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, and the finished flag is set, it can be read once, and it switches
          back to the "priming" state.
    r   r   finishedr   r   ra   r   r   Nc                 ^    t         |   |       d | _        t               | _        d| _        y )NF)r"   r#   r   r$   r   ra   r%   s     r   r#   z'DynamicBarrierValueAfterFinish.__init__{   s'    
E	r   r(   c                 X    t        |t              xr |j                  | j                  k(  S r!   )r*   r_   r   r+   s     r   r,   z%DynamicBarrierValueAfterFinish.__eq__   s'    u<= *tzz)	
r   c                     | j                   S r.   r/   r0   s    r   r1   z(DynamicBarrierValueAfterFinish.ValueType   r2   r   c                     | j                   S r4   r/   r0   s    r   r5   z)DynamicBarrierValueAfterFinish.UpdateType   r2   r   c                     | j                  | j                        }| j                  |_        | j                  |_        | j                  j                         |_        | j                  |_        |S r7   )r'   r   r8   r   r   r9   ra   r:   s     r   r9   z#DynamicBarrierValueAfterFinish.copy   sL    txx(HH	jjYY^^%
r   c                 H    | j                   | j                  | j                  fS r!   r`   r0   s    r   r=   z)DynamicBarrierValueAfterFinish.checkpoint   s    

DIIt}}55r   r=   c                     | j                  | j                        }| j                  |_        |t        ur|\  }}}||nd |_        ||_        ||_        |S r!   )r'   r   r8   r   r   r   ra   )r&   r=   r;   r   r   ra   s         r   r?   z.DynamicBarrierValueAfterFinish.from_checkpoint   sV     txx(HH	W$$.!E4#(#4%$EKEJ%ENr   r@   c                    |D cg c]  }t        |t              s| c}x}r<t        |      dkD  rt        d| j                   d      |d   j
                  | _        y| j
                  Xd}|D ]O  }t        |t              rJ || j
                  v s$|| j                  vs3| j                  j                  |       d}Q |S y c c}w rB   rD   rG   s         r   rK   z%DynamicBarrierValueAfterFinish.update   rL   rM   c                 b    | j                   s#| j                  | j                  k7  r
t               y r!   )ra   r   r   r   r0   s    r   rO   z"DynamicBarrierValueAfterFinish.get   s$    }}djj!8#%%r   c                 P    | j                   | j                  k(  xr | j                  S r!   )r   r   ra   r0   s    r   rQ   z+DynamicBarrierValueAfterFinish.is_available   s    yyDJJ&84==8r   c                 |    | j                   r0| j                  | j                  k(  rt               | _        d | _        yyrS   )ra   r   r   r$   r0   s    r   rT   z&DynamicBarrierValueAfterFinish.consume   s.    ==TYY$**4DIDJr   c                 ^    | j                   s!| j                  | j                  k(  rd| _         yyrS   )ra   r   r   r0   s    r   finishz%DynamicBarrierValueAfterFinish.finish   s%    }}djj!8 DMr   ) r   r   r   rU   rV   r   r   r   r   r$   rY   rW   r#   rX   r,   rZ   r1   r5   r
   r9   r[   r=   r?   r   r	   r   rK   rO   rQ   rT   rn   r\   r]   s   @r   r_   r_   i   sF    .ICJ
e*NDK D 
F 
t 
 4;   DK  d 6E(3u:"6E
D"HI 6
U 4c%j$ FG
	
XeE<,?&@A d "U 
9d 9  r   r_   N)collections.abcr   r   typingr   r   r   r   r	   typing_extensionsr
   langgraph.channels.baser   r   langgraph.constantsr   langgraph.errorsr   r   r   r   r_   r   r   r   <module>ru      s    ) < < " 6 ' B: WENKuUL-@'A3u: MNWteENKuUL-@'A3u: MNer   