o
    í6Wj�²  ã                   @   s|  U 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	 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mZmZmZmZmZmZmZmZmZmZ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)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZAmBZBmCZC d dlDmEZEmFZF d dlGmHZHmIZI d dlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR d dlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa e�r d dlbmcZc d dl#mdZd d dlGmeZe d dlJmfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn eddd�ZodZpedƒZqdeere8f ddfd d!„Zsd"etdeeegeuf  fd#d$„ZvewexeyezfZ{eed%f e|d&< efe{ Z}eed%f e|d'< d(Z~e"d)e7fd*�G d+d,„ d,eƒƒZe€j�Z‚G d-d„ deXed.�Zƒd)Z~e dde„ddd/œd0erd1eee)  d2dd3erd4eerd5f d6eeref d7eded fd8d9„ƒZ…e de„ddd:œd0erd1eee)  d2eed eed d%f f d3erd4eerd5f d6eeref d7eded fd;d9„ƒZ…dde„dddd<œd0erd1eee)  d2eded eed d%f f d3erd4eerd5f d6eeref d=eeerd%f  d7eded fd>d9„Z…e€ƒ Z†	dGd?eeƒ d@dAdBdCdedAdDee/ f fdEdF„Z‡dS )Hé    N)ÚABCMeta)Údeepcopy)ÚEnum)Úpartial)ÚPath)ÚFunctionTypeÚprepare_classÚresolve_bases)ÚTYPE_CHECKINGÚAbstractSetÚAnyÚCallableÚClassVarÚDictÚListÚMappingÚOptionalÚTupleÚTypeÚTypeVarÚUnionÚcastÚno_type_checkÚoverload)Údataclass_transform)ÚValidatorGroupÚextract_root_validatorsÚextract_validatorsÚinherit_validators)Ú
BaseConfigÚExtraÚinherit_configÚprepare_config)ÚErrorWrapperÚValidationError)ÚConfigErrorÚ	DictErrorÚ
ExtraErrorÚMissingError)ÚMAPPING_LIKE_SHAPESÚFieldÚ
ModelFieldÚModelPrivateAttrÚPrivateAttrÚ	UndefinedÚis_finalvar_with_default_val)Úcustom_pydantic_encoderÚpydantic_encoder)ÚProtocolÚ	load_fileÚload_str_bytes)Údefault_ref_templateÚmodel_schema)ÚPyObjectÚStrBytes)ÚAnyCallableÚget_argsÚ
get_originÚis_classvarÚis_namedtupleÚis_unionÚresolve_annotationsÚupdate_model_forward_refs)ÚDUNDER_ATTRIBUTESÚROOT_KEYÚClassAttributeÚ
GetterDictÚRepresentationÚ
ValueItemsÚgenerate_model_signatureÚis_valid_fieldÚis_valid_private_nameÚlenient_issubclassÚsequence_likeÚsmart_deepcopyÚunique_listÚvalidate_field_name)Ú	Signature)ÚValidatorListDict)Ú	ModelOrDc)	ÚAbstractSetIntStrÚAnyClassMethodÚCallableGeneratorÚDictAnyÚ
DictStrAnyÚMappingIntStrAnyÚReprArgsÚSetStrÚTupleGeneratorÚModelÚ	BaseModel)Úbound)r\   Úcreate_modelÚvalidate_modelÚ_TÚfieldsÚreturnc                 C   s   t | ƒdkrtt› d�ƒ‚d S )Né   z" cannot be mixed with other fields)ÚlenÚ
ValueErrorrB   )ra   © rf   ú_/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/pydantic/v1/main.pyÚvalidate_custom_root_typeb   s   ÿrh   Úfrozenc                 C   s   dt dtfdd„}| r|S d S )NÚself_rb   c                 S   s   t | jƒt t| j ¡ ƒƒ S ©N)ÚhashÚ	__class__ÚtupleÚ__dict__Úvalues)rj   rf   rf   rg   Úhash_functionh   s   z-generate_hash_function.<locals>.hash_function)r   Úint)ri   rq   rf   rf   rg   Úgenerate_hash_functiong   s   rs   .ÚANNOTATED_FIELD_UNTOUCHED_TYPESÚUNTOUCHED_TYPESFT)Úkw_only_defaultÚfield_specifiersc                       s6   e Zd Ze‡ fdd„ƒZdedef‡ fdd„Z‡  ZS )ÚModelMetaclassc           -         sê  i }t }i }g g }}	i }
i }| dd¡}t|tƒr|hnt|ƒ}tƒ }d }t|ƒD ]:}trdt|tƒrd|tkrd| 	t
|jƒ¡ t|j|ƒ}t|j|ƒ}||j7 }|	|j7 }	| 	|j¡ | 	|j¡ |j}q*ˆ dd¡}dd„ t|ƒD ƒ}‡fdd„ˆ ¡ |@ D ƒ}| d	¡}|rŽ|rŽtd
ƒ‚t||fi |¤Ž}tt|ƒ|ƒ}t|ƒ}| ¡ D ]}| |¡ | |j¡}|r¿|j 	|¡ |  ¡  q¦t!||ƒ t"‰dt#dt$f‡fdd„}| d¡| d¡fdk�r*t%j&dk�rd|v rî|d }n$ddl'm(}m)}m*} ||ƒ}|d u�r	|||j+d�}n	i }n| di ¡}t,|| dd ¡ƒ}| -¡ D ]u\}}t.|ƒ�r/| /|¡ �qt0|| |t1¡ƒ�r@| /|¡ �qt2|ƒ�r…t3||ƒ | |t1¡} t4t5|ƒƒ�r[t6|ƒn|f}!|| ƒ�rt|t7k�rtt8dd„ |!D ƒƒ�st�qt9j:|| || |¡|d�||< �q||v�r“|j;�r“t<ƒ |
|< �qt=|j> ‰| -¡ D ]‹\}"} |"|v�o«|| ƒ }#t| t?ƒ�rËt@|"ƒ�sÅtAd|"› d|"› d|"› d�ƒ‚| |
|"< �qž|j;�ràt@|"ƒ�rà|#�ràt<| d�|
|"< �qžt2|"ƒ�r(|"|v�r(|#�r(t3||"ƒ t9j:|"| | |"t1¡| |"¡|d�}$|"|v �r$tB|$jC||" jCƒ�r||" jC|$_Cntd|› d |"› d!�ƒ‚|$||"< �qžtD|v }%|%�r5tE|ƒ | F¡  |jG�rDtHtI|jGƒ}&ntJ}&tK|ƒ\}'}(|d u �rVtL|jMƒ}||
 ¡ B dhB ‰ ||d"d„ | -¡ D ƒ�pld d#d„ | -¡ D ƒ�pwd |jNtO||' d$d%„ d&�tO|	|( d'd%„ d&�i tP|&ƒ|%i |¥|
