
    &MgǏ                    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	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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 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+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZFmGZG ddlHmIZImJZJ ej                  rd
dlLmMZMmNZNmOZO d
dlLmPZQ d
dlLmRZS d
dlTmUZU ne&ZV eW       ZQ eW       ZSeWj                  ZY G d d eZ      Z[d!d"	 	 	 d9d#Z\ ed$eQeSe\f%       G d& d'e             Z]d:d(Z^d;d)Z_	 	 	 	 	 	 	 	 	 	 d<d*Z`d=d+Zad>d,Zb	 	 	 	 	 	 	 	 	 	 d?d-Zcd$ddd.	 	 	 	 	 	 	 	 	 	 	 	 	 d@d/ZddAd0Ze G d1 d2      Zf G d3 d4      ZgdBd5ZhdBd6Zi ed7      dCd8       Zjy)Dz"Private logic for creating models.    )annotationsN)ABCMeta)	lru_cachepartial)FunctionType)AnyCallableGenericLiteralNoReturnTypeVarcast)PydanticUndefinedSchemaSerializer)TypeAliasTypedataclass_transform
deprecatedget_args   )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)GenerateSchema)PydanticGenericMetadataget_model_typevars_map)import_cached_base_modelimport_cached_field_info)set_model_mocks)
NsResolver)CallbackGetCoreSchemaHandler)generate_pydantic_signature)_make_forward_refeval_type_backportis_annotatedis_classvar_annotationparent_frame_namespace)LazyClassAttributeSafeGetItemProxy)ComputedFieldInfo	FieldInfoModelPrivateAttr)Field)PrivateAttr)	BaseModelc                  $     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       }|rD||ur@t        |t              r0t        j                  d| d|j
                  j                   d       t        | !  ||      S )N`z"` overrides an existing Pydantic `z` decorator)	get
isinstancer   warningswarndecorator_infodecorator_reprsuper__setitem__)selfkvexisting	__class__s       tE:\wamp.anq\www\apps\calme\nutritwin\resources\nutritwin\Lib\site-packages\pydantic/_internal/_model_construction.pyrE   z_ModelNamespaceDict.__setitem__=   sc    D))jCZ.[MMAaS B8CZCZCiCiBjjuvww"1a((    )rG   strrH   objectreturnNone)__name__
__module____qualname____doc__rE   __classcell__rJ   s   @rK   r;   r;   8   s    ) )rL   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 rW   s    rK   NoInitFieldr[   E   s    rL   T)kw_only_defaultfield_specifiersc                       e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZd fdZej                  sddZedd       Z	d fdZ
edd       Ze edd	      dd
              Zedd       Zedd       Zd fdZ xZS )ModelMetaclassNc           	        !" |r| j                  |      \  }}	}
t        j                  |||      }|j                  |d<   t	        ||j
                  |	|      }|s|
r#t        ||        d' fd}||d<   n	t        |d<   |	|d<   i |
||d<   |r||d<   t        dt        #| (  | |||fi |      }t               }|j                  }t        |v rG|j                  t              |j                  |      k  r t        j                   t#        d	      d
       t%        |j&                  dd       |_        |j*                  |j*                  u rdnd|_        t/        j0                  |      |_        |r	||_        n[t%        |di       j7                  dd      "t%        |dd      xs "!!r"rt9        !fd"D              sd
dlm} t?        "fd!D              }|"v rZ|!vrVdjA                  |D cg c]  }|jB                   c}      }|jB                   d| d|jB                   d| d}tG        |      "|z   }djA                  |D cg c]  }tE        |       c}      }d| d}d| d}t        |vrCdjA                  |D cg c]  }|jB                   c}|gz         }|d|jB                   d| dz  }tG        |      dd!d |_        d|_$        |jK                         D ]  \  }}|jM                  ||        |rtO        tQ                     |_)        t%        |d!d      }tU        |tV              rtY        |      }t[        |"      }t]        ||||       |j^                  rd#|vrta        ||       tc        |||d||$       |j2                  jd                  jK                         D ci c]  \  }}||jf                   c}}|_4        tk        |       t        ||  di | |S d%D ]  }|jo                  |d        |j7                  d&i       jq                          t        #| (  | |||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.
        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)rF   contextoriginal_model_post_inits     rK   wrapped_model_post_initz7ModelMetaclass.__new__.<locals>.wrapped_model_post_inity   s     0g>0w?rL   model_post_init__class_vars____private_attributes____pydantic_generic_metadata__type[BaseModel]zClasses should inherit from `BaseModel` before generic classes (e.g. `typing.Generic[T]`) for pydantic generics to work properly.r   
