U
    nËj®  ã                   @   s<  U 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l/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZDmEZE d dlFmGZGmHZH d dlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` e�r8d dlambZb d dl"mcZc d dlFmdZd d dlImeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm eddd�ZndZoedƒZpeeqe7f ddœdd „Zreseeegetf  d!œd"d#„ZuevewexeyfZzeed$f e{d%< efez Z|eed$f e{d&< d'Z}e!d(e6fd)�G d*d+„ d+eƒƒZ~ej€Z�G d,d„ deWe~d-�Z‚d(Z}eddeƒddd.œeqeee(  deqeeqd/f eeqef eed d0œd1d2„ƒZ„edeƒddd3œeqeee(  eed eed d$f f eqeeqd/f eeqef eed d0œd4d2„ƒZ„ddeƒdddd5œeqeee(  eded eed d$f f eqeeqd/f eeqef eeeqd$f  eed d6œ	d7d2„Z„eƒ Z…d>ee‚ d8d9ed8d:ee. f d;œd<d=„Z†dS )?é    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   ú4/tmp/pip-unpacked-wheel-zvl9l234/pydantic/v1/main.pyÚvalidate_custom_root_typea   s    rh   )Úfrozenrb   c                 C   s   t tdœ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_functiong   s    z-generate_hash_function.<locals>.hash_function)r   Úint)ri   rq   rf   rf   rg   Úgenerate_hash_functionf   s    rs   .ÚANNOTATED_FIELD_UNTOUCHED_TYPESÚUNTOUCHED_TYPESFT)Zkw_only_defaultZfield_specifiersc                       s4   e Zd Ze‡ fdd„ƒZeedœ‡ fdd„Z‡  ZS )ÚModelMetaclassc           (         sh  i }t }i }g g  }}	i }
i }| dd¡}t|tƒr:|hnt|ƒ}tƒ }d }t|ƒD ]t}trTt|tƒrT|tkrT| 	t
|jƒ¡ t|j|ƒ}t|j|ƒ}||j7 }|	|j7 }	| 	|j¡ | 	|j¡ |j}qTˆ dd¡}dd„ t|ƒD ƒ}‡fdd„ˆ ¡ |@ D ƒ}| d	¡}|�r |�r td
ƒ‚t||f|Ž}tt|ƒ|ƒ}t|ƒ}| ¡ D ]6}| |¡ | |j¡}|�rL|j 	|¡ |  ¡  �qLt!||ƒ t"‰t#t$dœ‡fdd„}| d¡| d¡fdk�rðt%| di ¡| dd ¡ƒ}| &¡ D ]ä\}}t'|ƒ�r | (|¡ nÄt)|| |t*¡ƒ�r | (|¡ n¤t+|ƒ�r¨t,||ƒ | |t*¡}t-t.|ƒƒ�rVt/|ƒn|f}||ƒ�rˆ|t0k�rˆt1dd„ |D ƒƒ�sˆ�qât2j3|||| |¡|d�||< n||k�râ|j4�rât5ƒ |
|< �qât6|j7 ‰| &¡ D �]\}}||k�oö||ƒ }t|t8ƒ�r4t9|ƒ�s*t:d|› d|› d|› d�ƒ‚||
|< n¸|j4�r\t9|ƒ�r\|�r\t5|d�|
|< n�t+|ƒ�rÚ||k�rÚ|�rÚt,||ƒ t2j3||| |t*¡| |¡|d�}||k�rät;|j<|| j<ƒ�rÎ|| j<|_<ntd|› d|› d�ƒ‚|||< �qÚt=|k} | �rt>|ƒ | ?¡  |j@�r$tAtB|j@ƒ}!ntC}!tD|ƒ\}"}#|d k�rHtE|jFƒ}||
 ¡ B dhB ‰ ||dd„ | &¡ D ƒ�ptd dd„ | &¡ D ƒ�pŠd |jGtH||" dd „ d!�tH|	|# d"d „ d!�i tI|!ƒ| ||
–||
 ¡ B ||d#œ‡ fd$d„| &¡ D ƒ–}$tJƒ jK| |||$fˆŽ}%tLd%tM|%jN||ƒƒ|%_O|�r&|% P¡  | &¡ D ]4\}}&||$k�r.tQ|&d&d ƒ}'tR|'ƒ�r.|'|%|ƒ �q.|%S )'NÚ	__slots__rf   Z__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 )NZ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__c                 s   s   | ]}t t|ƒtƒV  qd S rk   )rJ   r;   r   )r|   Z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   s&   i | ]\}}|j jd k	r||j j“qS rk   )Ú
field_infoÚexclude©r|   r�   Úfieldrf   rf   rg   r�   ÿ   s      c                 S   s&   i | ]\}}|j jd k	r||j j“qS rk   )r”   Úincluder–   rf   rf   rg   r�     s      c                 S   s   | j S rk   ©r…   r†   rf   rf   rg   Ú<lambda>
  ó    z(ModelMetaclass.__new__.<locals>.<lambda>)Zname_factoryc                 S   s
   | d j S )Nrc   r™   )Zskip_on_failure_and_vrf   rf   rg   rš     r›   )Ú
__config__Ú
__fields__Ú__exclude_fields__Ú__include_fields__Ú__validators__Ú__pre_root_validators__Ú__post_root_validators__Ú__schema_cache__Ú__json_encoder__Ú__custom_root_type__Ú__private_attributes__rw   Ú__hash__Ú__class_vars__c                    s   i | ]\}}|ˆ kr||“qS rf   rf   )r|   Únrƒ   )Úexclude_from_namespacerf   rg   r�     s       Ú__signature__Ú__set_name__)Sr   Ú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   Z
set_configZget_validatorsr�   r�   Zpopulate_validatorsr"   rt   r   Úboolr?   Úitemsr<   Úaddr/   r.   rH   rN   r>   r;   r:   r7   Úanyr+   ZinferZunderscore_attrs_are_privater-   ru   Zkeep_untouchedr,   rI   Ú	NameErrorrJ   Útype_rB   rh   Zcheck_for_unusedÚjson_encodersr   r0   r1   r   rs   ri   Ú
validatorsrM   ÚstaticmethodÚsuperÚ__new__rC   rG   Ú__init__r«   Ú__try_update_forward_refs__ÚgetattrÚcallable)(Zmcsr�   ÚbasesÚ	namespacer€   ra   r‘   r¾   Zpre_root_validatorsZpost_root_validatorsZprivate_attributesZbase_private_attributesÚslotsZ
class_varsZ	hash_funcÚbaseZresolve_forward_refsZallowed_config_kwargsZconfig_kwargsZconfig_from_namespaceZvgÚfZextra_validatorsrˆ   ÚannotationsZann_nameZann_typerŽ   Zallowed_typesÚvar_nameZcan_be_changedÚinferredZ_custom_root_typeZjson_encoderZ
pre_rv_newZpost_rv_newZnew_namespaceÚclsÚobjÚset_name©rm   )rª   r€   r‡   rg   rÁ   z   s$   


þ





ÿþÿýû

ÿ


û
ÿ

ÿÿþþ
æå

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Ô   *  s    z ModelMetaclass.__instancecheck__)	r…   r‰   rŠ   r   rÁ   r   r·   rÔ   Ú__classcell__rf   rf   rÑ   rg   rv   x   s    0rv   c                   @   s¦  e Zd ZU e�r0i 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!eddœdd„Z"e#dd„ ƒZ$ddœdd„Z%dddœd d!„Z&ddœd"d#„Z'dddddddd$œee(d%  ee(d%  eee eeed&d'œd(d)„Z)ddddddddd*d+œ	ee(d%  ee(d%  eee eeeeeegef  eeed,œd-d.„Z*e+eed/œd0d1„ƒZ,e+ed2 ed2d3œd4d5„ƒZ-e+dd6ddd7œed2 e.eee/ed2d8œd9d:„ƒZ0e+dd6ddd7œed2 e(ee1f eee/ed2d;œd<d=„ƒZ2e+ed2 ed2d3œd>d?„ƒZ3e+dred2 ed@ ed2dAœdBdC„ƒZ4d2d&d@ed2dDœdEdF„Z5dddddGœd2ee(d%  ee(d%  ed& ed2dHœdIdJ„Z6e+d*e7feed&dKœdLdM„ƒZ8e+d*e7dNœeeeedOœdPdQ„ƒZ9e+dRdœdSdT„ƒZ:e+ed2 ed2dUœdVdW„ƒZ;e+ed2 ee<d3œdXdY„ƒZ=e+e#eeeee(d%  ee(d%  eeeedZœ	d[d\„ƒƒZ>e+edd]œd^d_„ƒZ?e+edd]œd`da„ƒZ@dbdœdcdd„ZAdseeee(d%  ee(d%  eeedbdeœdfdg„ZBdtedh edh eed& eeCe  diœdjdk„ZDeedlœdmdn„ZEdodœdpdq„ZFdS )ur\   r�   NrŸ   rž   r    r¡   r¢   rœ   c                 C   s   | S rk   rf   )Úxrf   rf   rg   rš   @  r›   zBaseModel.<lambda>r¤   rU   r£   Fr¥   rO   r«   r¦   r¨   Ú__fields_set__)ro   rØ   Ú )Údatarb   c              
   K   sp   t | j|ƒ\}}}|r|‚zt| d|ƒ W n, tk
