
    dfi                       U d Z ddlmZ ddlZddlZddlZddlmZ ddl	m
Z
 ddl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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  d
dlm!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZE ej                  rddlGmHZH d
dlImJZJ ne!ZKeeLeMeNe+e)eEfZOdePd<   eQj                  ZS G d  d!eT      ZU ed"ef#       G d$ d%e             ZVd2d&ZWd3d'ZX	 	 	 	 	 	 	 	 	 	 d4d(ZYd5d)ZZ	 	 	 	 	 	 	 	 	 	 d6d*Z[d"d+	 	 	 	 	 	 	 	 	 	 	 d7d,Z\	 	 	 	 	 	 	 	 d8d-Z] G d. d/ej                        Z_d9d0Z`d9d1Zay):z"Private logic for creating models.    )annotationsN)ABCMeta)partial)FunctionType)AnyCallableGenericMapping)PydanticUndefinedSchemaSerializer)dataclass_transform
deprecated   )PydanticUndefinedAnnotationPydanticUserError)Field	FieldInfoModelPrivateAttrPrivateAttr)create_schema_validator)PydanticDeprecatedSince20   )ConfigWrapper)collect_invalid_schemassimplify_schema_referencesvalidate_core_schema)ComputedFieldInfoDecoratorInfosPydanticDescriptorProxyget_attribute_from_bases)apply_discriminators)collect_model_fieldsis_valid_field_nameis_valid_privateattr_name)GenerateSchema)PydanticGenericMetadataget_model_typevars_map)
MockValSerset_model_mocks)CallbackGetCoreSchemaHandler)get_cls_types_namespaceis_classvarparent_frame_namespace)ClassAttributeis_valid_identifier)ValidateCallWrapper)	Signature	BaseModelztuple[Any, ...]IGNORED_TYPESc                  $     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       _/home/api-vastappli/venv/lib/python3.12/site-packages/pydantic/_internal/_model_construction.pyr@   z_ModelNamespaceDict.__setitem__@   sc    D))jCZ.[MMAaS B8CZCZCiCiBjjuvww"1a((    )rB   strrC   objectreturnNone)__name__
__module____qualname____doc__r@   __classcell__rE   s   @rF   r6   r6   ;   s    ) )rG   r6   T)kw_only_defaultfield_specifiersc                       e Zd Z	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 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e      dd              Z xZS )ModelMetaclassc                   |r| j                  |      \  }}}	t        j                  |||      }
|
j                  |d<   t	        ||
j
                  ||      }|r#t        ||      dfd}||d<   n	t        |d<   ||d<   i |	||d<   |
j                  rt        ||       t        | ,  | |||fi |}ddlm} t        |j                  d	d
       |_        |j"                  |j"                  u rdnd|_        t'        j(                  |      |_        |r||_        nt        |di       j/                  dd      t        |dd      xs rrt1        fdD              st3        fdD              z   }dj5                  |D cg c]  }t7        |       c}      }d| d}d| d}t8        |vrCdj5                  |D cg c]  }|j:                   c}|gz         }|d|j:                   d| dz  }t=        |      ddd|_        d
|_        |jA                         D ]  \  }}|jC                  ||        |rtE        tG                     |_$        t        |dd      }tK        |tL              rtO        |      }tQ        ||      }tS        |||
|       tU        |||
d
|       t        ||  di | |S t        | ,  | |||fi |S 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.
            **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)rA   _ModelMetaclass__contextoriginal_model_post_inits     rF   wrapped_model_post_initz7ModelMetaclass.__new__.<locals>.wrapped_model_post_initp   s     0i@0yArG   model_post_init__class_vars____private_attributes__r   r2   __pydantic_base_init__F__pydantic_generic_metadata__
parameters __parameters__c              3  &   K   | ]  }|v  
 y wNrc   ).0xrb   s     rF   	<genexpr>z)ModelMetaclass.__new__.<locals>.<genexpr>   s     ?kTUZ?ks   c              3  ,   K   | ]  }|vs|  y wrf   rc   )rg   rh   parent_parameterss     rF   ri   z)ModelMetaclass.__new__.<locals>.<genexpr>   s     Cx!]^fw]wACxs   	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argsrb   __pydantic_parent_namespace__)raise_errorstypes_namespace)rA   r3   rZ   r   rJ   rK   ),_collect_bases_datar   	for_modelconfig_dictinspect_namespaceignored_typesget_model_post_initrY   frozenset_default_hash_funcr?   __new__mainr3   getattr__init____pydantic_custom_init__r]   __pydantic_post_init__r   build__pydantic_decorators__ra   r9   alltuplejoinrH   r	   rL   	TypeError__pydantic_complete__items__set_name__build_lenient_weakvaluedictr-   rq   r:   dictunpack_lenient_weakvaluedictr+   set_model_fieldscomplete_model_class__pydantic_init_subclass__)mcscls_namebases	namespacera   #__pydantic_reset_parent_namespace__kwargsbase_field_names
class_varsbase_private_attributesconfig_wrapperprivate_attributesr\   clsr3   combined_parametersrh   parameters_strgeneric_type_labelerror_message	bases_strnameobjparent_namespacers   r[   rb   rk   rE   s                            @@@rF   r|   zModelMetaclass.__new__J   sH   2 DGD[D[\aDbAj*A*44UIvNN(6(B(BIn%!2>77EU" "+>y%+P(+7B 4KI/03JI/0*4I&'2c5L2cPb2cI./$$%i7#(7?3%#]V\#]C(/6s||E]_d/e+eC(141D1D	HaHa1agxC&*8*>*>s*CC' -4Q1$+C1PRT$U$Y$YZfhj$k!$S*:DAVEV
"3C?kYj?k<k*;eCxzCx>x*x'%)YY@S/T1A/T%UN+:>:J!)L&44F3GqJ " e+
 %)II5.Iaqzz.IM_L`.`$a	%KCLL>YZ[dZeemn $M22 #",51 ).C% 0557 ,	c  d+, 34OPfPh4i1&s,KTR*D1#?@P#Q 5c;KLOS%I " / #s6@@J 7?3%MfMMi 0U /Js   K	Kc                    | j                   j                  d      }|r	||v r||   S |dk(  r;t        | dd      }t        |t              r|j                         }|t        | d      S t        |      )zNThis is necessary to keep attribute access working for class attribute access.r_   __pydantic_core_schema____pydantic_validator__N)__dict__r9   r~   r:   r(   rebuildAttributeError)rA   itemr   maybe_mock_validatorrebuilt_validators        rF   __getattr__zModelMetaclass.__getattr__   s    !%!2!23K!L!d.@&@)$//11'.t5Mt'T$2J?(<(D(D(F%(4&t-GHH &&rG   c                    t               S rf   )r6   )r   rp   r   s      rF   __prepare__zModelMetaclass.__prepare__   s    "$$rG   c                >    t        |d      xr t        | 	  |      S )zsAvoid calling ABC _abc_subclasscheck unless we're pretty sure.

        See #3829 and python/cpython#92810
        r   )hasattrr?   __instancecheck__)rA   instancerE   s     rF   r   z ModelMetaclass.__instancecheck__   s#    
 x!9:buw?XYa?bbrG   c                6   ddl m} t               }t               }i }| D ]t  }t        ||      s||us|j	                  t        |di       j                                |j	                  |j                         |j	                  |j                         v |||fS )Nr   r2   model_fields)	r}   r3   set
issubclassupdater~   keysr^   r_   )r   r3   field_namesr   r   bases         rF   rt   z"ModelMetaclass._collect_bases_data   s    $ #"u
:< 	GD$	*t9/D""74#D#I#I#KL!!$"5"56"))$*E*EF	G J(:::rG   EThe `__fields__` attribute is deprecated, use `model_fields` instead.)categoryc                N    t        j                  dt               | j                  S )Nr   )r;   r<   DeprecationWarningr   rA   s    rF   
__fields__zModelMetaclass.__fields__   s     
 	]_qr   rG   )NT)r   rH   r   tuple[type[Any], ...]r   dict[str, Any]ra   zPydanticGenericMetadata | Noner   boolr   r   rJ   type)r   rH   rJ   r   )rp   r   r   r   rJ   zMapping[str, object])r   r   rJ   r   )r   r   rJ   z6tuple[set[str], set[str], dict[str, ModelPrivateAttr]])rJ   dict[str, FieldInfo])rL   rM   rN   r|   typingTYPE_CHECKINGr   classmethodr   r   staticmethodrt   propertyr   r   r   rP   rQ   s   @rF   rU   rU   H   s     IM48|N|N %|N "	|N
 (F|N .2|N |N 
|N| 	' % %c ; ; OZs! !rG   rU   c                    i }| j                   j                         D ]#  \  }}|j                         }|t        us|||<   % t	        | d|       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.
    __pydantic_private__N)r_   r   get_defaultr   object_setattr)rA   	__contextpydantic_privater   private_attrdefaults         rF   rY   rY      s_     "99??A -l**,++%,T"- 4/1ABrG   c                Z    d| v r| d   S ddl m} 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.r]   r   r2   N)r}   r3   r    r]   )r   r   r3   r]   s       rF   ry   ry     s?    I%*++ .u6GHOi777 8rG   c           
        |t         z   }i }| j                  di       }d|v sd| v rt        d      t               }t	        | j                               D ]  \  }}	|dk(  rt        |	t              r1|	j                  | d   k(  r|	j                  j                  | d         rNt        |	|      s|	j                  j                  dk(  r|j                  |       t        |	t              rI|j                  d      rt        d	|d
      t        |      rt        dd|z   d|d
      |	||<   | |= t        |	t               r2t        |      s'|j#                  d      xs d}
t        d|
d|d
      |j                  d      r3t%        |      r(||vst'        ||         rRt)        |	      ||<   | |= f||v rl||vsr||v rt+        d|dd      t        |	t               rt+        d|dd      t+        d| d|	d| dd       |j                         D ]J  \  }}t%        |      s||vs||vst'        |      r(||vs-t-        |dd      dk7  s>t)               ||<   L |S )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.
    __annotations____root__zUTo define root models, use `pydantic.RootModel` rather than a field called '__root__'rW   rM   rN   	functools__zXPrivate attributes must not use dunder names; use a single underscore prefix instead of rm   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']`.N)r4   r9   r   r   listr   r:   r   rM   rN   