stacklevel__pydantic_base_init__F
parametersrZ   __parameters__c              3  &   K   | ]  }|v  
 y wNrZ   ).0xro   s     rK   	<genexpr>z)ModelMetaclass.__new__.<locals>.<genexpr>   s     ?kYjTUZYjs   )RootModelRootTypec              3  ,   K   | ]  }|vs|  y wrr   rZ   )rs   rt   parent_parameterss     rK   ru   z)ModelMetaclass.__new__.<locals>.<genexpr>   s     .c*QQbHbq*s   	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argsro   __pydantic_parent_namespace__)parent_namespace__hash__raise_errorsns_resolvercreate_model_module)__pydantic_fields_set____pydantic_extra____pydantic_private____annotations__rF   r9   rd   r   rO   rP   )9_collect_bases_datar   	for_modelconfig_dictinspect_namespaceignored_typesget_model_post_initrc   r   rD   __new__r'   __mro__r
   indexr@   rA   r   getattr__init____pydantic_custom_init__rg   __pydantic_post_init__r   build__pydantic_decorators__rj   r>   all
root_modelrv   tuplejoinrQ   rM   	TypeError__pydantic_complete__items__set_name__build_lenient_weakvaluedictr1   r~   r?   dictunpack_lenient_weakvaluedictr*   set_model_fieldsfrozenset_default_hash_funccomplete_model_classcomputed_fieldsinfo__pydantic_computed_fields__set_deprecated_descriptors__pydantic_init_subclass__popclear)$mcscls_namebases	namespacerj   #__pydantic_reset_parent_namespace___create_model_modulekwargsbase_field_names
class_varsbase_private_attributesconfig_wrapperprivate_attributesrf   cls
BaseModel_mrorv   missing_parametersrt   parameters_strerror_messagecombined_parametersgeneric_type_label	bases_strnameobjr   r   rG   rH   instance_slotre   ro   rx   rJ   s$                                   @@@rK   r   zModelMetaclass.__new__Q   s   6 DGD[D[\aDbAj*A*44UIvNN(6(B(BIn%!2>77EU" "%<+>y%+P(+7@ 4KI/03JI/0*4I&'2c5L2cPb2cI./,=Z	9:(%'/#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` & +9*>*>s*CC' -4Q1$+C1PRT$U$Y$YZfhj$k!$S*:DAVEV
"3C?kYj?k<k>)..c*.c)c&(,==BS[eBe *.HZ3[HZ1AJJHZ3[)\"||n,-. /WWZWcWcVddop~o  @IJ &, $M22! /@BT.T+)-DW3XDWqCFDW3X)Y/>~>Na-P*88J7K1N & #%/
 )-		u2Mu!1::u2MQcPd2d(eI)"OPSP\P\~]^_h^iiq rM $M22 #",51 ).C% 0557	c  d+ 8 34OPfPh4i16=cCbdh6i*D1#?@P#Q $6FGKS%E$$9)D%c51 "'$8 '*&A&A&Q&Q&W&W&Y0&Yda166	&Y0C, 's+
 #s6@@J "i! "i
 MM+R06687?3%MfMMc 4\ 4Y 3NV0s   6Q QQ
8Qc                   t         |          }| j                  t        fk(  r|S | j                  j                  d      }|s|S d}|d   |d   }}|s|S |j                  d   }t        t        ||            |h}| g}|dd  D ]  }	t        |	di       j                  d      }
t        |	di       j                  dd      }|
|v rA|	|vrg|ret        |      j                         k  sJ |       t        fd|D              }|	|   }|j                  |       |j                  |
xs |	       |
|j                  |
xs |	       |	|d	   us|j                  |	        |S )
Nrj   zUnexpected error occurred when generating MRO of generic subclass. Please report this issue on GitHub: https://github.com/pydantic/pydantic/issues.r|   r}   ro   r   rZ   c              3  (   K   | ]	  }|     y wrr   rZ   )rs   param
param_dicts     rK   ru   z%ModelMetaclass.mro.<locals>.<genexpr>$  s     %Q[Ej&7[s   )rD   r   	__bases__rN   __dict__r>   rj   r   zipr   setkeysr   appendadd)r   original_mrogeneric_metadataassert_err_msgr|   r}   target_paramsindexed_originsnew_mrobasebase_originbase_paramsnew_base_argsnew_baser   rJ   s                 @rK   r   zModelMetaclass.mro  s   w{}==VI%;><<;K;KLk;l o X&V$  <<\J#mT23
!($'5 $D29$@_ac2d2h2hiq2rK/6t=\^`/a/e/efrtv/wKo-_,;':??+<<LnL< %%Q[%Q Q.x(##K$748*##K$748
 72;&t$1 %4 rL   c                d    | j                   j                  d      }|r	||v r||   S t        |      )zNThis is necessary to keep attribute access working for class attribute access.ri   )r   r>   AttributeError)rF   itemr   s      rK   __getattr__zModelMetaclass.__getattr__;  s9    !%!2!23K!L!d.@&@)$// &&rL   c                    t               S rr   )r;   )r   r}   r   s      rK   __prepare__zModelMetaclass.__prepare__B  s    "$$rL   c                >    t        |d      xr t        | 	  |      S )zsAvoid calling ABC _abc_subclasscheck unless we're pretty sure.

        See #3829 and python/cpython#92810
        __pydantic_validator__)hasattrrD   __instancecheck__)rF   instancerJ   s     rK   r   z ModelMetaclass.__instancecheck__F  s#    
 x!9:buw?XYa?bbrL   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'   r   