rV } ztdƒ|‚W 5 d}~X Y nX 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)Z__pydantic_self__rÚ   rp   Ú
fields_setÚvalidation_errorÚerf   rf   rg   rÂ   L  s    ÿþzBaseModel.__init__c                    sR  ˆ | j ksˆ tkrt| ˆ |ƒS | jjtjk	rTˆ | jkrTtd| j	j
› dˆ › d�ƒ‚�nî| jjrd| jjr|td| j	j
› d�ƒ‚�nÆˆ | jkr°| jˆ  jr°td| j	j
› dˆ › d�ƒ‚�n’| jj�r8| jˆ |i–}| jD ]V}z|| j	|ƒ}W qÎ tttfk
�r" } ztt|td�g| j	ƒ‚W 5 d }~X Y qÎX qÎ| j ˆ d ¡}|�r¤|jj�sVtd|j› d�ƒ‚‡ fdd	„| j ¡ D ƒ}|j||ˆ | j	d
�\}}|�rœt|g| j	ƒ‚n||ˆ < g }	| jD ]h\}
}|
�rÆ|	�rÆ�q®z|| j	|ƒ}W n< tttfk
�r } z|	 t|td�¡ W 5 d }~X Y nX �q®|	�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�   }  s       z)BaseModel.__setattr__.<locals>.<dictcomp>©râ   rÎ   ro   )r¦   rA   rÛ   rœ   Úextrar    Úallowr�   re   rm   r…   Zallow_mutationri   r¶   ÚfinalZvalidate_assignmentro   r¡   ÚAssertionErrorr$   r#   rB   r­   r”   r�   r¸   Úvalidater¢   ÚappendrØ   r¹   )rÕ   r�   rŽ   Z
new_valuesÚ	validatorÚexcZknown_fieldZdict_without_original_valueZerror_ÚerrorsÚskip_on_failurerf   rå   rg   Ú__setattr___  sN    ÿ

