
    Ki                    r   d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZm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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* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJ ddlKmLZLmMZM er!ddlNmOZP ddlNmQZQmRZR ddlNmSZT ddlUmVZV ddl2mWZW n eX       ZP eX       ZTeXj                  ZZ G d  d!e[      Z\d"d#	 	 	 d:d$Z] ed%      Z^ ed&ePeTe]f'       G d( d)e
             Z_d;d*Z`d<d+Za	 	 	 	 	 	 	 	 	 	 	 	 d=d,Zbd>d-Zcd?d.Zd	 	 	 	 	 	 	 	 d@d/Zed&d&dd"d0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAd1ZfdBd2Zg G d3 d4      Zh G d5 d6      ZidCd7ZjdCd8ZkedDd9       Zly)Ez"Private logic for creating models.    )annotationsN)ABCMeta)cachepartialwraps)FunctionType)TYPE_CHECKINGAnyCallableGenericLiteralNoReturnTypeVarcast)PydanticUndefinedSchemaSerializer)TypeAliasTypedataclass_transform
deprecatedget_args
get_origin)typing_objects   )PydanticUndefinedAnnotationPydanticUserError)create_schema_validator)GenericBeforeBaseModelWarningPydanticDeprecatedSince20   )ConfigWrapper)DecoratorInfosPydanticDescriptorProxyget_attribute_from_basesunwrap_wrapped_function)collect_model_fieldsis_valid_field_nameis_valid_privateattr_namerebuild_model_fields)GenerateSchemaInvalidSchemaError)PydanticGenericMetadataget_model_typevars_map)import_cached_base_modelimport_cached_field_info)set_model_mocks)
NsResolver)generate_pydantic_signature)_make_forward_refeval_type_backportis_classvar_annotationparent_frame_namespace)LazyClassAttributeSafeGetItemProxy)Field)	FieldInfoModelPrivateAttr)PrivateAttr)	BaseModel)PydanticExtraInfoc                  $     e Zd ZdZd fdZ xZS )_ModelNamespaceDictz{A dictionary subclass that intercepts attribute setting on model classes and
    warns about overriding of decorators.
    c                    | j                  |d       }|rF||urBt        |t              r2t        j                  d| d|j
                  j                   dd       t        | !  ||      S )N`z"` overrides an existing Pydantic `z` decoratorr   
stacklevel)	get
isinstancer"   warningswarndecorator_infodecorator_reprsuper__setitem__)selfkvexisting	__class__s       r/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/pydantic/_internal/_model_construction.pyrK   z_ModelNamespaceDict.__setitem__9   sk    D))jCZ.[MMA389P9P9_9_8``kl
 w"1a((    )rM   strrN   objectreturnNone)__name__
__module____qualname____doc__rK   __classcell__rP   s   @rQ   r?   r?   4   s    ) )rR   r?   Finitc                     y)zOnly for typing purposes. Used as default value of `__pydantic_fields_set__`,
    `__pydantic_extra__`, `__pydantic_private__`, so they could be ignored when
    synthesizing the `__init__` signature.
    N r]   s    rQ   NoInitFieldra   D       rR   _TT)kw_only_defaultfield_specifiersc                       e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZesddZedd       Zd fdZe	j                  Z
e	j                  Zedd       Ze edd      dd	              Zedd
       Zd fdZ xZS )ModelMetaclassNc           	     	  %&' |rt         j                  dk\  r6d|v r|d   }n>ddlm}	m}
