o
    qmi)                  	   @   s  U d dl Zd dl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 d dlZejdZerfd 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  d dlm!Z! d dlm"Z" n0d 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  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, edZ-edej.dZ/dee- dede-fddZ0dedeegef defddZ1G dd dej.Z2de	e d e	e de	e fd!d"Z3dee4ef d ee4ef dee4ef fd#d$Z5erG d%d& d&e2ej6Z7e7Z8e,e9d'< ne2Z8e,e9d'< d(edefd)d*Z:d+ed d,eddfd-d.Z;ed/ef Z<	0d<d1e=dee<ge<f fd2d3Z>d<d4e4d1e=dee<ge<f fd5d6Z?eeej@jAf ZBd+ed de
e4eBf fd7d8ZCd9eBdefd:d;ZDdS )=    N)defaultdict)AnyCallableClassVarDictListMappingOptionalSetTupleTypeTypeVarUnioncastz2.)
parse_date)parse_datetime)
ModelField)ENCODERS_BY_TYPE)get_args)
get_origin)is_literal_type)is_union   )serialize_datetime)'convert_and_respect_annotation_metadata)	TypeAliasTModel)boundtype_object_returnc                 C   s2   t || dd}trt| }||S t| |S Nreadr    
annotation	direction)r   IS_PYDANTIC_V2pydanticTypeAdaptervalidate_pythonparse_obj_as)r   r    dealiased_objectadapter r.   T/home/ubuntu/.local/lib/python3.10/site-packages/sarvamai/core/pydantic_utilities.pyr+   '   s
   

r+   objfallback_serializerc                 C   s$   t rddlm} || |dS || S )Nr   )to_jsonable_python)fallback)r'   pydantic_corer2   )r0   r1   r2   r.   r.   r/   to_jsonable_with_fallback/   s   r5   c                
       s   e Zd ZU er#ejddZeej ed< ej	dddde
fdd	ZnG d
d dZedded deee  de
ddfddZedded deee  de
ddf fddZde
def fddZde
deee
f f fddZ  ZS )UniversalBaseModelr.   )protected_namespacesmodel_configplainjson)mode	when_usedr!   c                 C   s   |   }dd | D }|S )Nc                 S   s*   i | ]\}}|t |tjrt|n|qS r.   )
isinstancedtdatetimer   ).0kvr.   r.   r/   
<dictcomp>A   s   * z6UniversalBaseModel.serialize_model.<locals>.<dictcomp>)
model_dumpitems)self
serializeddatar.   r.   r/   serialize_model>   s   z"UniversalBaseModel.serialize_modelc                   @   s   e Zd ZdZejeiZdS )zUniversalBaseModel.ConfigTN)__name__
__module____qualname__smart_unionr>   r?   r   json_encodersr.   r.   r.   r/   ConfigF   s    rO   Nclsr   _fields_setvaluesc                 K   s    t || dd}| j|fi |S r"   )r   	constructrP   rQ   rR   r,   r.   r.   r/   model_constructJ   s   z"UniversalBaseModel.model_constructc                    s:   t || dd}trt j|fi |S t j|fi |S r"   )r   r'   superrU   rS   rT   	__class__r.   r/   rS   O   s   zUniversalBaseModel.constructkwargsc                    s6   ddd|}t rt jdi |S t jdi |S )NT)by_aliasexclude_unsetr.   )r'   rV   model_dump_jsonr:   )rF   rY   kwargs_with_defaultsrW   r.   r/   r:   V   s   zUniversalBaseModel.jsonc                    s   t r*i |dddd}i |dddd}tt jd
i |t jd
i |}nG| j }t| j}| D ]'\}}||vr_t	|}	|	dusPd|v r_|d s_|
| |	dur_| j
| q8dd|d|}
t jd
i |
}t|| jdd	S )z
        Override the default dict method to `exclude_unset` by default. This function patches
        `exclude_unset` to work include fields within non-None default values.
        TF)rZ   r[   exclude_none)rZ   r^   r[   Nr[   )rZ   r[   includewriter$   r.   )r'   deep_union_pydantic_dictsrV   rD   __fields_set__copy_get_model_fieldsrX   rE   _get_field_defaultadddictr   )rF   rY   "kwargs_with_defaults_exclude_unset!kwargs_with_defaults_exclude_none	dict_dumprQ   fieldsnamefielddefault1kwargs_with_defaults_exclude_unset_include_fieldsrW   r.   r/   rg   `   sJ   



zUniversalBaseModel.dictN)rJ   rK   rL   r'   r(   
ConfigDictr8   r   __annotations__model_serializerr   rI   rO   classmethodr   r	   r
   strrU   rS   r:   r   rg   __classcell__r.   r.   rW   r/   r6   7   s   
 *.&
