o
    -wi,                     @  s  U d Z ddlm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mZmZ ddlZdd	lmZmZ erKdd
l
mZ G dd deZddddddddddd
ZdHddZedddId!d"ZeejZd#ed$< G d%d& d&eZG d'd( d(ed)ZG d*d+ d+Z ere neZ!d#ed,< erej"Z"ej#Z#ej$Z$ej%Z%dS d-dd.dJd8d9Z"dKd:d;Z#edLd>d?Z%edMdBd?Z%	dNdOdEd?Z%G dFdG dGZ$dS )Pz<Provides partial support for compatibility with Pydantic v1.    )annotationsN)	lru_cache)	signature)
attrgetter)TYPE_CHECKINGAnyCallableClassVarLiteraloverload   )IS_PYDANTIC_V2to_json)Protocolc                   @  s   e Zd ZU ed#ddZded	< d
ed< ded< ed$ddZed%ddZed%ddZed%ddZ	d&ddZ
d'ddZd(d d!Zd"S ))V1Modelvaluesdictby_aliasboolreturnc                 C     d S N )clsr   r   r   r   V/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/_pydantic/v1_compat.py_dump_json_vals      zV1Model._dump_json_valszClassVar[type]
__config__zClassVar[dict[str, Any]]
__fields__set[str]__fields_set__argsr   kwargsNonec                 O  r   r   r   r   r!   r"   r   r   r   update_forward_refs    r   zV1Model.update_forward_refsc                 O  r   r   r   r$   r   r   r   	construct"   r   zV1Model.constructc                 O  r   r   r   r$   r   r   r   	parse_obj$   r   zV1Model.parse_objc                 O  r   r   r   r$   r   r   r   	parse_raw&   r   zV1Model.parse_rawdict[str, Any]c                 K  r   r   r   selfr"   r   r   r   r   )       zV1Model.dictstrc                 K  r   r   r   r*   r   r   r   json*   r,   zV1Model.jsonc                 K  r   r   r   r*   r   r   r   copy+   r,   zV1Model.copyN)r   r   r   r   r   r   r!   r   r"   r   r   r#   r!   r   r"   r   r   r   )r"   r   r   r)   )r"   r   r   r-   )r"   r   r   r   )__name__
__module____qualname__classmethodr   __annotations__r%   r&   r'   r(   r   r.   r/   r   r   r   r   r      s"   
 