m}  ||      x}r |
||	j                        }ni }n|j                  di       }| j                  |      \  }}}t        j                  ||||      }|j                  |d<   t        |||j                  ||      }|s|r1t        ||      %%t        %      d.%fd       }||d	<   n	t         |d	<   ||d
<   i |||d<   t#        dt%        (| L  | |||fi |      }t)               }|j*                  }t,        |v rG|j/                  t,              |j/                  |      k  r t1        j2                  t5        d      d       t7        |j8                  dd       |_        |j<                  |j<                  u rdnd	|_        i |_         tC        jD                  |d      |_#        |jF                  jI                  |       |r	||_%        n[t7        |di       j                  dd      't7        |dd      xs '&&r'rtM        &fd'D              sddl'm(} tS        'fd&D              }|'v rZ|&vrVdjU                  |D cg c]  }|jV                   c}      }|jV                   d| d|jV                   d| d}t[        |      '|z   }djU                  |D cg c]  }tY        |       c}      }d | d!}d"| d#}t,        |vrCdjU                  |D cg c]  }|jV                   c}|gz         }|d$|jV                   d%| d&z  }t[        |      dd&d'|_%        d|_.        |j_                         D ]  \  }}|ja                  ||        |rtc        te                     |_3        t7        |d(d      } ti        | tj              rtm        |       } to        | )      }!tq        |||!*       |jF                  jr                  j_                         D "#ci c]  \  }"}#|"|#jt                   c}#}"|_;        |jx                  rt{        |       nt}        |||!d|+       |j~                  rd,|vrt        ||       t%        ||  di | |S d-D ]  }$|j                  |$d        |j                  di       j                          t%        (| L  | |||fi |S c c}w c c}w c c}w c c}#}"w )/a  Metaclass for creating Pydantic models.

        Args:
            cls_name: The name of the class to be created.
            bases: The base classes of the class to be created.
            namespace: The attribute dictionary of the class to be created.
            __pydantic_generic_metadata__: Metadata for generic models.
            __pydantic_reset_parent_namespace__: Reset parent namespace.
            _create_model_module: The module of the class to be created, if created by `create_model`.
            **kwargs: Catch-all for any other keyword arguments.

        Returns:
            The new class created by the metaclass.
        )      __annotations__r   )Formatcall_annotate_function!get_annotate_from_class_namespace)formatmodel_configNc               0    t        | |        | |       y)zWe need to both initialize private attributes and call the user-defined model_post_init
                        method.
                        N)init_private_attributes)rL   contextoriginal_model_post_inits     rQ   wrapped_model_post_initz7ModelMetaclass.__new__.<locals>.wrapped_model_post_init   s    
 0g>0w?rR   model_post_init__class_vars____private_attributes__type[BaseModel]zClasses should inherit from `BaseModel` before generic classes (e.g. `typing.Generic[T]`) for pydantic generics to work properly.r   rB   __pydantic_base_init__FT)replace_wrapped_methods__pydantic_generic_metadata__