*
(
zBaseModel.__setattr__)rb   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 k	r||“qS rf   )r.   rã   rf   rf   rg   r�   œ  s       z*BaseModel.__getstate__.<locals>.<dictcomp>)ro   rØ   Ú__private_attribute_values__)r¦   ro   rØ   )rÕ   Zprivate_attrsrf   rò   rg   Ú__getstate__—  s
    ýzBaseModel.__getstate__)Ústaterb   c                 C   sJ   t | d|d ƒ t | d|d ƒ | di ¡ ¡ D ]\}}t | ||ƒ q0d S )Nro   rØ   ró   )rÛ   r­   r¸   )rÕ   rõ   r�   rŽ   rf   rf   rg   Ú__setstate__Ÿ  s    zBaseModel.__setstate__c                 C   s4   | j  ¡ D ]$\}}| ¡ }|tk	r
t| ||ƒ q
d S rk   )r¦   r¸   Úget_defaultr.   rÛ   )rÕ   r�   Zprivate_attrr’   rf   rf   rg   rÜ   ¥  s    z"BaseModel._init_private_attributes)r˜   r•   Úby_aliasÚskip_defaultsÚexclude_unsetÚexclude_defaultsÚexclude_none)rR   rW   rV   )r˜   r•   rø   rù   rú   rû   rü   rb   c             
   C   s>   |dk	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_dictrø   r˜   r•   rú   rû   rü   )ÚwarningsÚwarnrm   r…   ÚDeprecationWarningÚdictÚ_iter)rÕ   r˜   r•   rø   rù   rú   rû   rü   rf   rf   rg   r  «  s"    þùÿzBaseModel.dictT)	r˜   r•   rø   rù   rú   rû   rü   ÚencoderÚmodels_as_dict)r˜   r•   rø   rù   rú   rû   rü   r  r  Údumps_kwargsrb   c       	      
   K   s~   |dk	r"t  | jj› d�t¡ |}tttgtf |p8| jƒ}t	| j