¥||
 ¡ B ||d(œ‡ fd)d„| -¡ D ƒ¥})tQƒ jR| |||)fi ˆ¤Ž}*tSd*tT|*jU||ƒƒ|*_Vt�sÍtW|*di ƒ X¡  |�rÔ|* Y¡  | -¡ D ]\}}+||)v�rñtW|+d+d ƒ},tZ|,ƒ�rñ|,|*|ƒ �qØ|*S ),NÚ	__slots__rf   Ú__resolve_forward_refs__Tc                 S   s$   h | ]}|  d ¡r| d ¡s|’qS )Ú__)Ú
startswithÚendswith©Ú.0Úkeyrf   rf   rg   Ú	<setcomp>•   s    ýýÿz)ModelMetaclass.__new__.<locals>.<setcomp>c                    s   i | ]}|ˆ   |¡“qS rf   )Úpopr~   )Úkwargsrf   rg   Ú
<dictcomp>š   s    z*ModelMetaclass.__new__.<locals>.<dictcomp>ÚConfigzYSpecifying config in two places is ambiguous, use either Config attribute or class kwargsÚvrb   c                    s   t | ˆ ƒp
| jjdkS )NÚcython_function_or_method)Ú
isinstancerm   Ú__name__©r†   )Úuntouched_typesrf   rg   Úis_untouched¯   s   z,ModelMetaclass.__new__.<locals>.is_untouchedÚ
__module__Ú__qualname__)zpydantic.mainr\   )é   é   Ú__annotations__r   )ÚFormatÚcall_annotate_functionÚ!get_annotate_from_class_namespace)Úformatc                 s   s   � | ]
}t t|ƒtƒV  qd S rk   )rJ   r;   r   )r   Úallowed_typerf   rf   rg   Ú	<genexpr>Ñ   s   € 
ÿz)ModelMetaclass.__new__.<locals>.<genexpr>)ÚnameÚvalueÚ
annotationÚclass_validatorsÚconfigzPrivate attributes "zF" must not be a valid field name; Use sunder or dunder names, e. g. "_z" or "__z__")ÚdefaultzThe type of Ú.zo differs from the new default value; if you wish to change the type of this field, please use a type annotationc                 S   ó&   i | ]\}}|j jd ur||j j“qS rk   )Ú
field_infoÚexclude©r   r˜   Úfieldrf   rf   rg   r„     ó     c                 S   rŸ   rk   )r    Úincluder¢   rf   rf   rg   r„     r¤   c                 S   s   | j S rk   ©r‰   rŠ   rf   rf   rg   Ú<lambda>  s    z(ModelMetaclass.__new__.<locals>.<lambda>)Úname_factoryc                 S   s
   | d j S )Nrc   r¦   )Úskip_on_failure_and_vrf   rf   rg   r§     s   
 )Ú