parametersr`   __parameters__c              3  &   K   | ]  }|v  
 y wNr`   ).0xr}   s     rQ   	<genexpr>z)ModelMetaclass.__new__.<locals>.<genexpr>   s     ?kTUZ?ks   )RootModelRootTypec              3  ,   K   | ]  }|vs|  y wr   r`   )r   r   parent_parameterss     rQ   r   z)ModelMetaclass.__new__.<locals>.<genexpr>   s     .cQQbHbq.cs   	z, zS is a subclass of `RootModel`, but does not include the generic type identifier(s) zL in its parameters. You should parametrize RootModel directly, e.g., `class z(RootModel[z	]): ...`.ztyping.Generic[]zJAll parameters must be present on typing.Generic; you should inherit from .z- Note: `typing.Generic` must go last: `class (z): ...`))originargsr}   __pydantic_parent_namespace__)parent_namespace)config_wrapperns_resolver)raise_errorscreate_model_module__hash__)__pydantic_fields_set____pydantic_extra____pydantic_private__rL   r<   rs   r
   rU   rV   )Dsysversion_infoannotationlibrl   rm   rn   
FORWARDREFrD   _collect_bases_datar    	for_modelconfig_dictinspect_namespaceignored_typesget_model_post_initr   rr   r   rJ   __new__r-   __mro__r   indexrF   rG   r   getattr__init____pydantic_custom_init__rv   __pydantic_post_init____pydantic_setattr_handlers__r!   build__pydantic_decorators__update_from_configr|   all
root_modelr   tuplejoinrW   rS   	TypeError__pydantic_complete__items__set_name__build_lenient_weakvaluedictr5   r   rE   dictunpack_lenient_weakvaluedictr0   set_model_fieldscomputed_fieldsinfo__pydantic_computed_fields__defer_buildr/   complete_model_classfrozenset_default_hash_func__pydantic_init_subclass__popclear))mcscls_namebases	namespacer|   #__pydantic_reset_parent_namespace___create_model_modulekwargsraw_annotationsrl   rm   rn   annotatebase_field_names
class_varsbase_private_attributesr   private_attributesru   cls
BaseModel_mror   missing_parametersr   parameters_strerror_messagecombined_parametersgeneric_type_label	bases_strnameobjr   r   rM   rN   instance_slotrt   r}   r   rP   s)                                        @@@rQ   r   zModelMetaclass.__new__T   sp   6 7*%2&/0A&BO po#DY#OOxO*@RXRcRc*d*,"+--0A2"FDGD[D[\aDbAj*A*44UIX^_N(6(B(BIn%!2?N,H,H*Vf" "%<+>y%+P(+7 34@ 5@ 4KI/03JI/0*4I&'2c5L2cPb2cI./(%'/#xPY*d]c*deC13J++C#~#))G"4syy7L"L1B  ! 07s||E]_d/e+eC(++z/I/IIO` & 13C-*8*>*>s\`*aC'''::>J -4Q1$+C1PRT$U$Y$YZfhj$k!$S*:DAVEV
"3C?kYj?k<k>)..c*.c)c&(,==BS[eBe *.HZ3[1AJJ3[)\"||n,-. /WWZWcWcVddop~o  @IJ &, $M22! /@BT.T+)-DW3XqCF3X)Y/>~>Na-P*88J7K1N & #%/
 )-		u2M!1::2MQcPd2d(eI)"OPSP\P\~]^_h^iiq rM $M22 #",51 ).C% 0557 ,	c  d+, 34OPfPh4i16=cCbdh6i*D1#?@P#Q $6FGKS[Y
 '*&A&A&Q&Q&W&W&Y0"a166	0C, ))$ %"!&(< $$9)D%c51
 #s6@@J "i !
 MM+R06687?3%MfMMg 4\ 4Y 3N>0s   >SSSS$c                d    | j                   j                  d      }|r	||v r||   S t        |      )zNThis is necessary to keep attribute access working for class attribute access.rx   )__dict__rD   AttributeError)rL   itemr   s      rQ   __getattr__zModelMetaclass.__getattr__  s9    !%!2!23K!L!d.@&@)$// &&rR   c                    t               S r   )r?   )r   r   r   s      rQ   __prepare__zModelMetaclass.__prepare__$  s    "$$rR   c                l    t        j                  d| j                   dd       t        |   |      S )Nz>For performance reasons, virtual subclasses registered using 'zK.register()' are not supported in 'isinstance()' and 'issubclass()' checks.r   rB   )rF   rG   rY   rJ   register)rL   subclassrP   s     rQ   r   zModelMetaclass.register,  s?    LTM^M^L_ `M M	

 w))rR   c                >   t               }t               }t               }i }| D ]t  }t        ||      s||us|j                  t	        |di       j                                |j                  |j                         |j                  |j                         v |||fS )N__pydantic_fields__)r-   set
issubclassupdater   keysrw   rx   )r   r<   field_namesr   r   bases         rQ   r   z"ModelMetaclass._collect_bases_data7  s    ,.	 #"u
:< 	GD$	*t9/D""741F#K#P#P#RS!!$"5"56"))$*E*EF	G J(:::rR   XThe `__fields__` attribute is deprecated, use the `model_fields` class property instead.)categoryc                T    t        j                  dt        d       t        | di       S )Nr   r   rB   r   )rF   rG   r   r   rL   s    rQ   
__fields__zModelMetaclass.__fields__F  s+    
 	f%	

 t2B77rR   c                    d| j                   vryt        d| j                        }t        d| j                        }||j                  }nd}t        d |j                         D              xr |S )zWhether the fields were successfully collected (i.e. type hints were successfully resolved).

        This is a private attribute, not meant to be used outside Pydantic.
        r   Fdict[str, FieldInfo]zPydanticExtraInfo | NoneTc              3  4   K   | ]  }|j                     y wr   )	_complete)r   