|	||||||d�ƒ}| jrf|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"rý   r’   )rÿ   r   rm   r…   r  r   r   r   r¤   r  r  r¥   rB   rœ   Ú
json_dumps)rÕ   r˜   r•   rø   rù   rú   rû   rü   r  r  r  rÚ   rf   rf   rg   ÚjsonÍ  s*    þùÿzBaseModel.json)rÏ   rb   c                 C   sX   | j rPt|tƒr| ¡ thks8t|tƒrH|j ¡ thkrH| jt jtkrPt|iS |S d 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Î   rÏ   rb   c              
   C   s€   |   |¡}t|tƒsvzt|ƒ}W nT ttfk
rt } z2t| j› d|jj› �ƒ}tt|t	d�g| ƒ|‚W 5 d }~X Y nX | f |ŽS )Nz expected dict not rá   )
r  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)rÎ   Úbr  r  r  r  rb   c             
   C   sd   zt |||||| jjd�}W n< tttfk
rX } ztt|td�g| ƒ‚W 5 d }~X Y nX |  	|¡S )N©r  r  r  r  Ú
json_loadsrá   )
r4   rœ   r  re   r¶   ÚUnicodeDecodeErrorr$   r#   rB   r  )rÎ   r  r  r  r  r  rÏ   rß   rf   rf   rg   Ú	parse_raw  s    
ú
&zBaseModel.parse_raw)rÎ   Úpathr  r  r  r  rb   c                C   s"   t |||||| jjd�}|  |¡S )Nr  )r3   rœ   r  r  )rÎ   r  r  r  r  r  rÏ   rf   rf   rg   Ú
parse_file'  s    
úzBaseModel.parse_filec                 C   sn   | j jstdƒ‚| jrt|in|  |¡}|  | ¡}t| |ƒ\}}}|rJ|‚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_orm;  s    
zBaseModel.from_ormrY   )rÎ   Ú_fields_setrp   rb   c                 K   s¬   |   | ¡}i }| j ¡ D ]P\}}|jr@|j|kr@||j ||< q||krV|| ||< q|js| ¡ ||< q| |¡ t|d|ƒ |dkr”t	| 
¡ ƒ}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Úrequiredr÷   r³   rÛ   r¯   rµ   rÜ   )rÎ   r  rp   r  Zfields_valuesr�   r—   rf   rf   rg   Ú	constructI  s     

