
    h-i^1                       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r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" 	 	 d	 	 	 	 	 	 	 d dZ# G d de      Z$d!dZ% e	d      d"d       Z&dd	 	 	 	 	 	 	 	 	 	 	 d#dZ'd$dZ(dd	 	 	 	 	 	 	 d%dZ)d&dZ*d&dZ+y)'zmPrivate 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)DecoratorInfosc                    t        | dd      }d}|r	 t        j                  |   j                  }t        | |||      S # t        $ r Y w xY w)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)globalnslocalnsinclude_extras)getattrsysmodules__dict__KeyErrorr   )objr   r   module_namer   s        YD:\DhanshreeandTeamAI\Github\ai_code\venv\Lib\site-packages\pydantic/_internal/_fields.pyget_type_hints_infer_globalnsr'      s[    $ #|T2K&*H	{{;/88H #'R`aa  		s   ? 	A
Ac                      e Zd ZdZdZy)PydanticMetadataz0Base class for annotation markers like `Strict`. N)__name__r   __qualname____doc__	__slots__r*       r&   r)   r)   8   s
    :Ir/   r)   c                 "     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)metadatas    r&   pydantic_general_metadatar3   >   s     # "8,,r/   )maxsizec                 2    ddl m}   G d dt        |       }|S )zCDo it this way to avoid importing `annotated_types` at import time.r   r   c                      e Zd ZdZddZy)7_general_metadata_cls.<locals>._PydanticGeneralMetadataz,Pydantic general metadata like `max_digits`.c                    || _         y N)r"   )selfr2   s     r&   __init__z@_general_metadata_cls.<locals>._PydanticGeneralMetadata.__init__R   s	    $DMr/   N)r2   r   )r+   r   r,   r-   r;   r*   r/   r&   _PydanticGeneralMetadatar7   O   s
    :	%r/   r<   )annotated_typesr   r)   )r   r<   s     r&   r1   r1   J   s     -%#3\ % $#r/   )typevars_mapc                  ddl m} t        | |      }| j                  j	                  di       }i }t               }	|j                         D ]R  \  }
dk(  r|j                  D ]  }j                  |      s|D ]N  }t        |      sddl
m} t        ||      r|j                  v r1t        d dt        |       d| d	       t!        fd
|j                  D              }t#        j$                  d d| d| dt&                t)        |
      r|	j+                         t-        |
t        | t.                    r|	j+                         t1              s| j2                  rdk7  rt        dd      t        | di       j	                  d      }|D ]  }t5        j6                  |      rt5        j                   |      ndD ch c]  }|j8                   }}t        |      sS||u rX|v r]t#        j$                  d d|j:                   dt&                	 t        | t.              }|t.        u rt<        	  |j>                  |
|      }	 tA        |        | j                  d   }|jJ                  v rtM        d      ||<   U |r'|jO                         D ]  }|jQ                  ||        ||	fS c c}w # t<        $ r Y mw xY w# t<        $ rt |v r |jB                  |
      }nZi }| jD                  ddd   D ]  }|jG                  t        |di                |v rtI        |         }n |jB                  |
      }Y w xY w)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  F   K   | ]  }j                  |      r|  y wr9   
startswith).0xann_names     r&   	<genexpr>z'collect_model_fields.<locals>.<genexpr>   s$      -#FahNaNabcNd#Fs   !!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__originr*   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_namespacesrD   hasattrmainr   
issubclassrM   	NameErrorr   tuplewarningswarnUserWarningr   add_is_finalvar_with_default_valr   is_valid_field_name__pydantic_root_model__dataclassesis_dataclassnamer,   AttributeErrorfrom_annotated_attributedelattrfrom_annotation	__bases__updater   computed_fields
ValueErrorvaluesapply_typevars_map)clsbasesconfig_wrappertypes_namespacer>   r   
type_hintsr   rO   
class_varsann_typeprotected_namespacebr   valid_namespacesgeneric_originbasefielddataclass_fieldsdefault
field_infomodel_fields_lookuprF   
decoratorsrG   s                           @r&   collect_model_fieldsr   X   s   < #+CAJ ,,""#4b9K#%F5J(..0(~% #1#F#F""#67Aq(+4 *1i 8X=W"+")(3KGTUW_L`Ka";<O;PPR!T#   (- -#1#F#F- ($ MM!(+TUhTi jDDTCUUWY $	 $G* x NN8$(73J[3\]NN8$"8,&&8v+=-h\9mn  !&ErJNNxXDEPE]E]^bEc););D)Aik)k )ku

)k    tX&>)// "8*,NtO`O`Naade $	c8->?G++$$ ,* <;;HgNJX& &)\\2K%L
z111OPP%xE 1H ]]_E$$\?C % :y \ " 3  	E;&6Y66x@
 =?#tt,A'..wq."/MN -22 "&&9(&C!DJ
 ";!:!:8!DJ#	Es+   K2K#&K	K K #A:M M c                    ddl m} t        |       sy|t        u ryt	        ||      r|j
                  t        u r|j                  yy)Nr   r   FT)rO   r   r   r   
isinstancer{   default_factory)type_valr   s      r&   r]   r]      sC    "u	!	!	C	#8I)IcNaNaNir/   c                  ddl m} i }| j                  }t        t	        |             }|j                         D ]   \  }}t        j                  |j                  ||      }	t        |	      r4|j                  s;|j                  t        j                  k(  r|j                  t        j                  k(  r{t        |j                  |      r5|j                  j                   r |j"                  |	|j                        }
n |j"                  |	|      }
|
||<   |
j                  t$        ust        t'        | ||
      |      s
t)        | ||
j                         # |r'|j+                         D ]  }|j-                  ||        |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   )rO   r   __dataclass_fields__dictvarsrR   r
   eval_type_lenienttyper   initr{   r`   MISSINGr   r   init_varrd   r   r   setattrrk   rl   )rm   rp   r>   r   rO   rz   cls_localnsrG   dataclass_fieldrs   r|   ry   s               r&   collect_dataclass_fieldsr      sW    ##%F585M5MtCy/K%5%;%;%=!/ 22?3G3GZefx   $$'';+>+>>//;3F3FF o--y9&&//;;;HoF]F]^J;;;HoVJ%x%66:gcS[]gFhjs;tC:#5#563 &>6 ]]_E$$\?C % Mr/   c                &    | j                  d       S )N_rC   rb   s    r&   r^   r^   -  s    s###r/   c                L    | j                  d      xr | j                  d       S )Nr   __rC   r   s    r&   is_valid_privateattr_namer   1  s"    ??3=(=$==r/   )NF)r$   r   r   dict[str, Any] | Noner   boolreturnzdict[str, Any])r2   r   r   r   )r   ztype[BaseMetadata])rm   ztype[BaseModel]rn   ztuple[type[Any], ...]ro   r   rp   r   r>   dict[Any, Any] | Noner   z%tuple[dict[str, FieldInfo], set[str]])r   z	type[Any]r   r   r   r   )rm   ztype[StandardDataclass]rp   r   r>   r   r   zdict[str, FieldInfo])rb   strr   r   ),r-   
__future__r   _annotationsr`   r    rY   r   	functoolsr   typingr   r   pydantic_corer    r
   _configr   _reprr   r   r   r   r   r=   r   rO   r   rU   r   _dataclassesr   _decoratorsr   r'   r)   r3   r1   r   r]   r   r^   r   r*   r/   r&   <module>r      s'   s 2  
    % +  " ! _ _," /+
 &* b	b"b b 	b:~ 	- 4
$ 
$& +/P	P P "P +	P (P +Pf
 tx2	 23H2[p22j$>r/   