field_infos     rQ   r   z>ModelMetaclass.__pydantic_fields_complete__.<locals>.<genexpr>c  s     OJ:''Os   )r   r   r   __pydantic_extra_info__completer   values)rL   field_infospydantic_extra_infoextra_completes       rQ   __pydantic_fields_complete__z+ModelMetaclass.__pydantic_fields_complete__R  sp     !5143K3KL"#=t?[?[\*099N!NO+:L:L:NOObTbbrR   c                `    t        t        | 	               }d|v r|j                  d       |S )Nr   )listrJ   __dir__remove)rL   
attributesrP   s     rQ   r   zModelMetaclass.__dir__e  s0    %'/+,
:%l+rR   )NTN)r   rS   r   tuple[type[Any], ...]r   dict[str, Any]r|   zPydanticGenericMetadata | Noner   boolr   
str | Noner   r
   rU   type)r   rS   rU   r
   )r   r
   r   r
   rU   zdict[str, object])r   type[_T]rU   r  )r   r  rU   z6tuple[set[str], set[str], dict[str, ModelPrivateAttr]])rU   r   )rU   r  )rU   z	list[str])rW   rX   rY   r   r	   r   classmethodr   r   r  __instancecheck____subclasscheck__staticmethodr   propertyr   r   r   r   r[   r\   s   @rQ   rg   rg   R   s    IM48+/DNDN %DN "	DN
 (FDN .2DN )DN DN 
DNL 	' % %* ....; ; bmq8 8 c c$ rR   rg   c                  t        | dd      i }| j                  j                         D ]S  \  }}|j                  r"|j	                  di | j
                  |      }n|j	                  d      }|t        usO|||<   U t        | d|       yy)a  This function is meant to behave like a BaseModel method to initialize private attributes.

    It takes context as an argument since that's what pydantic-core passes when calling it.

    Args:
        self: The BaseModel instance.
        context: The context.
    r   NT)call_default_factoryvalidated_data)r  )r   rx   r   $default_factory_takes_validated_dataget_defaultr   r   object_setattr)rL   rs   pydantic_privater   private_attrdefaults         rQ   rr   rr   l  s     t+T2:"&"="="C"C"E 		1D,@@&22)->c>cRb>c 3  '222M//)0 &		1 	t35EF ;rR   c                b    d| v r| d   S t               }t        |d      }||j                  ur|S y)zaGet the `model_post_init` method from the namespace or the class bases, or `None` if not defined.rv   N)r-   r#   rv   )r   r   r<   rv   s       rQ   r   r     sD    I%*++(*I.u6GHOi777 8rR   c           
     ^   ddl mm} t               }|t	               z   }i }d|v sd| v rt        d      t               }	t        | j                               D ]  \  }
}|
dk(  s|
dk(  rt        |t              r8|j                  | d   k(  r&d| v r"|j                  j                  | d    d	      rZt        ||      s|j                  j                  d
k(  r|	j                  |
       t        |      rI|
j                  d      rt!        d|
d	      t#        |
      rt!        dd|
z   d|
d	      |||
<   | |
= t        ||      r2t#        |
      s'|
j%                  d      xs d}t!        d|d|
d	      |
j                  d      r7t'        |
      r/|
|vst)        ||
         rVt+         ||            ||
<   | |
= q|
|v rw|
|vs}|
|v rt-        d|
dd      t        ||      rt-        d|
dd      t-        d|
 d|d|
 dd       |j                         D ]  \  }}t'        |      s||vs||	vst)        |      r(||vs-t/        |dd      d
k7  s>t        |t0              rFt3        j4                  d      }|/	 t7        t9        |dd       |j:                  |j<                  !      }t?        j@                  tC        |            r*tE        |      ^}}tG        fd"|D        d      }||||<    |       ||<    |S # t         t
        f$ r Y gw xY w)#aL  Iterate over the namespace and:
    * gather private attributes
    * check for items which look like fields but are not (e.g. have no annotation) and warn.

    Args:
        namespace: The attribute dictionary of the class to be created.
        raw_annotations: The (non-evaluated) annotations of the model.
        ignored_types: A tuple of ignore types.
        base_class_vars: A set of base class class variables.
        base_class_fields: A set of base class fields.

    Returns:
        A dict containing private attributes info.

    Raises:
        TypeError: If there is a `__root__` field in model.
        NameError: If private attribute name is invalid.
        PydanticUserError:
            - If a field does not have a type annotation.
            - If a field on base class was overridden by a non-annotated attribute.
    r   )r:   r;   __root__zUTo define root models, use `pydantic.RootModel` rather than a field called '__root__'rp   r   rX   rY   r   	functools__zXPrivate attributes must not use dunder names; use a single underscore prefix instead of zJPrivate attributes must not use valid field names; use sunder names, e.g. _z instead of my_fieldz>Fields must not use names with leading underscores; e.g., use )r  zField z defined on a base class was overridden by a non-annotated attribute. All field definitions, including overrides, require a type annotation.zmodel-field-overridden)codez requires a type annotationzmodel-field-missing-annotationz)A non-annotated attribute was detected: `z = z3`. All model fields require a type annotation; if `z` is not meant to be a field, you may be able to resolve this error by annotating it as a `ClassVar` or updating `model_config['ignored_types']`.NFT)is_argumentis_class)globalnslocalnsc              3  <   K   | ]  }t        |      s|  y wr   )rE   )r   rN   r:   s     rQ   r   z$inspect_namespace.<locals>.<genexpr>  s     $\1JqJZ<[Q$\s   )$fieldsr:   r;   r.   default_ignored_typesr   r   r   r   rE   r  rX   rY   