zBaseModel.construct)rÕ   rp   rÝ   Údeeprb   c                C   sp   |rt |ƒ}| j}| |¡}t|d|ƒ t|d|ƒ | jD ]0}t| |tƒ}|tk	r:|r^t |ƒ}t|||ƒ q:|S )Nro   rØ   )r   rm   rÁ   rÛ   r¦   rÄ   r.   )rÕ   rp   rÝ   r"  rÎ   r  r�   rŽ   rf   rf   rg   Ú_copy_and_set_valuesa  s    

zBaseModel._copy_and_set_values)r˜   r•   r³   r"  )rÕ   r˜   r•   r³   r"  rb   c                C   sN   t | jdd||dd�f|pi Ž}|r4| 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þ   rø   r˜   r•   rú   ©r"  )r  r  rØ   rµ   r¯   r#  )rÕ   r˜   r•   r³   r"  rp   rÝ   rf   rf   rg   Úcopys  s    ÿþ
zBaseModel.copy)rø   Úref_templaterb   c                 C   s<   | j  ||f¡}|d k	r|S t| ||d�}|| j ||f< |S )N©rø   r&  )r£   r­   r6   )rÎ   rø   r&  ÚcachedÚsrf   rf   rg   Úschema“  s    zBaseModel.schemar'  )rø   r&  r  rb   c                K   s.   ddl m} | jj| j||d�fd|i|—ŽS )Nr   )r1   r'  r’   )Úpydantic.v1.jsonr1   rœ   r  r*  )rÎ   rø   r&  r  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Î   rŽ   rb   c              
   C   sæ   t || ƒrl| jj}d }|dkr2t dt¡ |r2d}|dkr@d}n|dkrLd}|d krX|S |j|j|j|d�S |  	|¡}t |t
ƒrŠ| f |ŽS | jjrœ|  |¡S zt
|ƒ}W n. ttfk
rÖ } ztƒ |‚W 5 d }~X Y nX | f |ŽS d S )N>   ÚshallowÚnoner"  zJ`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'Fr.  r"  Tr$  )r„   rœ   Úcopy_on_model_validationrÿ   r   r  r#  ro   rØ   r  r  r  r  r¶   re   r&   )rÎ   rŽ   r0  Z	deep_copyZvalue_as_dictrß   rf   rf   rg   rë   ª  s6    
 ÿ



zBaseModel.validatec                 C   s   t |tƒr|S | j |¡S rk   )r„   rD   rœ   Zgetter_dictr
  rf   rf   rg   r  Ñ  s    
zBaseModel._decompose_class)	rƒ   rþ   rø   r˜   r•   rú   rû   rü   rb   c	                    s  t |tƒrFˆr8|jˆ ˆˆ||ˆd�}	t|	kr4|	t S |	S |j||d�S |rTt||ƒnd ‰|rft||ƒnd ‰t |tƒr˜‡ ‡‡‡‡‡‡‡fdd„| ¡ D ƒS t|ƒrâ‡ ‡‡‡‡‡‡‡fdd„t|ƒD ƒ}
t	|j
ƒrØ|j
|
Ž S | 
|
¡S t |tƒ�rtˆjddƒ�r|jS |S d S )	N)rø   rú   rû   r˜   r•   rü   )r˜   r•   c                    s\   i | ]T\}}ˆrˆ  |¡sˆr(ˆ |¡r|ˆj|ˆˆ ˆˆˆoDˆ |¡ˆoPˆ |¡ˆd �“qS )©rþ   rø   rú   rû   r˜   r•   rü   ©Zis_excludedZis_includedÚ
_get_valueÚfor_element)r|   Zk_Úv_©rø   rÎ   rû   rü   rú   rþ   Úvalue_excludeÚvalue_includerf   rg   r�   ø  s     
 
ô øz(BaseModel._get_value.<locals>.<dictcomp>c                 3   s\   | ]T\}}ˆrˆ  |¡sˆr&ˆ |¡rˆj|ˆˆ ˆˆˆo@ˆ |¡ˆoLˆ |¡ˆd �V  qdS )r1  Nr2  )r|   Úir5  r6  rf   rg   rŒ   	  s    
 