__config__Ú
__fields__Ú__exclude_fields__Ú__include_fields__Ú__validators__Ú__pre_root_validators__Ú__post_root_validators__Ú__schema_cache__Ú__json_encoder__Ú__custom_root_type__Ú__private_attributes__ry   Ú__hash__Ú__class_vars__c                    s   i | ]\}}|ˆ vr||“qS rf   rf   )r   Únr†   )Úexclude_from_namespacerf   rg   r„   (  ó    Ú__signature__Ú__set_name__)[r   Úgetrˆ   ÚstrÚsetÚreversedÚ_is_base_model_class_definedÚ
issubclassr\   ÚupdaterL   r«   r!   rª   r   r®   r¯   r°   r´   r¶   rµ   r‚   ÚdirÚkeysÚ	TypeErrorr   r   rp   Ú
set_configÚget_validatorsr˜   r›   Úpopulate_validatorsr"   rt   r   ÚboolÚsysÚversion_infoÚannotationlibr’   r“   r”   Ú
FORWARDREFr?   Úitemsr<   Úaddr/   r.   rH   rN   r>   r;   r:   r7   Úanyr+   ÚinferÚunderscore_attrs_are_privater-   ru   Úkeep_untouchedr,   rI   Ú	NameErrorrJ   Útype_rB   rh   Úcheck_for_unusedÚjson_encodersr   r0   r1   r   rs   ri   Ú
validatorsrM   ÚstaticmethodÚsuperÚ__new__rC   rG   Ú__init__rº   ÚgetattrÚclearÚ__try_update_forward_refs__Úcallable)-Úmcsr˜   ÚbasesÚ	namespacerƒ   ra   rœ   rØ   Úpre_root_validatorsÚpost_root_validatorsÚprivate_attributesÚbase_private_attributesÚslotsÚ
class_varsÚ	hash_funcÚbaseÚresolve_forward_refsÚallowed_config_kwargsÚconfig_kwargsÚconfig_from_namespaceÚvgÚfÚextra_validatorsrŒ   Úraw_annotationsr’   r“   r”   ÚannotateÚannotationsÚann_nameÚann_typer™   Úallowed_typesÚvar_nameÚcan_be_changedÚinferredÚ_custom_root_typeÚjson_encoderÚ
pre_rv_newÚpost_rv_newÚnew_namespaceÚclsÚobjÚset_name©rm   )r¸   rƒ   r‹   rg   rÛ   {   sJ  


€þ

€





ÿ
ÿÿû
€

ÿÿÿ

û
ÿ€

ÿÿþþ

æå


€zModelMetaclass.__new__Úinstancerb   c                    s   t |dƒo
tƒ  |¡S )z|
        Avoid calling ABC _abc_subclasscheck unless we're pretty sure.

        See #3829 and python/cpython#92810
        r°   )ÚhasattrrÚ   Ú__instancecheck__)Úselfr  r  rf   rg   r  A  s   z ModelMetaclass.__instancecheck__)	r‰   r�   rŽ   r   rÛ   r   rÉ   r  Ú__classcell__rf   rf   r  rg   rx   y   s
     Frx   c                   @   s6  e Zd ZU er—i Zeeeef  e	d< dZ
eeeeef   e	d< dZeeeeef   e	d< i Zeeeef  e	d< eee  e	d< eeeeef   e	d< eZeee  e	d< d	d
„ Zeeegef  e	d< i Zed e	d< dZee e	d< ed e	d< eeeef  e	d< ee e	d< eƒ Zee e	d< eZdZ dZ!deddfdd„Z"e#dd„ ƒZ$ddd„Z%d€d d!„Z&d�d"d#„Z'dddddddd$œd%ee(d&  d'ee(d&  d(ed)ee d*ed+ed,edd-fd.d/„Z)ddddddddd0d1œ	d%ee(d&  d'ee(d&  d(ed)ee d*ed+ed,ed2eeegef  d3ed4edefd5d6„Z*e+d7edefd8d9„ƒZ,e+d:ed; d7edd;fd<d=„ƒZ-e+dd>ddd?œd:ed; d@e.dAedBedCe/dDedd;fdEdF„ƒZ0e+dd>ddd?œd:ed; dGe(ee1f dAedBedCe/dDedd;fdHdI„ƒZ2e+d:ed; d7edd;fdJdK„ƒZ3e+d‚d:ed; dLedM dNedd;fdOdP„ƒZ4dQd;dNd-dRdMdSedd;f
dTdU„Z5dddddVœdQd;d%ee(d&  d'ee(d&  dWed- dSedd;fdXdY„Z6e+d0e7fd(edZedd-fd[d\„ƒZ8e+d0e7d]œd(edZed4edefd^d_„ƒZ9e+dƒdadb„ƒZ:e+d:ed; dcedd;fddde„ƒZ;e+d:ed; d7ede<fdfdg„ƒZ=e+e#dhedied(ed%ee(d&  d'ee(d&  d*ed+ed,edefdjdk„ƒƒZ>e+dleddfdmdn„ƒZ?e+dleddfdodp„ƒZ@d„drds„ZA							d…died(ed%ee(d&  d'ee(d&  d*ed+ed,eddqfdtdu„ZB	d‚d%edv d'edv d*edWed- deeCe  f
dwdx„ZDdyedefdzd{„ZEd†d}d~„ZFdS )‡r\   r«   Nr­   r¬   r®   r¯   r°   rª   c                 C   s   | S rk   rf   )Úxrf   rf   rg   r§   W  s    zBaseModel.<lambda>r²   rU   r±   Fr³   rO   rº   r´   r¶   Ú__fields_set__)ro   r  Ú Údatarb   c              
   K   sf   t | j|ƒ\}}}|r|‚zt| d|ƒ W n ty& } ztdƒ|‚d}~ww t| d|ƒ |  ¡  dS )z»
        Create a new model by parsing and validating input data from keyword arguments.

        Raises ValidationError if the input data cannot be parsed to form a valid model.
        ro   zYModel values must be a dict; you may not have returned a dictionary from a root validatorNr  )r_   rm   Úobject_setattrrÅ   Ú_init_private_attributes)Ú__pydantic_self__r  rp   Ú
