
    }
i                       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"dS )*    )annotationsN)	GeneratorSequence)	AnnotatedAnyOptionalUnion
get_originget_type_hints)	BaseModel)NotRequiredReadOnlyRequired)MISSINGtype_r   returnboolc                   t          | t          j                  rt          d | j        D                       S t          | d          rxt          | d          rht          |           }|t          u rdS |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  V   K   | ]$}|t          d           u pt          |          V  %d S Ntype_is_optional_type.0args     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/_internal/_fields.py	<genexpr>z$_is_optional_type.<locals>.<genexpr>   sL       
 
<?C4::7!23!7!7
 
 
 
 
 
    
__origin____args__Tc              3  V   K   | ]$}|t          d           u pt          |          V  %d S r   r   r   s     r   r   z$_is_optional_type.<locals>.<genexpr>   sL        @CtDzz!;%6s%;%;     r   r   N	__bound__)
isinstancetypes	UnionTypeanyr!   hasattrr
   r   r	   r   r   r#   r   origins     r   r   r      s"    %)) 
 
 
CH>
 
 
 
 
 	
 ul## 
z(B(B 
E""X4U??  GL~      Y$U^A%6777~uk"" 2u'B 111D=r   bool | Nonec                    t          |           }|t          u rdS |t          u rdS |t          u st	          |dd          rt          | j        d                   S dS )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.   (   sg     Ftugfj$?? !23334r   c                    t          |           }|t          u rt          | j        d                   S |t          u rdS dS )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   r0   r0   ;   sF     F !2333t5r   zfrozenset[str]_DEFAULT_KEYSnamestrschema	type[Any]c                    t          |dt                    }t          |          } |v r|rdS dS ||rdS dS t          j        |          rzt           fdt          j        |          D             d          }|rJ|j        t          j        ur|j        dur|j        S |j	        t          j        ur|	                                S t          |          rdS dS )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  2   K   | ]}|j         k    |V  d S r   )r2   )r   fr2   s     r   r   z$get_field_default.<locals>.<genexpr>j   s)      EE1afnnQnnnnEEr   )r-   r1   r.   dataclassesis_dataclassnextfieldsdefaultr   default_factoryr   )r2   r   r4   optional_keysirq
field_infos   `     r   get_field_defaultrC   O   s    F$7GGM
E
"
"C}  	3t
 	 3t'' 4EEEE*622EEEt
 

  	4"+*===&c11!))+;3FFF!11333
  t3r   r   7Generator[tuple[str, Any, Any, str | None], None, None]c              #  d  K   t          |                                           D ]
\  }}d}d}	 t          | d          r~|| j        v ru| j        |         }t          |d          r|j        |j        }t          |d          r:|j        3|j        }t          |d          rt          |j        dd          dk    rd}n# t          t          t          f$ r Y nw xY w	 t          | d	          rt          | d	          }||v r||         }n# t          t          t          f$ r Y nw xY w||||fV  dS )
z^Attempt to extract default values and descriptions from provided type, used for config schema.Nmodel_fieldsdescriptionr>   	__class____name__ PydanticUndefinedType__dict__)r   itemsr(   rF   rG   r>   r-   rH   AttributeErrorKeyError	TypeError)r   r2   typr>   rG   field	type_dicts          r   get_enhanced_type_hintsrT   }   s      $D))//11 ". ".	c	t^,, '9J1J1J)$/5-00 4U5F5R"'"3K5),, '1J#mG55'#G$5z2FF23 3 #')4 	 	 	D		tZ(( .#D*55	9$$'oG)4 	 	 	D	 C+-----E". ".s$   BB>>CC,D		D#"D#inputkeysSequence[str]list[tuple[str, Any]]c                     t           t                    r8 j        d t                     j                                        D             ndi  fd|D             S )z;Get Pydantic state update as a list of (key, value) tuples.c                $    i | ]\  }}||j         S  )r>   )r   kvs      r   
<dictcomp>z(get_update_as_tuples.<locals>.<dictcomp>   s     NNNTQAqyNNNr   Nc                    g | ]H}t          |t                    xt          ur'!                    |t                    @|v D|fIS r   )r-   r   get)r   r\   defaultsrU   keepvalues     r   
<listcomp>z(get_update_as_tuples.<locals>.<listcomp>   sk     	 	 	UAw///E??||Aw''3 Q$YY 
E
 &/YYr   )r$   r   model_fields_setr   rF   rM   )rU   rV   ra   rb   rc   s   ` @@@r   get_update_as_tuplesrf      s    %## %NNT%[[-E-K-K-M-MNNN	 	 	 	 	 	 		 	 	 	r   z5weakref.WeakKeyDictionary[type[Any], tuple[str, ...]]ANNOTATED_KEYS_CACHEobjtuple[str, ...]c                   | t           v rt           |          S t          | t                    rg }t          | j                  D ]s}|j                            d          }|t          |dd          }|t          |t          j	                  rL|
                    |                                           tt                               | t          |                    S t          dt          |            d          )z0Return cached annotated keys for a Python class.__annotations__NzExpected a type, got z. )rg   r$   r   reversed__mro__rL   r`   r-   r%   GetSetDescriptorTypeextendrV   
setdefaulttuplerP   )rh   rV   baseanns       r   get_cached_annotated_keysrt      s    
"""#C((#t ?S[)) 	$ 	$D-##$566C {d$5t<<{je.HII{KK

#####..sE$KK@@@=S		===>>>r   )r   r   r   r   )r   r   r   r+   )r2   r3   r   r   r4   r5   r   r   )r   r5   r   rD   )rU   r   rV   rW   r   rX   )rh   r5   r   ri   )#
__future__r   r:   r%   weakrefcollections.abcr   r   typingr   r   r   r	   r
   r   pydanticr   typing_extensionsr   r   r   langgraph._internal._typingr   r   r.   r0   	frozensetr1   rk   rC   rT   rf   WeakKeyDictionaryrg   rt   r[   r   r   <module>r~      s   " " " " " " "       / / / / / / / / N N N N N N N N N N N N N N N N       = = = = = = = = = = / / / / / /   2   &   " !*	 + + + ++ + + +\&. &. &. &.R   4 G     
? ? ? ? ? ?r   