o
    h^1                     @  sX  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mZ ddl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mZ erlddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" 		dDdEddZ#G dd deZ$dFd"d#Z%e	dd$dGd&d'Z&dd(dHd3d4Z'dId8d9Z(dd(dJd<d=Z)dKd@dAZ*dKdBdCZ+dS )LzmPrivate logic related to fields (the `Field()` function and `FieldInfo` class), and arguments to `Annotated`.    )annotationsN)copy)	lru_cache)TYPE_CHECKINGAny)PydanticUndefined   )_typing_extra)ConfigWrapper)Representation)get_cls_type_hints_lenientget_type_hintsis_classvaris_finalvarBaseMetadata   	FieldInfo	BaseModel)StandardDataclass)DecoratorInfosFobjr   localnsdict[str, Any] | Noneinclude_extrasboolreturndict[str, Any]c                 C  sH   t | dd}d}|rztj| j}W n	 ty   Y nw t| |||dS )a  Gets type hints for an object by inferring the global namespace.

    It uses the `typing.get_type_hints`, The only thing that we do here is fetching
    global namespace from `obj.__module__` if it is not `None`.

    Args:
        obj: The object to get its type hints.
        localns: The local namespaces.
        include_extras: Whether to recursively include annotation metadata.

    Returns:
        The object type hints.
    
__module__N)globalnsr   r   )getattrsysmodules__dict__KeyErrorr   )r   r   r   module_namer!    r(   P/var/www/html/ai/venv/lib/python3.10/site-packages/pydantic/_internal/_fields.pyget_type_hints_infer_globalns   s   r*   c                   @  s   e Zd ZdZdZdS )PydanticMetadataz0Base class for annotation markers like `Strict`.r(   N)__name__r    __qualname____doc__	__slots__r(   r(   r(   r)   r+   8   s    r+   metadatar   c                  K  s
   t  | S )zCreate a new `_PydanticGeneralMetadata` class with the given metadata.

    Args:
        **metadata: The metadata to add.

    Returns:
        The new `_PydanticGeneralMetadata` class.
    )_general_metadata_cls)r0   r(   r(   r)   pydantic_general_metadata>   s   
	r2   )maxsizetype[BaseMetadata]c                  C  s"   ddl m}  G dd dt| }|S )zCDo it this way to avoid importing `annotated_types` at import time.r   r   c                   @  s   e Zd ZdZdddZdS )z7_general_metadata_cls.<locals>._PydanticGeneralMetadataz,Pydantic general metadata like `max_digits`.r0   r   c                 S  s
   || _ d S N)r%   )selfr0   r(   r(   r)   __init__R   s   
z@_general_metadata_cls.<locals>._PydanticGeneralMetadata.__init__N)r0   r   )r,   r    r-   r.   r7   r(   r(   r(   r)   _PydanticGeneralMetadataO   s    r8   )annotated_typesr   r+   )r   r8   r(   r(   r)   r1   J   s   r1   )typevars_mapclstype[BaseModel]basestuple[type[Any], ...]config_wrapperr
   types_namespacer:   dict[Any, Any] | None%tuple[dict[str, FieldInfo], set[str]]c                  s  ddl m} t| |}| jdi }i }t }	| D ];\ }
 dkr%q|jD ]N} |rv|D ](}t	| rYddl
m} t||rH |jv sYtd  dt|  d| d	q1t fd
d|jD }td  d| d| dt q(t|
r|	  qt|
t|  tr|	  qt sq| jr dkrtd dt| di d}|D ]0}dd t|rt |ndD }t	| r||u rq |v rqtd  d|j dt qzt|  t}|tu rtW n= ty+    |v r||
}n(i }| jddd D ]}| t|di  q |v r$t!|  }n||
}Y nw |"|
|}zt#|   W n
 tyC   Y nw | jd } |j$v rSt%d|| < q|ri|& D ]	}|'|| q_||	fS )a[  Collect the fields of a nascent pydantic model.

    Also collect the names of any ClassVars present in the type hints.

    The returned value is a tuple of two items: the fields dict, and the set of ClassVar names.

    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_map: A dictionary mapping type variables to their concrete types.

    Returns:
        A tuple contains fields and class variables.

    Raises:
        NameError:
            - If there is a conflict between a field name and protected namespaces.
            - If there is a field other than `root` in `RootModel`.
            - If a field shadows an attribute in the parent model.
    r   r   __annotations__model_configr   zField "z" conflicts with member z of protected namespace "z".c                 3  s    | ]
}  |s|V  qd S r5   
startswith).0xann_namer(   r)   	<genexpr>   s    