fields_setÚvalidation_errorÚerf   rf   rg   rÜ   c  s   ÿþ€ÿzBaseModel.__init__c                    s*  ˆ | j v s	ˆ tv rt| ˆ |ƒS | jjtjur(ˆ | jvr(td| j	j
› dˆ › d�ƒ‚| jjr0| jjr:td| j	j
› d�ƒ‚ˆ | jv rR| jˆ  jrRtd| j	j
› dˆ › d�ƒ‚| jj�ri | j¥ˆ |i¥}| jD ]$}z|| j	|ƒ}W qc tttfy‡ } ztt|td�g| j	ƒ‚d }~ww | j ˆ d ¡}|rÃ|jjsžtd|j› d�ƒ‚‡ fdd	„| j ¡ D ƒ}|j||ˆ | j	d
�\}}|r¿t|g| j	ƒ‚||ˆ < g }	| jD ]/\}
}|
rÑ|	rÑqÈz|| j	|ƒ}W qÈ tttfy÷ } z|	 t|td�¡ W Y d }~qÈd }~ww |	�rt|	| j	ƒ‚t| d|ƒ n|| jˆ < | j ˆ ¡ d S )Nú"z" object has no field "z3" is immutable and does not support item assignmentz
" object "z2" field is final and does not support reassignment©Úlocz8" has allow_mutation set to False and cannot be assignedc                    s   i | ]\}}|ˆ kr||“qS rf   rf   ©r   Úkr†   ©r˜   rf   rg   r„   ”  r¹   z)BaseModel.__setattr__.<locals>.<dictcomp>©r  r  ro   )r´   rA   r  rª   Úextrar    Úallowr«   re   rm   r‰   Úallow_mutationri   rÅ   ÚfinalÚvalidate_assignmentro   r¯   ÚAssertionErrorr$   r#   rB   r¼   r    r˜   rÎ   Úvalidater°   Úappendr  rÏ   )r  r˜   r™   Ú
new_valuesÚ	validatorÚexcÚknown_fieldÚdict_without_original_valueÚerror_ÚerrorsÚskip_on_failurerf   r  rg   Ú__setattr__v  sV   ÿ

€ÿ€ÿ
zBaseModel.__setattr__c                    s.   ‡ fdd„ˆ j D ƒ}ˆ jˆ jdd„ |D ƒdœS )Nc                 3   s    � | ]}|t ˆ |tƒfV  qd S rk   )rÝ   r.   )r   r  ©r  rf   rg   r—   ¯  s   € z)BaseModel.__getstate__.<locals>.<genexpr>c                 S   s   i | ]\}}|t ur||“qS rf   )r.   r  rf   rf   rg   r„   ³  r¹   z*BaseModel.__getstate__.<locals>.<dictcomp>)ro   r  Ú__private_attribute_values__)r´   ro   r  )r  Úprivate_attrsrf   r,  rg   Ú__getstate__®  s
   ýzBaseModel.__getstate__Ústatec                 C   sJ   t | d|d ƒ t | d|d ƒ | di ¡ ¡ D ]
