
    A'h              
       >   U d dl Z 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mZmZ  e       ZdedefdZdedee   fd	Zdedefd
Z e       Zee   ed<   dededee   defdZdee   deeeeeee   f   ddf   fdZdedee   deeeef      fdZ y)    N)	GeneratorSequence)	AnnotatedAnyOptionalUnionget_type_hints)	BaseModel)NotRequiredReadOnlyRequired
get_origintype_returnc                 L   t        | d      rht        | d      r\t        |       }|t        u ry|t        u rt	        d | j
                  D              S |t        u rt        | j
                  d         S |du S t        | d      r!| j                  t        | j                        S | du S )zCheck if a type is Optional.
__origin____args__Tc              3   P   K   | ]  }|t        d       u xs t        |         y wN)type_is_optional_type).0args     ]/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/langgraph/utils/fields.py	<genexpr>z$_is_optional_type.<locals>.<genexpr>   s,      @CtDz!;%6s%;;s   $&r   N	__bound__)	hasattrr   r   r   anyr   r   r   r   r   origins     r   r   r      s     ul#z(BE"XU? GL~~   Y$U^^A%677~uk"u'B 11D=    c                     t        |       }|t        u ry|t        u ry|t        u st	        |dd      rt        | j                  d         S y)zCheck if an annotation is marked as Required/NotRequired.

    Returns:
        - True if required
        - False if not required
        - None if not annotated with either
    TFr   Nr   )r   r   r   r   getattr_is_required_typer   r   s     r   r$   r$       sN     Fgfj$? !233r!   c                 l    t        |       }|t        u rt        | j                  d         S |t        u ryy)zCheck if an annotation is marked as ReadOnly.

    Returns:
        - True if is read only
        - False if not read only
    r   TF)r   r   _is_readonly_typer   r   r   s     r   r&   r&   3   s8     F !233r!   _DEFAULT_KEYSnameschemac                     t        |dt              }t        |      } |v r|ryy||ryyt        j                  |      rt         fdt        j                  |      D        d      }|rb|j                  t        j                  ur|j                  dur|j                  S |j                  t        j                  ur|j                         S t        |      ryy)zDetermine the default value for a field in a state schema.

    This is based on:
        If TypedDict:
            - Required/NotRequired
            - total=False -> everything optional
        - Type annotation (Optional/Union[None])
    __optional_keys__.Nc              3   B   K   | ]  }|j                   k(  s|  y wr   )r(   )r   fr(   s     r   r   z$get_field_default.<locals>.<genexpr>b   s     E1affnQEs   )r#   r'   r$   dataclassesis_dataclassnextfieldsdefaultMISSINGdefault_factoryr   )r(   r   r)   optional_keysirq
field_infos   `     r   get_field_defaultr8   G   s     F$7GM
E
"C} 
 'E**62Et

 ""+*=*==&&c1!)))++;3F3FF!1133
 r!   r   c              #   F  K   t        |       j                         D ]  \  }}d}d}	 t        | d      r|| j                  v r| j                  |   }t        |d      r|j                  |j                  }t        |d      r@|j
                  4|j
                  }t        |d      rt        |j                  dd      dk(  rd}	 t        | d	      rt        | d	      }||v r||   }||||f  y# t        t        t        f$ r Y Cw xY w# t        t        t        f$ r Y ;w xY ww)
z^Attempt to extract default values and descriptions from provided type, used for config schema.N
__fields__descriptionr2   	__class____name__ PydanticUndefinedType__dict__)r	   itemsr   r:   r;   r2   r#   r<   AttributeErrorKeyError	TypeError)r   r(   typr2   r;   field	type_dicts          r   get_enhanced_type_hintsrH   u   s4     $D)//1 ".	c	t\*tt/F-5-0U5F5F5R"'"3"3K5),1J#mmG5#G$5$5z2F23 #'	tZ(#D*5	9$'oG C+--E".* )4 		 )4 		sG   $D!BC-!D"D!-DD!DD!DD!DD!inputkeysc                 Z   t        | t              rD| j                  }| j                  j	                         D ci c]  \  }}||j
                   }}}nd}i }|D cg c]=  }t        | |t              x}t        ur"||j                  |t              |||v r||f? c}S c c}}w c c}w )z;Get Pydantic state update as a list of (key, value) tuples.N)	
isinstancer
   model_fields_setmodel_fieldsrA   r2   r#   r3   get)rI   rJ   keepkvdefaultsvalues          r   get_update_as_tuplesrU      s    %#%%-2-?-?-E-E-GHTQAqyyLHH 	UAw//E?||Aw'3 Q$Y 
E
	 	 I	s   B"AB()!r.   collections.abcr   r   typingr   r   r   r   r	   pydanticr
   typing_extensionsr   r   r   r   objectr3   boolr   r$   r&   	frozensetr'   str__annotations__r   r8   tuplerH   listrU    r!   r   <module>rb      s     / B B  I I (S T &S Xd^ &S T " !*y~ ++C + +T#Y +3 +\&.
s)&.uS#sHSM12D$>?&.R 8C= T%S/=R r!   