startswithrP   add	NameErrorr&   lstripr'   r4   r   r   r   rS   r   	_getframer3   r2   	f_globalsf_localsr   is_annotatedr   r   next)r   r   r   base_class_varsbase_class_fieldsr;   r9   all_ignored_typesr   ignored_namesvar_namevaluesuggested_nameann_nameann_typeframer  metadatar  r:   s                      @rQ   r   r     s   8 7(*I%(=(??68_$
i(?opp!eM	 12 ;%~%5I)Iud#  Il$;;)+""-->1J0K1.MN 01U__5O5OS^5^h'/0""4(BBJQP  %X.//2X~.@XLXY[  ,1x((#y)2Eh2O%__S1?ZN,/|H<qJ 
   &&x0.6L_]eMf6g/34DkZ_F`/a"8,h'(_,,,'XL )] ^1 
 E9-'XL(CDKk  (?zUI V,,4: 6jk :	 m;z .335 9(%h/ 22- +84 11,5D(C( a($#5-hETXY%*__$)NN$ **:h+?@'1H#$\$\^bc+3?&x0+6=x(?9B  &y1 s   .LL,+L,c                    t        |d      }t        |       }|d t        j                  hv st	        |dd       |j
                  k(  r|| _        y y )Nr   __code__)r#   make_hash_funcrT   r   r   r;  )r   r   base_hash_funcnew_hash_funcs       rQ   r   r     sP    -eZ@N"3'M$00GNJX\4]anawaw4w % 5xrR   c                    | j                   r*t        j                  | j                   j                          nd dfd}|S )Nc                     y)Nr   r`   )r  s    rQ   <lambda>z make_hash_func.<locals>.<lambda>'  rb   rR   c                    	 t         | j                              S # t        $ r' t         t        | j                                    cY S w xY wr   )hashr   KeyErrorr7   )rL   getters    rQ   	hash_funcz!make_hash_func.<locals>.hash_func)  sJ    	At}}-.. 	A
 />?@@	As    -AA)rL   r
   rU   int)r   operator
itemgetterr   )r   rF  rE  s     @rQ   r<  r<  &  s;    EHE\E\X  #"9"9">">"@AbmFA rR   c                2   t        |       }t        | |||      \  }}}|| _        || _        | j                  j                  |       |D ]K  }| j                  j                  |d      }|"|j                  t        us5t        | ||j                         M y)zCollect and set `cls.__pydantic_fields__` and `cls.__class_vars__`.

    Args:
        cls: BaseModel or dataclass.
        config_wrapper: The config wrapper instance.
        ns_resolver: Namespace resolver to use when getting model annotations.
    )typevars_mapN)r,   r%   r   r   rw   r   rx   r   r  r   setattr)	r   r   r   rK  r$  r   r   rM   r4  s	            rQ   r   r   6  s     *#.L.B^[|/+F %C"5Cj) 
+ **..q$76G!GCEMM*
+rR   )r   call_on_complete_hookr   is_force_rebuildc          
        t        |       }| j                  s:	 t        | |||      \  | _        | _        |s| j                  sy| j                  sJ t        |||      }
	 |
