
    g3fi                    
   U d dl m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mZmZ d dlmZ d dlmZmZmZ d dlmZ ddZdd	Zdd
Z e       Zded<   ddZ	 	 	 	 ddZddZ ej@                         Z!ded<   ddZ"y)    )annotationsN)	GeneratorSequence)	AnnotatedAnyOptionalUnion
get_originget_type_hints)	BaseModel)NotRequiredReadOnlyRequired)MISSINGc                   t        | t        j                        rt        d | j                  D              S 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.c              3  P   K   | ]  }|t        d       u xs t        |         y wNtype_is_optional_type.0args     Y/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langgraph/_internal/_fields.py	<genexpr>z$_is_optional_type.<locals>.<genexpr>   s,      
<?C4:7!23!77
   $&
__origin____args__Tc              3  P   K   | ]  }|t        d       u xs t        |         y wr   r   r   s     r   r   z$_is_optional_type.<locals>.<genexpr>   s,      @CtDz!;%6s%;;r   r   N	__bound__)
isinstancetypes	UnionTypeanyr   hasattrr
   r   r	   r   r   r    type_origins     r   r   r      s     %) 
CH>>
 
 	
 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.   ;   s8     F !233r)   zfrozenset[str]_DEFAULT_KEYSc                    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   )name)r   fr3   s     r   r   z$get_field_default.<locals>.<genexpr>j   s     E1affnQEs   )r+   r/   r,   dataclassesis_dataclassnextfieldsdefaultr   default_factoryr   )r3   r'   schemaoptional_keysirq
field_infos   `     r   get_field_defaultr?   O   s     F$7GM
E
"C} 
 'E**62Et

 ""+*=*==&&c1!)))++;3F3FF!1133
 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model_fieldsdescriptionr9   	__class____name__ PydanticUndefinedType__dict__)r   itemsr%   rA   rB   r9   r+   rC   AttributeErrorKeyError	TypeError)r   r3   typr9   rB   field	type_dicts          r   get_enhanced_type_hintsrO   }   s8     $D)//1 ".	c	t^,9J9J1J))$/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!c                l   t        | t              rM| j                  }t        |       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)
r!   r   model_fields_setr   rA   rH   r9   r+   r   get)inputkeyskeepkvdefaultsvalues          r   get_update_as_tuplesrZ      s    %#%%-1%[-E-E-K-K-MNTQAqyyLNN 	UAw//E?||Aw'3 Q$Y 
E
	 	 O	s   B+&AB1z5weakref.WeakKeyDictionary[type[Any], tuple[str, ...]]ANNOTATED_KEYS_CACHEc                   | t         v r	t         |    S t        | t              rg }t        | j                        D ]h  }|j
                  j                  d      }|t        |dd      }|t        |t        j                        rJ|j                  |j                                j t         j                  | t        |            S t        dt        |        d      )z0Return cached annotated keys for a Python class.__annotations__NzExpected a type, got z. )r[   r!   r   reversed__mro__rG   rR   r+   r"   GetSetDescriptorTypeextendrT   
setdefaulttuplerK   )objrT   baseanns       r   get_cached_annotated_keysrg      s    
""#C((#tS[[) 	$D--##$56C {d$5t<{je.H.HIKK
#	$ $..sE$K@@/S	{"=>>r)   )r'   r   returnbool)r'   r   rh   zbool | None)r3   strr'   r   r;   	type[Any]rh   r   )r   rk   rh   z7Generator[tuple[str, Any, Any, str | None], None, None])rS   r   rT   zSequence[str]rh   zlist[tuple[str, Any]])rd   rk   rh   ztuple[str, ...])#
__future__r   r5   r"   weakrefcollections.abcr   r   typingr   r   r   r	   r
   r   pydanticr   typing_extensionsr   r   r   langgraph._internal._typingr   r   r,   r.   	frozensetr/   r]   r?   rO   rZ   WeakKeyDictionaryr[   rg    r)   r   <module>rv      s    "    / N N  = = /2&" !*~ ++\&.
&.<&.R4 G K 
?r)   