z'collect_model_fields.<locals>.<genexpr>z)" has conflict with protected namespace "z_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = z`.rootzUnexpected field with name z4; only 'root' is allowed as a field of a `RootModel`__pydantic_generic_metadata__originc                 S  s   h | ]}|j qS r(   name)rG   fieldr(   r(   r)   	<setcomp>   s    z'collect_model_fields.<locals>.<setcomp>r(   zField name "z"" shadows an attribute in parent "z"; Nmodel_fields__pydantic_decorators__z0you can't override a field with a computed field)(fieldsr   r   r%   getsetitemsprotected_namespacesrF   hasattrmainr   
issubclassrT   	NameErrorr"   tuplewarningswarnUserWarningr   add_is_finalvar_with_default_valr   is_valid_field_name__pydantic_root_model__dataclassesis_dataclassr-   AttributeErrorfrom_annotation	__bases__updater   from_annotated_attributedelattrcomputed_fields
ValueErrorvaluesapply_typevars_map)r;   r=   r?   r@   r:   r   
type_hintsr   rV   
class_varsann_typeprotected_namespacebr   valid_namespacesgeneric_originbasedataclass_fieldsdefault
field_infomodel_fields_lookuprH   
decoratorsrQ   r(   rI   r)   collect_model_fieldsX   s   












r   type_	type[Any]valc                 C  sJ   ddl m} t| sdS |tu rdS t||r#|jtu r#|jd u r#dS dS )Nr   r   FT)rV   r   r   r   
isinstancer|   default_factory)r   r   r   r(   r(   r)   rd      s   rd   type[StandardDataclass]dict[str, FieldInfo]c                C  s   ddl m} i }| j}tt| }| D ]S\}}t|j||}	t	|	r&q|j
s6|jtjkr6|jtjkr6qt|j|rI|jjrAq||	|j}
n||	|}
|
||< |
jturhtt| ||
|rht| ||
j q|rx| D ]}||| qo|S )a  Collect the fields of a dataclass.

    Args:
        cls: dataclass.
        types_namespace: Optional extra namespace to look for types in.
        typevars_map: A dictionary mapping type variables to their concrete types.

    Returns:
        The dataclass fields.
    r   r   )rV   r   __dataclass_fields__dictvarsrY   r	   eval_type_lenienttyper   initr|   rg   MISSINGr   r   init_varrm   r   r"   setattrrq   rr   )r;   r@   r:   r   rV   r{   cls_localnsrJ   dataclass_fieldru   r}   rQ   r(   r(   r)   collect_dataclass_fields   s4   r   rP   strc                 C  s   |  d S )N_rE   rO   r(   r(   r)   re   -  s   re   c                 C  s   |  do
|  d S )Nr   __rE   rO   r(   r(   r)   is_valid_privateattr_name1  s   r   )NF)r   r   r   r   r   r   r   r   )r0   r   r   r   )r   r4   )r;   r<   r=   r>   r?   r
   r@   r   r:   rA   r   rB   )r   r   r   r   r   r   )r;   r   r@   r   r:   rA   r   r   )rP   r   r   r   ),r.   
__future__r   _annotationsrg   r#   r`   r   	functoolsr   typingr   r   pydantic_corer    r	   _configr
   _reprr   r   r   r   r   r9   r   rV   r   r\   r   _dataclassesr   _decoratorsr   r*   r+   r2   r1   r   rd   r   re   r   r(   r(   r(   r)   <module>   sD    
 

5