startswithrE   addr   	NameErrorr#   r   lstripr$   r,   r   r   r~   )r   rx   base_class_varsbase_class_fieldsall_ignored_typesr   raw_annotationsignored_namesvar_namevaluesuggested_nameann_nameann_types                rF   rw   rw     s   4 &568mm$5r:O_$
i(?opp!eM	 12 :%~%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.k/RZB[6\/:5/I"8,h'(_,,,'XL )] ^1 
 E9-'XL(CDKk  (?zUI V,,4: 6jk :	 k:x .335 	9(%h/ 22-) 11,5D+6=x(	9 rG   c                b    d| v ry t        |d      }|d t        j                  hv r
dd}|| d<   y y )N__hash__c                    t        | j                        t        t        | j                  j	                                     z   S rf   )hashrE   r   r   valuesr   s    rF   	hash_funcz(set_default_hash_func.<locals>.hash_func  s-    '$uT]]5I5I5K/L*MMMrG   )rA   r   rJ   int)r    rI   r   )r   r   base_hash_funcr   s       rF   r{   r{     sA    Y-eZ@N$00	N !*	* 1rG   c                $   t        |       }t        | ||||      \  }}|| _        | j                  j	                  |       |D ]K  }| j
                  j                  |d      }|"|j                  t        us5t        | ||j                         M y)a.  Collect and set `cls.model_fields` and `cls.__class_vars__`.

    Args:
        cls: BaseModel or dataclass.
        bases: Parents of the class, generally `cls.__bases__`.
        config_wrapper: The config wrapper instance.
        types_namespace: Optional extra namespace to look for types in.
    )typevars_mapN)