issubclassupdater   r   rh   ri   )r   r9   field_namesr   r   r   s         rK   r   z"ModelMetaclass._collect_bases_dataM  s    ,.	 #"u
:<D$	*t9/D""741F#K#P#P#RS!!$"5"56"))$*E*EF  J(:::rL   EThe `__fields__` attribute is deprecated, use `model_fields` instead.)categoryc                R    t        j                  dt        d       | j                  S )Nr   r   rl   )r@   rA   r   model_fieldsrF   s    rK   
__fields__zModelMetaclass.__fields__\  s'     	S%	

    rL   c                    t        | di       S )zGet metadata about the fields defined on the model.

        Returns:
            A mapping of field names to [`FieldInfo`][pydantic.fields.FieldInfo] objects.
        r   r   r   s    rK   r   zModelMetaclass.model_fieldsf  s     t2B77rL   c                    t        | di       S )zGet metadata about the computed fields defined on the model.

        Returns:
            A mapping of computed field names to [`ComputedFieldInfo`][pydantic.fields.ComputedFieldInfo] objects.
        r   r   r   s    rK   model_computed_fieldsz$ModelMetaclass.model_computed_fieldso  s     t;R@@rL   c                `    t        t        | 	               }d|v r|j                  d       |S )Nr   )listrD   __dir__remove)rF   
attributesrJ   s     rK   r   zModelMetaclass.__dir__x  s0    %'/+,
:%l+rL   )NTN)r   rM   r   tuple[type[Any], ...]r   dict[str, Any]rj   zPydanticGenericMetadata | Noner   boolr   
str | Noner   r   rO   type)rO   zlist[type[Any]])r   rM   rO   r   )r}   r   r   r   rO   zdict[str, object])r   r   rO   r   )r   r   rO   z6tuple[set[str], set[str], dict[str, ModelPrivateAttr]])rO   zdict[str, FieldInfo])rO   zdict[str, ComputedFieldInfo])rO   z	list[str])rQ   rR   rS   r   r   typingTYPE_CHECKINGr   classmethodr   r   staticmethodr   propertyr   r   r   r   r   rU   rV   s   @rK   r_   r_   O   s    IM48+/oNoN %oN "	oN
 (FoN .2oN )oN oN 
oNb4l 	' % %c ; ; Wbfg! h ! 8 8 A A rL   r_   c                   t        | dd      Pi }| j                  j                         D ]#  \  }}|j                         }|t        us|||<   % t        | d|       yy)a  This function is meant to behave like a BaseModel method to initialise 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   N)r   ri   r   get_defaultr   object_setattr)rF   rd   pydantic_privater   private_attrdefaults         rK   rc   rc     sp     t+T2:"&"="="C"C"ED,"..0G//)0 & #F 	t35EF ;rL   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.rg   N)r'   r   rg   )r   r   r9   rg   s       rK   r   r     sD    I%*++(*I.u6GHOi777 8rL   c           
     V   ddl mm} t               }|t	               z   }i }| j                  di       }d|v sd| v rt        d      t               }	t        | j                               D ]  \  }
}|
dk(  s|
dk(  rt        |t              r5|j                  | d   k(  r#d	| v r|j                  j                  | d	         rWt        ||      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4t)        |
      r/|
|vst+        ||
         rSt-         ||            ||
<   | |
= n|
|v rt|
|vsz|
|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-t1        |dd      d
k7  s>t        |t2              rFt5        j6                  d      }|/	 t9        t;        |dd !      |j<                  |j>                  "      }tA        |      r*tC        |      ^}}tE        fd#|D        d      }||||<    |       ||<    |S # t"        t        f$ r Y Tw xY w)$a  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.
        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 contains 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   )r6   r8   r   __root__zUTo define root models, use `pydantic.RootModel` rather than a field called '__root__'ra   r   rR   rS   	functools__zXPrivate attributes must not use dunder names; use a single underscore prefix instead of rz   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rr   )r?   )rs   rH   r6   s     rK   ru   z$inspect_namespace.<locals>.<genexpr>  s     $\1JqJZ<[Qs   )#fieldsr6   r8   r(   default_ignored_typesr>   r   r   r   r   r?   r  rR   rS   
startswithrJ   r   	NameErrorr"   lstripr#   r0   r   r   r   rM   sys	_getframer.   r-   	f_globalsf_localsr/   r   next)r   r   base_class_varsbase_class_fieldsr8   r5   all_ignored_typesr   raw_annotationsignored_namesvar_namevaluesuggested_nameann_nameann_typeframer  metadatar  r6   s                      @rK   r   r     s   4 7(*I%(=(??68mm$5r:O_$
i(?opp!eM	 12%~%5I)Iud#  Il$;;)+""--i.GH 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 3z .335(%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(? 6B  &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_funcrN   r   r   r1  )r   r   base_hash_funcnew_hash_funcs       rK   r   r   %  sP    -eZ@N"3'M$00GNJX\4]anawaw4w % 5xrL   c                    | j                   r*t        j                  | j                   j                          nd dfd}|S )Nc                     y)Nr   rZ   )r  s    rK   <lambda>z make_hash_func.<locals>.<lambda>3  s    lmrL   c                    	 t         | j                              S # t        $ r' t         t        | j                                    cY S w xY wrr   )hashr   KeyErrorr3   )rF   getters    rK   	hash_funcz!make_hash_func.<locals>.hash_func5  sJ    	At}}-.. 	A
 />?@@	As    -AA)rF   r   rO   int)r   operator
itemgetterr   )r   r<  r;  s     @rK   r2  r2  2  s;    EHE\E\X  #"9"9">">"@AbmFA rL   c                $   t        |       }t        | ||||      \  }}|| _        | j                  j	                  |       |D ]K  }| j
                  j                  |d      }|"|j                  t        us5t        | ||j                         M y)a<  Collect and set `cls.__pydantic_fields__` and `cls.__class_vars__`.

    Args:
        cls: BaseModel or dataclass.
        bases: Parents of the class, generally `cls.__bases__`.
        config_wrapper: The config wrapper instance.
        ns_resolver: Namespace resolver to use when getting model annotations.
    )typevars_mapN)
r&   r!   r   rh   r   ri   r   r  r   setattr)	r   r   r   r   rA  r  r   rG   r*  s	            rK   r   r   B  s     *#.L-c5.+dpqFJ$Cj) **..q$76G!GCEMM* rL   r   c          
     $   |j                   rt        | |       yt        |       }t        |||      }t	        t        |j                  d      |d      }	 | j                  | |      }	|j                  | j                        }	 |j                  |	      }	|	| _        t        |	| |xs | j                   | j"                  |rdnd	||j$                        | _        t)        |	|      | _        d
| _        t/        dt        t0        | j2                  | j4                  |j6                  |j8                              | _        y
# t        $ r(}
|r t        | |d|
j                   d       Y d}
~
yd}
~
ww xY w# |j                  $ r t        | |       Y yw xY 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.
        cls_name: The model or dataclass name.
        config_wrapper: The config wrapper instance.
        raise_errors: Whether to raise errors.
        ns_resolver: The namespace resolver instance to use during schema building.
        create_model_module: The module of the class to be created, if created by `create_model`.

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

    Raises:
        PydanticUndefinedAnnotation: If `PydanticUndefinedAnnotation` occurs in`__get_pydantic_core_schema__`
            and `raise_errors=True`.
    F)from_dunder_get_core_schemaunpack)ref_moder=   N)titlecreate_modelr9   T__signature__)rX   r  populate_by_nameextra)defer_buildr)   r&   r$   r+   r   generate_schema__get_pydantic_core_schema__r   r   core_configrQ   clean_schemaCollectedInvalid__pydantic_core_schema__r   rR   rS   plugin_settingsr   r   __pydantic_serializer__r   r2   r,   r   r   rJ  rK  rI  )r   r   r   r   r   r   rA  
gen_schemahandlerschemaerO  s               rK   r   r   c  s   : !!X&)#.LJ +
**NG11#w? !,,3<<,@K((0 $*C !8-s~~-;&&"C #36;"GC $C
 +'**+<< &&	
	C U ' X166(!}5	 && X&s*   D= E1 =	E.E))E.1FF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   rB  r   r   r    wrapped_property)r   field
field_infomsgdesccomputed_field_infos         rK   r   r     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% 'OrL   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)r\  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.
    rM   
field_nameNc                     || _         || _        y rr   )r`  r]  )rF   r`  r]  s      rK   r   z#_DeprecatedFieldDescriptor.__init__  s     0rL   c                    || _         y rr   )rd  )rF   r   r   s      rK   r   z'_DeprecatedFieldDescriptor.__set_name__  s	    rL   c                b   |=| j                   | j                   j                  d |      S t        | j                        t	        j
                  | j                  t        j                  d       | j                   | j                   j                  ||      S |j                  | j                     S )Nr   rl   )
r]  __get__r   rd  r@   rA   r`  builtinsDeprecationWarningr   )rF   r   obj_types      rK   rh  z"_DeprecatedFieldDescriptor.__get__  s    ;$$0,,44T8DD 11dhh ; ;J  ,((00h??||DOO,,rL   c                ,    t        | j                        rr   )r   rd  )rF   r   r*  s      rK   __set__z"_DeprecatedFieldDescriptor.__set__  s    T__--rL   rr   )r`  rM   r]  zproperty | NonerO   rP   )r   rk   r   rM   rO   rP   )r   zBaseModel | Nonerk  ztype[BaseModel] | NonerO   r   )r   r   r*  r   rO   r   )	rQ   rR   rS   rT   r   r   r   rh  rm  rZ   rL   rK   r\  r\    s"     O1
-.rL   r\  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 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 rr   )_wrweakrefref)rF   r   s     rK   r   z_PydanticWeakRef.__init__	  s     ; DH{{3'DHrL   c                <    | j                   y | j                         S rr   )rq  r   s    rK   __call__z_PydanticWeakRef.__call__  s    8888:rL   c                    t          |        ffS rr   )ro  r   s    rK   
__reduce__z_PydanticWeakRef.__reduce__  s    $&**rL   N)r   r   )rO   r   )rO   z4tuple[Callable, tuple[weakref.ReferenceType | None]])rQ   rR   rS   rT   r   ru  rw  rZ   rL   rK   ro  ro    s     (+rL   ro  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   ro  r   )dresultrG   rH   proxys        rK   r   r     s\     	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   r?   ro  )ry  rz  rG   rH   s       rK   r   r   /  sS    yF	1a)*A}q	F1I  MrL   )maxsizec                     ddl m}  t        t        t        t
        t        | t        g}t        j                  dk\  r|j                  t        j                         t        |      S )Nr   )r4   )      )r  r4   r   r  r  r  r   r   r  version_infor   r  r   )r4   r   s     rK   r  r  ?  sR    * 	M 7"V112rL   )rX   zLiteral[False]rO   r   r   )r   r   r   r   rO   zCallable[..., Any] | None)
r   r   r   r   r$  set[str]r%  r  rO   zdict[str, ModelPrivateAttr])r   rk   r   r   rO   rP   )r   rk   rO   r   )
r   rk   r   r   r   r   r   NsResolver | NonerO   rP   )r   rk   r   rM   r   r   r   r   r   r  r   r   rO   r   )r   rk   rO   rP   )ry  dict[str, Any] | NonerO   r  )rO   r   )krT   
__future__r   _annotationsri  r>  r  r  r@   rr  abcr   r  r   r   typesr   r   r	   r
   r   r   r   r   pydantic_corer   r   typing_extensionsr   r   r   r   errorsr   r   plugin._schema_validatorr   r   r   _configr   _decoratorsr   r   r   r    _fieldsr!   r"   r#   _generate_schemar$   	_genericsr%   r&   _import_utilsr'   r(   _mock_val_serr)   _namespace_utilsr*   _schema_generation_sharedr+   
_signaturer,   _typing_extrar-   r.   r/   r0   r1   _utilsr2   r3   r  r  r4   r5   r6   r7   PydanticModelFieldr8   PydanticModelPrivateAttrmainr9   rj  rN   __setattr__r	  r   r;   r[   r_   rc   r   r   r   r2  r   r   r   r\  ro  r   r   r  rZ   rL   rK   <module>r     s$   ( 2   
     (  K K K = V V C > O " s s Y Y , F M * ( C 3  9	GG4@  3%x##
)$ 
) !
 	 T=OQikv<wxlW l yl^	G$	EE(E E  	E
 !EP
% +	+ + "+ #	+
 
+L %)&*Z	ZZ "Z
 Z #Z $Z 
Zz&&". ".J +  +F(  4   rL   