
    (Gg                         U d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ  e j&                  e      Z ej,                         Zej,                  ee   eedf   f   ed<    G d d      Zy)	    N)isclass)AnyCallableOptionalTypeUnionget_args
get_originget_type_hints)	BaseModel)	AnnotatedSchemaCoercionMapper_cachec                        e Zd Z	 	 ddee   deeeef      dedd f fdZ		 	 ddee   deeeef      defdZ
ddedee   defd	Zddedee   defd
Z	 ddedededeeegef   fdZdededefdZ xZS )r   schema
type_hints	max_depthreturnc                     |t         vr	i t         |<   |t         |   v rt         |   |   S t        | 	  |       }|t         |   |<   |S N)r   super__new__)clsr   r   r   inst	__class__s        y/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langgraph/graph/schema_utils.pyr   zSchemaCoercionMapper.__new__   sR     F6Nv&&>),,ws#$(vy!    c           	         t        | d      ry d| _        || _        ||nt        ||j                  |i      | _        || _        t        |t              rp|j                  j                         D ci c],  \  }}|| j
                  j                  ||j                        . c}}| _        |j                  | _        d | _        y t        |t               rp|j"                  j                         D ci c],  \  }}|| j
                  j                  ||j                        . c}}| _        |j$                  | _        d | _        y t'        d      c c}}w c c}}w )N_initedT)localnsz1Schema is neither valid Pydantic v1 nor v2 model.)hasattrr   r   r   __name__r   r   
issubclassr   model_fieldsitemsget
annotation_fieldsmodel_construct
_constructBaseModelV1
__fields__	construct	TypeError_field_coercers)selfr   r   r   nfs         r   __init__zSchemaCoercionMapper.__init__+   sE    4# % &0IJ 	
 #fi( #//557Aq 4??&&q!,,77DL 392H2HDO PT , #--335Aq 4??&&q!,,77DL %..DO PT OPPs   21E21E
input_datadepthc                 &    | j                  ||      S r   )coerce)r0   r4   r5   s      r   __call__zSchemaCoercionMapper.__call__M   s    {{:u--r   c           
         || j                   }t        |t              r|dk  r|S i }| j                  F| j                  j                         D ci c]  \  }}|| j                  ||dz
         c}}| _        |j                         D ]3  \  }}| j                  j                  |      }|r |||dz
        n|||<   5  | j                  di |S c c}}w )Nr       )	r   
isinstancedictr/   r(   r%   _build_coercerr&   r*   )	r0   r4   r5   	processedr1   tkvfns	            r   r7   zSchemaCoercionMapper.coerceP   s    =NNE*d+uz	'AEASASAU$9=A4&&q%!)44$D  $$& 	9DAq%%))!,B/12a+qIaL	9 t+++$s    C
field_typethrowc                    |dk(  r| j                   S t        |      }|t        u r't        |      ^}}| j	                  ||dz
        fdS t        |      rQd}	 t        |t              }|rt        ||dz
        fdS |r%t        |t              rt        ||dz
        fdS |t        u s|t        u rNt        |      }	t        |	      dk7  rd	 S | j	                  |	d   |dz
        d
t        dt        dt        ffd}
|
S |t        u s|t        u rNt        |      }	t        |	      dk7  rd S | j	                  |	d   |dz
        d
t        dt        dt        ffd}|S |t        u s|t        u rt        |      }	t        |	      dk7  rd
t        dt        dt        ffd}|S | j	                  |	d   |dz
        | j	                  |	d   |dz
        d
t        dt        dt        ffd}|S |t         u rMt        |      }|sd S |D cg c]  }| j	                  ||dz
         c}d
t        dt        dt        ffd}|S |t"        u rt        |      }g dct%        |      D ]J  \  }}|t'        d       u rdj)                  | j	                  ||dz
  |t        |      dz
  k               L d