j                  |       }|j                  | j                        }	 |
j                  |      }| j                   j"                  j%                         D ci c]  \  }}||j&                   c}}| _        t+        |        || _        t/        || |xs | j0                  | j2                  |rdnd||j4                  |       | _        t9        |||       | _        t=        d	t?        t@        | jB                  | j                  |jD                  |jF                  
            | _$        d| _%        |r| jM                          y# t
        $ r?}t        j                  |      }	t        | d|	j                   d       |r|	|Y d}~d}~ww xY w# t        $ r'}|r t        | d|j                   d       Y d}~yd}~ww xY w# t        $ r t        |        Y yw xY wc c}}w )a  Finish building a model class.

    This logic must be called after class has been created since validation functions must be bound
    and `get_type_hints` requires a class object.

    Args:
        cls: BaseModel or dataclass.
        config_wrapper: The config wrapper instance.
        ns_resolver: The namespace resolver instance to use during schema building.
        raise_errors: Whether to raise errors.
        call_on_complete_hook: Whether to call the `__pydantic_on_complete__` hook.
        create_model_module: The module of the class to be created, if created by `create_model`.
        is_force_rebuild: Whether the model is being force-rebuilt (if True, pre-built serializers and
                          validators are not used, to avoid stale references).

    Returns:
        `True` if the model is successfully completed, else `False`.

    Raises:
        PydanticUndefinedAnnotation: If PydanticUndefinedAnnotation occurs in __get_pydantic_core_schema__
            and `raise_errors=True`.
    )r   r   rK  rA   NF)titlecreate_modelr<   )_use_prebuilt__signature__)r^   r$  validate_by_nameextraT)'r,   r   r(   r   r   r(  r   from_name_errorr/   r   r)   generate_schemacore_configrW   clean_schemar*   r   r   r   r   r   set_deprecated_descriptors__pydantic_core_schema__r   rX   rY   plugin_settings__pydantic_validator__r   __pydantic_serializer__r6   r   r1   r   rT  rU  rS  r   __pydantic_on_complete__)r   r   r   r   rM  r   rN  rK  eexc
gen_schemaschemarX  rM   rN   s                  rQ   r   r   X  sG   @ *#.L++	!CW-')	D@C#S%@ C$D$D////J++C0 !,,3<<,@K((0 ?B>Y>Y>i>i>o>o>q'rda166	'rC$s##)C !8-s~~-;&&**	"C #36;ZjVj"kC
 +'**+<< &&	
	C !%C$$&S  	!-==a@CC1SXXJa1q  	!( ' q]+	   (ssG   F0  G; H. I0	G894G33G8;	H+H&&H+.IIc                   | j                   j                         D ]>  \  }}|j                  x}t        |      }|j	                  | |       t        | ||       @ | j                  j                         D ]i  \  }}|j                  x}t        t        |j                        d      r5t        ||j                        }|j	                  | |       t        | ||       k y)z8Set data descriptors on the class for deprecated fields.N__deprecated__)
r   r   deprecation_message_DeprecatedFieldDescriptorr   rL  r   hasattrr$   wrapped_property)r   fieldr   msgdesccomputed_field_infos         rQ   rZ  rZ    s     44::< &z111C>-c2Dc5)C%	& '*&F&F&L&L&N &""';;;SH34G4X4XY[kl-c3F3W3WXDc5)C%&rR   c                  @    e Zd ZU dZded<   d	d
dZddZd	ddZddZy)rg  aW  Read-only data descriptor used to emit a runtime deprecation warning before accessing a deprecated field.

    Attributes:
        msg: The deprecation message to be emitted.
        wrapped_property: The property instance if the deprecated field is a computed field, or `None`.
        field_name: The name of the field being deprecated.
    rS   