ôøz'BaseModel._get_value.<locals>.<genexpr>Zuse_enum_valuesF)r„   r\   r  rB   r%  rF   r¸   rK   Ú	enumerater=   rm   r   rÄ   r‚   rŽ   )rÎ   rƒ   rþ   rø   r˜   r•   rú   rû   rü   Zv_dictZseq_argsrf   r6  rg   r3  ×  s8    
ú
õõzBaseModel._get_value)Úlocalnsrb   c                 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Ã   !  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__0  s    zBaseModel.__iter__)rþ   rø   r˜   r•   rú   rû   rü   rb   c                 c   sŒ  |d k	s| j d k	r t | j |¡}|d k	s2| jd k	rDtj| j|dd�}| j|||d�}|d kr„|s„|s„|s„|s„|s„| j ¡ E d H  d S |d k	r–t| |ƒnd }	|d k	r¬t| |ƒnd }
| j ¡ D ]Ì\}}|d k	rÒ||ksº|rà|d kràqº|�r| j |¡}t	|ddƒ�st	|dt
ƒ|k�rqº|�r4|| jk�r4| j| j}n|}|�sJ|
�sJ|	�r|| j||||
�ob|
 |¡|	�op|	 |¡|||d�}||fV  qºd S )NT)Z	intersect)r˜   r•   rú   r   r’   rý   )rž   rF   ÚmergerŸ   Ú_calculate_keysro   r¸   r�   r­   rÄ   Ú_missingr  r3  r4  )rÕ   rþ   rø   r˜   r•   rú   rû   rü   Zallowed_keysr7  r8  Z	field_keyrƒ   Zmodel_fieldZdict_keyrf   rf   rg   r  6  sH      ÿ ø
zBaseModel._iterrW   )r˜   r•   rú   r³   rb   c                 C   sx   |d kr|d kr|dkrd S |r,| j  ¡ }n
| j ¡ }|d k	rJ|| ¡ M }|rZ|| ¡ 8 }|rt|dd„ | ¡ D ƒ8 }|S )NFc                 S   s   h | ]\}}t  |¡r|’qS rf   )rF   Zis_truerã   rf   rf   rg   r~   …  s     
 z,BaseModel._calculate_keys.<locals>.<setcomp>)rØ   r%  ro   rµ   r¸   )rÕ   r˜   r•   rú   r³   rµ   rf   rf   rg   rA  n  s    
zBaseModel._calculate_keys)Úotherrb   c                 C   s*   t |tƒr|  ¡ | ¡ kS |  ¡ |kS d S rk   )r„   r\   r  )rÕ   rC  rf   rf   rg   Ú__eq__‰  s    
zBaseModel.__eq__rX   c                    s   ‡ fdd„ˆ j  ¡ D ƒS )Nc                    s8   g | ]0\}}|t kr|ˆ jk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__)N)FFNNFFF)N)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‚   rw   Ú__doc__rÂ   r   rñ   rô   rö   rÜ   r   r  r  Úclassmethodr  r  r8   r2   r  r   r  r  r!  r#  r%  r5   r*  r,  r-  rë   rD   r  r3  rÃ   r=  r?  r  r   rA  rD  rG  rf   rf   rf   rg   r\   6  sZ  

7	÷

ö%õ

ó-

ùøù
ø ú

ù  ÿ  þ	&

öH       ø