r6   sourcedestinationc                 C   sd   g }t | D ])\}}|| }t|tr|t|| qt|tr*|t|| q|| q|S rp   )	enumerater=   rg   appendra   list_union_list_of_pydantic_dicts)rw   rx   converted_listiitemdestination_valuer.   r.   r/   r|      s   

r|   c                 C   sZ   |   D ]&\}}||i }t|trt|| qt|tr&t||||< q|||< q|S rp   )rE   
setdefaultr=   rg   ra   r{   r|   )rw   rx   keyvaluenoder.   r.   r/   ra      s   


ra   c                   @   s   e Zd ZdS )V2RootModelN)rJ   rK   rL   r.   r.   r.   r/   r      s    r   UniversalRootModeloc                 C   st   t t}t D ]\}}||  |f7  < qt| tv r$tt|  | S | D ]\}}t| |r7||   S q(d S rp   )r   tupleencoders_by_typerE   typer=   )r   encoders_by_class_tuplesr   encoderclasses_tupler.   r.   r/   encode_by_type   s   
r   modellocalnsc                 K   s(   t r
| jdd d S | jdi | d S )NF)raise_errorsr.   )r'   model_rebuildupdate_forward_refs)r   r   r.   r.   r/   r      s   r   .Fprec                    s   dt dt f fdd}|S )Nfuncr!   c                    s8   t rtttj r
dndd| S tttj d| S Nbeforeafter)r;   r   )r'   r   AnyCallabler(   model_validatorroot_validatorr   r   r.   r/   	decorator   s   z+universal_root_validator.<locals>.decoratorr   )r   r   r.   r   r/   universal_root_validator   s   r   
field_namec                    s   dt dt f fdd}|S )Nr   r!   c                    s<   t rtttj rdndd| S tttj d| S r   )r'   r   r   r(   field_validator	validatorr   r   r   r.   r/   r      s    z,universal_field_validator.<locals>.decoratorr   )r   r   r   r.   r   r/   universal_field_validator   s   r   c                 C   s,   t rttttf | jS ttttf | jS rp   )r'   r   r   ru   PydanticFieldmodel_fields
__fields__)r   r.   r.   r/   rd      s   rd   rm   c                 C   s@   z|   }W n   | j}Y trddlm} ||krd S |S |S )Nr   )PydanticUndefined)get_defaultrn   r'   r4   r   )rm   r   r   r.   r.   r/   re      s   re   )F)Er?   r>   collectionsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r(   VERSION
startswithr'   pydantic.v1.datetime_parser   r   pydantic.v1.fieldsr   pydantic.v1.jsonr   r   pydantic.v1.typingr   r   r   r   pydantic.datetime_parsepydantic.fieldspydantic.jsonpydantic.typingdatetime_utilsr   serializationr   typing_extensionsr   r   	BaseModelr   r+   r5   r6   r|   ru   ra   	RootModelr   r   rr   r   r   r   boolr   r   rk   	FieldInfor   rd   re   r.   r.   r.   r/   <module>   sb   
< "b.
"	