r'   r"   r   r^   r   r_   popr   r   setattr)	r   r   r   rs   r   fieldsr   rB   r   s	            rF   r   r     s     *#.L-c5./htuFJCj) 
+ **..q$76G!GCEMM*
+rG   )rr   c                  t        |       }t        |||      }t        t        |j                  d      |d      }|j
                  rt        | |       y	 | j                  | |      }|j                  |       }
|j                  |      }t        t        |            }t        |      rt        | |       yt        |      x| _        }t#        ||
|j$                        | _        t)        ||
      | _        d| _        t/        dt1        | j2                  | j4                  |            | _        y# t        $ r(}	|r t        | |d|	j                   d       Y d}	~	yd}	~	w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.
        types_namespace: Optional extra namespace to look for types in.

    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_moder8   NT__signature__)r'   r%   r*   r   generate_schemadefer_buildr)   __get_pydantic_core_schema__r   r   core_configcollect_definitionsr!   r   r   r   r   r   plugin_settingsr   r   __pydantic_serializer__r   r.   generate_model_signaturer   r   r   )r   r   r   rr   rs   r   
gen_schemahandlerschemaer  s              rF   r   r     s]   6 *#.LJ +
**NG !!X&11#w? !,,S1K++F3F!"<V"DEFv&X& -A,HHC 6!8nNlNl!mC"26;"GC $C '1#,,@P@PR`aC 3 ' X166(!}5	s   D- -	E6EEc                   ddl m}m}m} ddlm}  ||       j                  j                         }i }d}	d}
 ||dd      D ]Q  }|j                  dk(  r|j                  t              }|j                  |j                  u r|}	C|||j                  <   S |	r|j                  }|j                         D ]  \  }}t!        |j"                  t$              r|j"                  }n|}||v s||v r8t'        |      s|rt'        |      r|}nd	}