\}}t | ||ƒ qd S )Nro   r  r-  )r  r¼   rÎ   )r  r0  r˜   r™   rf   rf   rg   Ú__setstate__¶  s
   ÿzBaseModel.__setstate__c                 C   s4   | j  ¡ D ]\}}| ¡ }|turt| ||ƒ qd S rk   )r´   rÎ   Úget_defaultr.   r  )r  r˜   Úprivate_attrr�   rf   rf   rg   r  ¼  s   €ýz"BaseModel._init_private_attributes)r¥   r¡   Úby_aliasÚskip_defaultsÚexclude_unsetÚexclude_defaultsÚexclude_noner¥   )rR   rW   r¡   r4  r5  r6  r7  r8  rV   c             
   C   s>   |durt  | jj› d�t¡ |}t| jd||||||d�ƒS )z
        Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

        NzF.dict(): "skip_defaults" is deprecated and replaced by "exclude_unset"T©Úto_dictr4  r¥   r¡   r6  r7  r8  )ÚwarningsÚwarnrm   r‰   ÚDeprecationWarningÚdictÚ_iter)r  r¥   r¡   r4  r5  r6  r7  r8  rf   rf   rg   r>  Â  s"   þùÿzBaseModel.dictT)	r¥   r¡   r4  r5  r6  r7  r8  ÚencoderÚmodels_as_dictr@  rA  Údumps_kwargsc       	      
   K   s~   |durt  | jj› d�t¡ |}tttgtf |p| jƒ}t	| j
|	||||||d�ƒ}| jr3|t }| jj|fd|i|
¤ŽS )zë
        Generate a JSON representation of the model, `include` and `exclude` arguments as per `dict()`.

        `encoder` is an optional function to supply as `default` to json.dumps(), other arguments as per `json.dumps()`.
        NzF.json(): "skip_defaults" is deprecated and replaced by "exclude_unset"r9  r�   )r;  r<  rm   r‰   r=  r   r   r   r²   r>  r?  r³   rB   rª   Ú
json_dumps)r  r¥   r¡   r4  r5  r6  r7  r8  r@  rA  rB  r  rf   rf   rg   Újsonä  s*   þùÿzBaseModel.jsonr  c                 C   sT   | j r(t|tƒr| ¡ thkst|tƒr$|j ¡ thkr$| jt jtv r(t|iS |S rk   )	r³   rˆ   r>  rÄ   rB   r\   r«   Úshaper)   ©r  r  rf   rf   rg   Ú_enforce_dict_if_root  s   ÿÿzBaseModel._enforce_dict_if_rootr  r[   c              
   C   sz   |   |¡}t|tƒs6zt|ƒ}W n% ttfy5 } zt| j› d|jj› �ƒ}tt|t	d�g| ƒ|‚d }~ww | di |¤ŽS )Nz expected dict not r  rf   )
rG  rˆ   r>  rÅ   re   r‰   rm   r$   r#   rB   )r  r  r  r%  rf   rf   rg   Ú	parse_obj  s   

€þzBaseModel.parse_objÚutf8)Úcontent_typeÚencodingÚprotoÚallow_pickleÚbrJ  rK  rL  rM  c             
   C   sZ   zt |||||| jjd�}W n tttfy' } z
tt|td�g| ƒ‚d }~ww |  	|¡S )N©rL  rJ  rK  rM  Ú
json_loadsr  )
r4   rª   rP  re   rÅ   ÚUnicodeDecodeErrorr$   r#   rB   rH  )r  rN  rJ  rK  rL  rM  r  r  rf   rf   rg   Ú	parse_raw'  s   

ú€ÿ
zBaseModel.parse_rawÚpathc                C   s"   t |||||| jjd�}|  |¡S )NrO  )r3   rª   rP  rH  )r  rS  rJ  rK  rL  rM  r  rf   rf   rg   Ú
parse_file>  s   
ú
zBaseModel.parse_filec                 C   sn   | j jstdƒ‚| jrt|in|  |¡}|  | ¡}t| |ƒ\}}}|r%|‚t|d|ƒ t|d|ƒ | 	¡  |S )Nz@You must have the config attribute orm_mode=True to use from_ormro   r  )
rª   Úorm_moder%   r³   rB   Ú_decompose_classrÛ   r_   r  r  )r  r  Úmrp   r  r  rf   rf   rg   Úfrom_ormR  s   
zBaseModel.from_ormÚ_fields_setrY   rp   c                 K   s¬   |   | ¡}i }| j ¡ D ](\}}|jr |j|v r ||j ||< q||v r+|| ||< q|js4| ¡ ||< q| |¡ t|d|ƒ |du rJt	| 
¡ ƒ}t|d|ƒ | ¡  |S )a  
        Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data.
        Default values are respected, but no other validation is performed.
        Behaves as if `Config.extra = 'allow'` was set since it adds all passed values
        ro   Nr  )rÛ   r«   rÎ   Ú	alt_aliasÚaliasÚrequiredr2  rÂ   r  r¾   rÄ   r  )r  rY  rp   rW  Úfields_valuesr˜   r£   rf   rf   rg   Ú	construct`  s"   
€
zBaseModel.constructr  r  Údeepc                C   sp   |rt |ƒ}| j}| |¡}t|d|ƒ t|d|ƒ | jD ]}t| |tƒ}|tur5|r/t |ƒ}t|||ƒ q|S )Nro   r  )r   rm   rÛ   r  r´   rÝ   r.   )r  rp   r  r_  r  rW  r˜   r™   rf   rf   rg   Ú_copy_and_set_valuesx  s   

€zBaseModel._copy_and_set_values)r¥   r¡   rÂ   r_  rÂ   c                C   sR   t | jdd||dd�fi |pi ¤Ž}|r| j| ¡ B }nt| jƒ}| j|||d�S )a  
        Duplicate a model, optionally choose which fields to include, exclude and change.

        :param include: fields to include in new model
        :param exclude: fields to exclude from new model, as with values this takes precedence over include
        :param update: values to change/add in the new model. Note: the data is not validated before creating
            the new model: you should trust this data
        :param deep: set to `True` to make a deep copy of the model
        :return: new model instance
        F)r:  r4  r¥   r¡   r6  ©r_  )r>  r?  r  rÄ   r¾   r`  )r  r¥   r¡   rÂ   r_  rp   r  rf   rf   rg   ÚcopyŠ  s   ÿþ