field_nameNc                     || _         || _        y r   )rk  ri  )rL   rk  ri  s      rQ   r   z#_DeprecatedFieldDescriptor.__init__  s     0rR   c                    || _         y r   )ro  )rL   r   r   s      rQ   r   z'_DeprecatedFieldDescriptor.__set_name__  s	    rR   c                N   |=| j                   | j                   j                  d |      S t        | j                        t	        j
                  | j                  t        d       | j                   | j                   j                  ||      S |j                  | j                     S )Nr   rB   )	ri  __get__r   ro  rF   rG   rk  DeprecationWarningr   )rL   r   obj_types      rQ   rs  z"_DeprecatedFieldDescriptor.__get__  s    ;$$0,,44T8DD 11dhh 2qA  ,((00h??||DOO,,rR   c                ,    t        | j                        r   )r   ro  )rL   r   r4  s      rQ   __set__z"_DeprecatedFieldDescriptor.__set__  s    T__--rR   r   )rk  rS   ri  zproperty | NonerU   rV   )r   ry   r   rS   rU   rV   )r   zBaseModel | Noneru  ztype[BaseModel] | NonerU   r
   )r   r
   r4  r
   rU   r   )	rW   rX   rY   rZ   rk   r   r   rs  rw  r`   rR   rQ   rg  rg    s"     O1
-.rR   rg  c                  (    e Zd ZdZddZddZddZy)	_PydanticWeakRefa  Wrapper for `weakref.ref` that enables `pickle` serialization.

    Cloudpickle fails to serialize weakref.ref objects due to an arcane error related to
    to abstract base classes (`abc.ABC`). This class works around the issue by wrapping
    `weakref.ref` instead of subclassing it.

    See https://github.com/pydantic/pydantic/issues/6763 for context.

    Semantics:
        - If not pickled, behaves the same as a `weakref.ref`.
        - If pickled along with the referenced object, the same `weakref.ref` behavior
          will be maintained between them after unpickling.
        - If pickled without the referenced object, after unpickling the underlying
          reference will be cleared (`__call__` will always return `None`).
    c                L    |d | _         y t        j                  |      | _         y r   )_wrweakrefref)rL   r   s     rQ   r   z_PydanticWeakRef.__init__  s     ; DH{{3'DHrR   c                <    | j                   y | j                         S r   )r{  r   s    rQ   __call__z_PydanticWeakRef.__call__%  s    8888:rR   c                    t          |        ffS r   )ry  r   s    rQ   
__reduce__z_PydanticWeakRef.__reduce__+  s    $&**rR   N)r   r
   )rU   r
   )rU   z4tuple[Callable, tuple[weakref.ReferenceType | None]])rW   rX   rY   rZ   r   r  r  r`   rR   rQ   ry  ry    s     (+rR   ry  c                    | yi }| j                         D ]  \  }}	 t        |      }|||<    |S # t        $ r |}Y w xY w)aX  Takes an input dictionary, and produces a new value that (invertibly) replaces the values with weakrefs.

    We can't just use a WeakValueDictionary because many types (including int, str, etc.) can't be stored as values
    in a WeakValueDictionary.

    The `unpack_lenient_weakvaluedict` function can be used to reverse this operation.
    N)r   ry  r   )dresultrM   rN   proxys        rQ   r   r   /  sa     	yF	 1	$Q'E q	 M  	E	s   1??c                    | yi }| j                         D ]*  \  }}t        |t              r |       }| |||<   &|||<   , |S )zAInverts the transform performed by `build_lenient_weakvaluedict`.N)r   rE   ry  )r  r  rM   rN   s       rQ   r   r   C  sX    yF	 1a)*A}q	F1I MrR   c                     ddl m}  t        t        t        t
        t        | t        g}t        j                  dk\  r|j                  t        j                         t        |      S )Nr   )ComputedFieldInfo)ri      )r$  r  r   r  r	  r  r"   r   r   r   appendtypingr   )r  r   s     rQ   r%  r%  S  sR    * 	M 7"V112rR   )r^   zLiteral[False]rU   r
   r   )r   r  r   r  rU   zCallable[..., Any] | None)r   r  r   r  r   r  r/  set[str]r0  r  rU   zdict[str, ModelPrivateAttr])r   ry   r   r  rU   rV   )r   ry   rU   r
   )r   ry   r   r    r   r0   rU   rV   )r   ry   r   r    r   r0   r   r  rM  r  r   r  rN  r  rU   r  )r   ry   rU   rV   )r  dict[str, Any] | NonerU   r  )rU   r  )mrZ   
__future__r   _annotationsrH  r   r  rF   r|  abcr   r  r   r   r   typesr   r	   r
   r   r   r   r   r   r   pydantic_corer   r   typing_extensionsr   r   r   r   r   typing_inspectionr   errorsr   r   plugin._schema_validatorr   r   r   _configr    _decoratorsr!   r"   r#   r$   _fieldsr%   r&   r'   r(   _generate_schemar)   r*   	_genericsr+   r,   _import_utilsr-   r.   _mock_val_serr/   _namespace_utilsr0   
_signaturer1   _typing_extrar2   r3   r4   r5   _utilsr6   r7   r$  r8   PydanticModelFieldr9   r:   r;   PydanticModelPrivateAttrmainr<   r=   rT   __setattr__r  r   r?   ra   rc   rg   rr   r   r   r   r<  r   r   rZ  rg  ry  r   r   r%  r`   rR   rQ   <module>r     s+   ( 2  
     + +  Z Z Z = b b , C > O " s s o o @ F M * ( 3  944@ *%x##)$ )$ !
 	 T] T=OQikv<wxVW V yVrG0	FF#F )F 	F
  F !FR
% +	+!+ + 
	+N "&&*"y	y!y y
 y  y $y y 
yx&&". ".J +  +F(     rR   