r   allow_population_by_field_nameanystr_loweranystr_strip_whitespaceanystr_upperkeep_untouchedmax_anystr_lengthmin_anystr_lengthorm_modeschema_extravalidate_all)
populate_by_namestr_to_lowerstr_strip_whitespacestr_to_upperignored_typesstr_max_lengthstr_min_lengthfrom_attributesjson_schema_extravalidate_default	v2_configr)   r   c                 C  s   dd |   D S )zIInternal helper: Return a copy of the v2 ConfigDict with renamed v1 keys.c                 S  s   i | ]\}}t |||qS r   )_V1_CONFIG_KEYSget.0kvr   r   r   
<dictcomp>@   s    z%convert_v2_config.<locals>.<dictcomp>)items)rK   r   r   r   convert_v2_config>   s   rT   )maxsizefuncr   r   c                 C  s   t t| jS )zIInternal helper: Return the names of args accepted by the given function.)setr   
parametersrV   r   r   r   allowed_arg_namesC   s   rZ   typePydanticModelMetaclassc                      s,   e Zd Zd fd	d
ZedddZ  ZS )V1MixinMetaclassnamer-   basestuple[type, ...]	namespacer)   r"   r   c                   s>   | dd  }rtddt||d< t j| |||fi |S )Nmodel_configConfigr   )popr[   rT   super__new__)r   r^   r_   ra   r"   config_dict	__class__r   r   rf   R   s   zV1MixinMetaclass.__new__r   c                 C     | j S r   )r   r+   r   r   r   model_fieldsf      zV1MixinMetaclass.model_fields)r^   r-   r_   r`   ra   r)   r"   r   )r   r)   )r2   r3   r4   rf   propertyrl   __classcell__r   r   rh   r   r]   Q   s    r]   c                      s   e Zd Zed%ddZed& fddZed'ddZed(ddZed(ddZed(ddZ	d)ddZ
d*ddZd+d d!Zed,d#d$Z  ZS )-V1Mixinr   r)   r   r   r   c                   sH   dd | j  D }t|rdnd}tt||  fdd| D S )zLReserialize values from `Json`-typed fields after dumping the model to dict.c                 s  s    | ]}|j r|V  qd S r   )
parse_json)rO   fr   r   r   	<genexpr>x   s    z*V1Mixin._dump_json_vals.<locals>.<genexpr>aliasr^   c                   s.   i | ]\}}||d ur| v rt |n|qS r   )r   rN   json_field_keysr   r   rR   |   s    z+V1Mixin._dump_json_vals.<locals>.<dictcomp>)r   r   r   rW   maprS   )r   r   r   json_fieldsget_keyr   ru   r   r   s   s   
zV1Mixin._dump_json_valsr   type[V1Model]localnsr   r#   c                   s(   t t  }dr|jdi | d S d S )N__try_update_forward_refs__r   )hasattrre   r|   )r   r{   suprh   r   r   r|      s   z#V1Mixin.__try_update_forward_refs__r!   r"   c                 O     | j |i |S r   )r%   r$   r   r   r   model_rebuild      zV1Mixin.model_rebuildr   c                 O  r   r   )r&   r$   r   r   r   model_construct   r   zV1Mixin.model_constructc                 O  r   r   )r'   r$   r   r   r   model_validate   r   zV1Mixin.model_validatec                 O  r   r   )r(   r$   r   r   r   model_validate_json   r   zV1Mixin.model_validate_jsonr+   c                   sZ   t | j  @ }| jdi  fdd|D } ddr+ dd}| j||dS |S )Nc                      i | ]}| | qS r   r   rO   rP   r"   r   r   rR          z&V1Mixin.model_dump.<locals>.<dictcomp>
round_tripFr   r   r   )rZ   r   keysrM   r   )r+   r"   allowed_keysdict_r   r   r   r   
model_dump   s   zV1Mixin.model_dumpr-   c                   sj   t | j  @ }| jdi  fdd|D } ddr3 dd}t|}t| j||dS |S )Nc                   r   r   r   r   r   r   r   rR      r   z+V1Mixin.model_dump_json.<locals>.<dictcomp>r   Fr   r   r   )rZ   r.   r   rM   loadsdumpsr   )r+   r"   r   json_r   r   r   r   r   model_dump_json   s   
zV1Mixin.model_dump_jsonc                   s0   t | j  @ }| jdi  fdd|D S )Nc                   r   r   r   r   r   r   r   rR      r   z&V1Mixin.model_copy.<locals>.<dictcomp>r   )rZ   r/   r   )r+   r"   r   r   r   r   
model_copy   s   zV1Mixin.model_copyr   c                 C  rj   r   )r    rk   r   r   r   model_fields_set   rm   zV1Mixin.model_fields_set)r   r)   r   r   r   r)   )r   rz   r{   r   r   r#   r0   r1   )r+   r   r"   r   r   r)   )r+   r   r"   r   r   r-   )r+   r   r"   r   r   r   )r+   r   r   r   )r2   r3   r4   r5   r   r|   r   r   r   r   r   r   r   rn   r   ro   r   r   rh   r   rp   q   s$    


rp   )	metaclassc                   @  s   e Zd ZdS )V2MixinN)r2   r3   r4   r   r   r   r   r      s    r   PydanticCompatMixinafter)modecheck_fieldsfieldr-   fieldsr   +Literal['before', 'after', 'wrap', 'plain']r   bool | None_r   c               O  s&   t j| g|R |dkdt|ddS )NbeforeT)prealwaysr   allow_reuse)pydantic	validatorr   )r   r   r   r   r   r   r   r   field_validator   s   r   c                 K  s(   | dkrddd}|S t j| dkd	d
S )Nr   	v2_methodr   r   r   c                   s$   d fdd}t jdd	d
t|S )Nr   rz   r   r)   r   c                   s(   | j di |  fdd jD S )Nc                   s   i | ]}|t  |qS r   )getattr)rO   r^   	validatedr   r   rR      s    zJmodel_validator.<locals>._decorator.<locals>.v1_method.<locals>.<dictcomp>r   )r&   r   )r   r   r   r   r   	v1_method   s   
z6model_validator.<locals>._decorator.<locals>.v1_methodFTr   r   )r   rz   r   r)   r   r)   )r   root_validatorr5   )r   r   r   r   r   
_decorator   s   z#model_validator.<locals>._decoratorr   Tr   )r   r   r   r   )r   r   )r   r   r   r   r   r   model_validator   s   
r   Callable | propertyrn   c                C  r   r   r   rY   r   r   r   computed_field  r   r   r#   )Callable[[Callable | property], property]c                K  r   r   r   )rV   r   r   r   r   r     s   Callable | property | None4property | Callable[[Callable | property], property]c                K  s   ddd}| du r|S || S )	z?Compatibility wrapper for Pydantic v2's `computed_field` in v1.rr   r   r   rn   c                 S  s   t | tr| S t| S r   )
isinstancern   )rr   r   r   r   always_property  s   z'computed_field.<locals>.always_propertyN)rr   r   r   rn   r   )rV   r   r   r   r   r   r   
  s   
c                   @  s$   e Zd ZU dZded< dddZdS )	AliasChoiceszNPlaceholder class for Pydantic v2's AliasChoices for partial v1 compatibility.z	list[str]aliasesr-   c                 G  s   t || _d S r   )listr   )r+   r   r   r   r   __init__  s   zAliasChoices.__init__N)r   r-   )r2   r3   r4   __doc__r6   r   r   r   r   r   r     s   
 r   )rK   r)   r   r)   )rV   r   r   r   )r   r-   r   r-   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )rV   r   r   rn   )rV   r#   r   r   r   r   r   )rV   r   r   r   r   r   )&r   
__future__r   r.   	functoolsr   inspectr   operatorr   typingr   r   r   r	   r
   r   r   utilsr   r   r   r   rL   rT   rZ   r[   	BaseModelr\   r6   r]   rp   r   r   r   r   r   r   r   r   r   r   <module>   s^     

 K
	
 