zBaseModel.copyÚref_templatec                 C   s<   | j  ||f¡}|d ur|S t| ||d�}|| j ||f< |S )N©r4  rc  )r±   r¼   r6   )r  r4  rc  ÚcachedÚsrf   rf   rg   Úschemaª  s   zBaseModel.schemard  c                K   s.   ddl m} | jj| j||d�fd|i|¤ŽS )Nr   )r1   rd  r�   )Úpydantic.v1.jsonr1   rª   rC  rg  )r  r4  rc  rB  r1   rf   rf   rg   Úschema_json³  s   ÿÿÿzBaseModel.schema_jsonrT   c                 c   s   � | j V  d S rk   )r!  )r  rf   rf   rg   Ú__get_validators__½  s   €zBaseModel.__get_validators__r™   c              
   C   sà   t || ƒr6| jj}d }|dvrt dt¡ |rd}|dkr d}n|dkr&d}|d u r,|S |j|j|j|d�S |  	|¡}t |t
ƒrG| di |¤ŽS | jjrP|  |¡S zt
|ƒ}W n ttfyh } ztƒ |‚d }~ww | di |¤ŽS )	N>   r_  ÚnoneÚshallowzJ`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'Frl  r_  Tra  rf   )rˆ   rª   Úcopy_on_model_validationr;  r<  r=  r`  ro   r  rG  r>  rU  rX  rÅ   re   r&   )r  r™   rm  Ú	deep_copyÚvalue_as_dictr  rf   rf   rg   r!  Á  s8   
ÿ