V|j)                         ri nd
|j+                  d      i} |||j,                  fd|j/                         i|||<    |j0                  dk(  rd	}
|	ry|
rwd|j2                  fd|j                  fg}|D cg c]  }|j                  |j                  f c}|k(  rd}n|	j                  }||v r
|dz  }||v r
|	j                  |      ||<    |t5        |j                               d      S c c}w )zGenerate signature for model based on its fields.

    Args:
        init: The class init.
        fields: The model fields.
        config_wrapper: The config wrapper instance.

    Returns:
        The model signature.
    r   )	Parameterr1   	signature)isliceNFr   r   )
annotationTr   )call_default_factoryr  allow__pydantic_self__data
extra_datar   )r   )rb   return_annotation)inspectr  r1   r  	itertoolsr  rb   r   r  replacer   kindVAR_KEYWORDr   populate_by_namer   r:   aliasrH   r/   is_requiredr   KEYWORD_ONLYrebuild_annotationextraPOSITIONAL_OR_KEYWORDr   )initr   r   r  r1   r  r  present_paramsmerged_paramsvar_kw
use_var_kwparamallow_names
field_namefield
param_namer   default_model_signaturepvar_kw_names                       rF   r  r    s,    87 t_//668N*,MFJ40 * u$MMSM1E::***F$)ejj!* $55!' 	J%++s+"[[
'
]*jM.I&z2#6z#B!+J!%J ,,.RY@Q@Qgl@Q@m4nF(1I22)?D?W?W?Y)]c)M*%%	, w&
* !)"A"ABY**+#
 '55QVVQVV59PP&K !++K V#3K V#%+^^^%Ek"]%9%9%; <PTUU 6s   Hc                      e Zd Zy)_PydanticWeakRefN)rL   rM   rN   rc   rG   rF   r0  r0  N  s    rG   r0  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   r0  r   )dresultrB   rC   proxys        rF   r   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   r:   r0  )r2  r3  rB   rC   s       rF   r   r   f  sX    yF	 1a)*A}q	F1I MrG   )rA   r3   r   r   rJ   rK   )r   r   r   r   rJ   zCallable[..., Any] | None)
r   r   rx   r   r   set[str]r   r6  rJ   zdict[str, ModelPrivateAttr])r   r   r   r   rJ   rK   )
r   type[BaseModel]r   r   r   r   rs   r   rJ   rK   )r   r7  r   rH   r   r   rr   r   rs   dict[str, Any] | NonerJ   r   )r"  zCallable[..., None]r   r   r   r   rJ   r1   )r2  r8  rJ   r8  )brO   
__future__r   _annotationsr   r;   weakrefabcr   r   r   typesr   r   r   r	   r
   pydantic_corer   r   typing_extensionsr   r   errorsr   r   r   r   r   r   r   plugin._schema_validatorr   r   _configr   _core_utilsr   r   r   _decoratorsr   r   r   r    _discriminated_unionr!   _fieldsr"   r#   r$   _generate_schemar%   	_genericsr&   r'   _mock_val_serr(   r)   _schema_generation_sharedr*   _typing_extrar+   r,   r-   _utilsr.   r/   _validate_callr0   r   r  r1   r}   r3   r   r   r   r   r4   r   rI   __setattr__r   r   r6   rU   rY   ry   rw   r{   r   r   r  ReferenceTyper0  r   r   rc   rG   rF   <module>rP     s   ( 2       2 2 = = C D D > 0 " b b  7 Y Y , F 6 C W W 7 /	!  3 "  ##
)$ 
) TUHEq!W q! Fq!hC"	jj(j j  	j
 !jZ*+	+!6+HU+hv+	+F G	GG "G
 G +G 
GTMV
MV';MVMZMVMV`	w,, 	(rG   