÷= û
ú)Ú	metaclass)rœ   Ú__base__r‰   r    Ú__cls_kwargs__rS   )Ú__model_namerœ   rK  r‰   r    rL  Úfield_definitionsrb   c                K   s   d S rk   rf   ©rM  rœ   rK  r‰   r    rL  rN  rf   rf   rg   r^   š  s    r^   )rœ   r‰   r    rL  c                K   s   d S rk   rf   rO  rf   rf   rg   r^   ¨  s    )rœ   rK  r‰   r    rL  rw   )	rM  rœ   rK  r‰   r    rL  rw   rN  rb   c                K   sp  |dk	rt  dt¡ |dk	r>|dk	r,tdƒ‚t|tƒsN|f}nttd tƒf}|pTi }i }i }	| 	¡ D ]ˆ\}
}t
|
ƒsŠt  d|
› d�t¡ t|tƒrÐz|\}}W qÚ tk
rÌ } ztdƒ|‚W 5 d}~X Y qÚX n
d| }}|ræ||	|
< |||
< qf|	|dœ}|�r
| |¡ | |¡ |�r(t|tƒ|d	< t|ƒ}t| ||d
�\}}}||k	�rV||d< | |¡ || ||f|Ž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   )rM  rœ   rK  r‰   r    rL  rw   rN  ra   rË   Úf_nameZf_defZf_annotationZf_valuerß   rÇ   Úresolved_basesÚmetaÚnsrP  rf   rf   rg   r^   ¶  sN    

ÿü






rV   rQ   rY   )ÚmodelÚ
input_datarÎ   rb   c                 C   sÂ  i }g }t ƒ }t ƒ }| j}|jtjk	}|p,| }	| jD ]`}
z|
|	|ƒ}W q4 tttfk
r’ } z(i t ƒ t	t
|td�g|	ƒf W Y ¢  S d}~X Y q4X q4| j ¡ D �]\}}| |jt¡}d}|tkrâ|jrâ|jrâ| |jt¡}d}|tk�r0|j�r| t
tƒ |jd�¡ q | ¡ }|j�sX|j�sX|||< q n(| |¡ |�rX| |�rP|jn|j¡ |j|||j|	d�\}}t|t
ƒ�rˆ| |¡ q t|tƒ�r | |¡ q |||< q |�r0t|tƒ�rÊ|  ¡ | }n| !¡ | }|�r0||O }|jtj"k�r|D ]}|| ||< �qön$t#|ƒD ]}| t
t$ƒ |d�¡ �q| j%D ]f\}}
|�rN|�rN�q6z|
|	|ƒ}W n< tttfk
�r˜ } z| t
|td�¡ W 5 d}~X Y nX �q6|�r´||t	||	ƒfS ||dfS dS )z(
    validate data against a model.
    rá   NFTræ   )&r¯   rœ   rç   r    Úignorer¡   re   r¶   rê   r$   r#   rB   r�   r¸   r­   r  rB  Zallow_population_by_field_namer  r�   r   rì   r(   r÷   Zvalidate_allZvalidate_alwaysr¹   rë   r„   ÚlistÚextendrD   Z
extra_keysrµ   rè   Úsortedr'   r¢   )rW  rX  rÎ   rp   rï   Z
names_usedrÝ   r‘   Zcheck_extraZcls_rí   rî   r�   r—   rŽ   Z
using_namer5  Zerrors_rç   rÊ   rð   rf   rf   rg   r_     sp    
8


(r_   )N)‡rÿ   Úabcr   r%  r   Úenumr   Ú	functoolsr   Úpathlibr   Útypesr   r   r	   Útypingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztyping_extensionsr   Zpydantic.v1.class_validatorsr   r   r   r   Zpydantic.v1.configr   r    r!   r"   Zpydantic.v1.error_wrappersr#   r$   Zpydantic.v1.errorsr%   r&   r'   r(   Zpydantic.v1.fieldsr)   r*   r+   r,   r-   r.   r/   r+  r0   r1   Zpydantic.v1.parser2   r3   r4   Zpydantic.v1.schemar5   r6   Zpydantic.v1.typesr7   r8   Zpydantic.v1.typingr9   r:   r;   r<   r=   r>   r?   r@   Z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ÚtyperI  r¿   rt   r‹   ru   r±   rv   Úobjectrñ   rÛ   r\   r…   r^   rB  r_   rf   rf   rf   rg   Ú<module>   sÆ    H$	(
@, ;    eù


÷ù


÷ø


öM ÿ  þ