€ÿzBaseModel.validatec                 C   s   t |tƒr|S | j |¡S rk   )rˆ   rD   rª   Úgetter_dictrF  rf   rf   rg   rV  è  s   
zBaseModel._decompose_classr†   r:  c	                    s  t |tƒr#ˆr|jˆ ˆˆ||ˆd�}	t|	v r|	t S |	S |j||d�S |r*t||ƒnd ‰|r3t||ƒnd ‰t |tƒrL‡ ‡‡‡‡‡‡‡fdd„| ¡ D ƒS t|ƒrq‡ ‡‡‡‡‡‡‡fdd„t|ƒD ƒ}
t	|j
ƒrl|j
|
Ž S | 
|
¡S t |tƒr€tˆjddƒr€|jS |S )	N)r4  r6  r7  r¥   r¡   r8  )r¥   r¡   c                    s\   i | ]*\}}ˆrˆ  |¡sˆrˆ |¡r|ˆj|ˆˆ ˆˆˆo"ˆ |¡ˆo(ˆ |¡ˆd �“qS )©r:  r4  r6  r7  r¥   r¡   r8  ©Úis_excludedÚis_includedÚ
_get_valueÚfor_element)r   Úk_Úv_©r4  r  r7  r8  r6  r:  Úvalue_excludeÚvalue_includerf   rg   r„     s*    ôôóóøÿz(BaseModel._get_value.<locals>.<dictcomp>c                 3   s^   � | ]*\}}ˆrˆ  |¡sˆrˆ |¡rˆj|ˆˆ ˆˆˆo!ˆ |¡ˆo'ˆ |¡ˆd �V  qdS )rq  Nrr  )r   Úirx  ry  rf   rg   r—      s,   € ôôóóø
ÿz'BaseModel._get_value.<locals>.<genexpr>Úuse_enum_valuesF)rˆ   r\   r>  rB   rb  rF   rÎ   rK   Ú	enumerater=   rm   r   rÝ   r…   r™   )r  r†   r:  r4  r¥   r¡   r6  r7  r8  Úv_dictÚseq_argsrf   ry  rg   ru  î  s8   
ú
õõzBaseModel._get_valueÚlocalnsc                 K   s    t | | j ¡ | jj|tfƒ dS )z{
        Same as update_forward_refs but will not raise exception
        when forward references are not defined.
        N)r@   r«   rp   rª   r×   rÔ   ©r  r�  rf   rf   rg   rß   8  s    z%BaseModel.__try_update_forward_refs__c                 K   s   t | | j ¡ | jj|ƒ dS )z`
        Try to update ForwardRefs on fields based on this Model, globalns and localns.
        N)r@   r«   rp   rª   r×   r‚  rf   rf   rg   Úupdate_forward_refs@  s   zBaseModel.update_forward_refsrZ   c                 c   s   � | j  ¡ E dH  dS )z(
        so `dict(model)` works
        N©ro   rÎ   r,  rf   rf   rg   Ú__iter__G  s   €zBaseModel.__iter__c                 c   sz  � |d us
| j d urt | j |¡}|d us| jd ur#tj| j|dd�}| j|||d�}|d u rC|sC|sC|sC|sC|sC| j ¡ E d H  d S |d urLt| |ƒnd }	|d urWt| |ƒnd }
| j ¡ D ]\\}}|d urj||vsp|rq|d u rqq^|rˆ| j |¡}t	|ddƒsˆt	|dt
ƒ|krˆq^|r–|| jv r–| j| j}n|}|sž|
sž|	rµ| j||||
o©|
 |¡|	o¯|	 |¡|||d�}||fV  q^d S )NT)Ú	intersect)r¥   r¡   r6  r\  r�   r9  )r¬   rF   Úmerger­   Ú_calculate_keysro   rÎ   r«   r¼   rÝ   Ú_missingr[  ru  rv  )r  r:  r4  r¥   r¡   r6  r7  r8  Úallowed_keysrz  r{  Ú	field_keyr†   Úmodel_fieldÚdict_keyrf   rf   rg   r?  M  sH   €ÿø
çzBaseModel._iterrW   c                 C   sx   |d u r|d u r|du rd S |r| j  ¡ }n| j ¡ }|d ur%|| ¡ M }|r-|| ¡ 8 }|r:|dd„ | ¡ D ƒ8 }|S )NFc                 S   s   h | ]\}}t  |¡r|’qS rf   )rF   Úis_truer  rf   rf   rg   r�   œ  r¹   z,BaseModel._calculate_keys.<locals>.<setcomp>)r  rb  ro   rÄ   rÎ   )r  r¥   r¡   r6  rÂ   rÄ   rf   rf   rg   rˆ  …  s   
zBaseModel._calculate_keysÚotherc                 C   s&   t |tƒr|  ¡ | ¡ kS |  ¡ |kS rk   )rˆ   r\   r>  )r  r�  rf   rf   rg   Ú__eq__   s   
zBaseModel.__eq__rX   c                    s   ‡ fdd„ˆ j  ¡ D ƒS )Nc                    s8   g | ]\}}|t vr|ˆ jvsˆ j| jjr||f‘qS rf   )rA   r«   r    Úreprr  r,  rf   rg   Ú
<listcomp>§  s
     þz+BaseModel.__repr_args__.<locals>.<listcomp>r„  r,  rf   r,  rg   Ú__repr_args__¦  s   
þzBaseModel.__repr_args__)rb   rU   )r0  rU   rb   N)rb   Nrk   )rb   rT   )rb   rZ   )FFNNFFF)rb   rX   )Gr‰   r�   rŽ   r
   r«   r   r   r½   r+   r‘   r­   r   r   r   r¬   r®   r9   r   r   rÉ   r   rª   r   r²   r   r±   r³   r,   rY   r¾   r  r…   ry   Ú__doc__rÜ   r   r+  r/  r1  r  r   r>  rD  ÚclassmethodrG  rH  r8   r2   rR  r   rT  rX  r^  r`  rb  r5   rg  ri  rj  r!  rD   rV  ru  rß   rƒ  r…  r?  r   rˆ  r�  r“  rf   rf   rf   rg   r\   M  sÌ  
 

7

	÷
ý
üûúùø	÷

ö%õ
ý
üûúùø	÷
öõô
ó-

ùÿþüûúùøùÿ
þüûúùø&úÿ
ý
üûú
ù ÿÿÿÿþ	&þýü
û
úùø	÷
öH
øþý
ü
ûúùø	
÷=ûþýüû