t        dt        dt        ffd}|S | j                   S # t        $ r d}d}Y w xY wc c}w )Nr   r:   c                      | |      S r   r;   )rB   dsubs     r   <lambda>z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>i   s    Aq	 r   TF)r   c                 L    t        | t              rj                  | |      S | S r   r<   r=   r7   rB   rH   mappers     r   rJ   z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>t        :a;NFMM!Q$7 TU r   c                 L    t        | t              rj                  | |      S | S r   rL   rM   s     r   rJ   z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>w   rO   r   c                     | S r   r;   rB   rH   s     r   rJ   z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>{       A r   rB   rH   r   c                 r    t        | t        t        f      s| S | D cg c]  } ||dz
         c}S c c}w Nr:   )r<   listtuplerB   rH   xrI   s      r   list_coercerz9SchemaCoercionMapper._build_coercer.<locals>.list_coercer~   s4    !!dE]3H/01!Aq1u111s   4c                     | S r   r;   rR   s     r   rJ   z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>   rS   r   c                 |    t        | t        t        t        f      s| S | D ch c]  } ||dz
         c}S c c}w rU   )r<   rV   rW   setrX   s      r   set_coercerz8SchemaCoercionMapper._build_coercer.<locals>.set_coercer   s7    !!dE3%78H/01!Aq1u111s   9   c                 Z    t        | t              srt        dt        |       z        | S )NExpected dict, got %s)r<   r=   r.   type)rB   rH   rE   s     r   dict_coercerz9SchemaCoercionMapper._build_coercer.<locals>.dict_coercer   s*    %a. "+,Cd1g,M"NNHr   c           
          t        | t              srt        dt        |       z        | S | j	                         D ci c]  \  }} ||dz
         ||dz
         c}}S c c}}w )Nra   r:   )r<   r=   r.   rb   r%   )rB   rH   rA   valk_subrE   v_subs       r   rc   z9SchemaCoercionMapper._build_coercer.<locals>.dict_coercer   sb    !!T*'(?$q'(IJJHIJSvq#aQsAE)::SSSs    !A%c                     | S r   r;   rR   s     r   rJ   z5SchemaCoercionMapper._build_coercer.<locals>.<lambda>   rS   r   c           	          t        | t        t        f      s| S g }t              D ]3  \  }}|j	                   ||t        |       k  r| |   nd |dz
               5 t        |      S rU   )r<   rV   rW   	enumerateappendlen)rB   rH   outispsubss        r   tuple_coercerz:SchemaCoercionMapper._build_coercer.<locals>.tuple_coercer   se    !!dE]3H&t_ HEArJJr!c!f*!A$$AFGHSz!r   )rE   c                 x    | ry d }D ]  }	  || |dz
        c S  |r|| S # t         $ r}|}Y d }~)d }~ww xY wrU   )r.   )rB   rH   errro   enone_in_unionrp   s        r   union_coercerz:SchemaCoercionMapper._build_coercer.<locals>.union_coercer   s\    9  B !!QU|+ 
 I	 %   s   $	949)_passthroughr
   r   r	   r>   r   r#   r   r.   r   r+   rV   rl   r   r]   r=   rW   r   rj   rb   rk   )r0   rD   r5   rE   origin	real_type_	is_class_is_base_modelargsrZ   r^   rc   targsarq   uargsixargrv   rf   rN   ru   rI   rp   rg   s      `                @@@@@@r   r>   z#SchemaCoercionMapper._build_coercer_   s>    A:$$$J'Y$Z0MI%%i;C)):I& *:y A
 -jEAINUUZ
K@-jEAINUUT>Z4/J'D4yA~%%%%d1guqy9C2 2 2 2
  S=J#-J'D4yA~%%%%d1guqy9C2s 2s 2s 2
 T>Z4/J'D4yA~C C C  $#''Q;E''Q;ET T T T  U?Z(E%%?DE!D''5195ED" " " " ! U?Z(E"$eD-$U+ C$t*$$(MKK++C"s5zTU~BU+V	    !    C  &!	 %&z Fs   !K& K:&K76K7rB   rH   c                     |S r   r;   )r0   rB   rH   s      r   rw   z!SchemaCoercionMapper._passthrough   s    r   )N   r   )F)r"   
__module____qualname__r   r   r   r=   strintr   r3   r8   r7   boolr   r>   rw   __classcell__)r   s   @r   r   r      s    04	S	 T#s(^, 	
 
 $ 04	 TS	 T T#s(^, T 	 TD.3 .x} . ., ,Xc] ,c ,  :?p!p!&)p!26p!	3*c/	"p!dc c c r   )loggingweakrefinspectr   typingr   r   r   r   r   r	   r
   r   pydanticr   pydantic.v1r+   typing_extensionsr   	getLoggerr"   loggerWeakKeyDictionaryr   r=   r   __annotations__r   r;   r   r   <module>r      s      	 	 	  0 '			8	$ G !!$s)T#7M2M-N"NO 
w wr   