ú)Ú	metaclass)rª   Ú__base__r�   r®   Ú__cls_kwargs__Ú__model_namerª   r—  r�   r®   rS   r˜  Úfield_definitionsc                K   ó   d S rk   rf   ©r™  rª   r—  r�   r®   r˜  rš  rf   rf   rg   r^   ±  ó   r^   )rª   r�   r®   r˜  c                K   r›  rk   rf   rœ  rf   rf   rg   r^   ¿  r�  )rª   r—  r�   r®   r˜  ry   ry   c                K   sb  |dur
t  dt¡ |dur|durtdƒ‚t|tƒs|f}nttd tƒf}|p*i }i }i }	| 	¡ D ]>\}
}t
|
ƒsEt  d|
› d�t¡ t|tƒrbz|\}}W n tya } ztdƒ|‚d}~ww d|}}|rm||	|
< |||
< q3|	|dœ}|r~| |¡ | |¡ |rŒt|tƒ|d	< t|ƒ}t| ||d
�\}}}||ur¢||d< | |¡ || ||fi |¤ŽS )a«  
    Dynamically create a model.
    :param __model_name: name of the created model
    :param __config__: config class to use for the new model
    :param __base__: base class for the new model to inherit from
    :param __module__: module of the created model
    :param __validators__: a dict of method names and @validator class methods
    :param __cls_kwargs__: a dict for class creation
    :param __slots__: Deprecated, `__slots__` should not be passed to `create_model`
    :param field_definitions: fields of the model (or extra fields if a base is supplied)
        in the format `<name>=(<type>, <default default>)` or `<name>=<default value>, e.g.
        `foobar=(str, ...)` or `foobar=123`, or, for complex use-cases, in the format
        `<name>=<Field>` or `<name>=(<type>, <FieldInfo>)`, e.g.
        `foo=Field(datetime, default_factory=datetime.utcnow, alias='bar')` or
        `foo=(str, FieldInfo(title='Foo'))`
    Nz.__slots__ should not be passed to create_modelzBto avoid confusion __config__ and __base__ cannot be used togetherr[   z3fields may not start with an underscore, ignoring "r  zœfield definitions should either be a tuple of (<type>, <default>) or just a default value, unfortunately this means tuples as default values are not allowed)r‘   r�   r…   )ÚkwdsÚ__orig_bases__)r;  r<  ÚRuntimeWarningr%   rˆ   rn   r   r   r\   rÎ   rH   re   rÂ   r!   r   r	   r   )r™  rª   r—  r�   r®   r˜  ry   rš  ra   rõ   Úf_nameÚf_defÚf_annotationÚf_valuer  rã   Úresolved_basesÚmetaÚnsrž  rf   rf   rg   r^   Í  sT   
€
ÿü€ÿ





ÚmodelÚ
input_datarV   r  rQ   rY   c                 C   s¢  i }g }t ƒ }t ƒ }| j}|jtju}|p| }	| jD ].}
z|
|	|ƒ}W q tttfyH } zi t ƒ t	t
|td�g|	ƒfW  Y d}~  S d}~ww | j ¡ D ]{\}}| |jt¡}d}|tu rn|jrn|jrn| |jt¡}d}|tu r‘|jr�| t
tƒ |jd�¡ qN| ¡ }|js�|js�|||< qNn| |¡ |r£| |rŸ|jn|j¡ |j|||j|	d�\}}t|t
ƒrº| |¡ qNt|tƒrÅ| |¡ qN|||< qN|�r	t|tƒrÙ|  ¡ | }n| !¡ | }|�r	||O }|jtj"u rø|D ]}|| ||< qînt#|ƒD ]}| t
t$ƒ |d�¡ qü| j%D ]4\}}
|�r|�r�qz|
|	|ƒ}W �q tttf�y@ } z| t
|td�¡ W Y d}~�qd}~ww |�rL||t	||	ƒfS ||dfS )z(
    validate data against a model.
    r  NFTr  )&r¾   rª   r  r    Úignorer¯   re   rÅ   r   r$   r#   rB   r«   rÎ   r¼   r[  r‰  Úallow_population_by_field_namerZ  r˜   r\  r"  r(   r2  Úvalidate_allÚvalidate_alwaysrÏ   r!  rˆ   ÚlistÚextendrD   Ú
extra_keysrÄ   r  Úsortedr'   r°   )r¨  r©  r  rp   r)  Ú
names_usedr  rœ   Úcheck_extraÚcls_r$  r%  r˜   r£   r™   Ú
using_namerx  Úerrors_r  rñ   r*  rf   rf   rg   r_     s|   
,€ÿ€




ÿ €ÿ
r_   rk   )ˆrÊ   r;  Úabcr   rb  r   Úenumr   Ú	functoolsr   Úpathlibr   Útypesr   r   r	   Útypingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   Úpydantic.v1.class_validatorsr   r   r   r   Úpydantic.v1.configr   r    r!   r"   Úpydantic.v1.error_wrappersr#   r$   Úpydantic.v1.errorsr%   r&   r'   r(   Úpydantic.v1.fieldsr)   r*   r+   r,   r-   r.   r/   rh  r0   r1   Úpydantic.v1.parser2   r3   r4   Úpydantic.v1.schemar5   r6   Úpydantic.v1.typesr7   r8   Úpydantic.v1.typingr9   r:   r;   r<   r=   r>   r?   r@   Úpydantic.v1.utilsrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   ÚinspectrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   Ú__all__r`   r½   rh   rÉ   rr   rs   ÚpropertyÚtyper•  rÙ   rt   r‘   ru   rÀ   rx   Úobjectr+  r  r\   r‰   r^   r‰  r_   rf   rf   rf   rg   Ú<module>   sú   
 H$	(@
,  Q    eùÿ
ýüû
ú
ùø	÷ùÿ
ýüû
ú
ùø	÷øÿ
ýüû
ú
ùø	÷

öMÿÿÿÿþ