o
    Ci(                     @   sH  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 ddlm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
ZereddlmZ ededZedee eeef f Zeddddddddedgdf fddZ edddZ dddde	d dddefddZ dZ!dZ"dZ#dZ$G dd dZ%dS )     )wraps)TYPE_CHECKINGAnyCallableDictListMappingOptionalTupleTypeTypeVarUnionoverload   )	validator)Extra)ConfigError)	BaseModelcreate_model)get_all_type_hints)to_camel)validate_arguments)AnyCallableAnyCallableT)boundNconfigfuncr   
ConfigTypereturnc                C      d S N )r   r   r"   r"   m/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/pydantic/v1/decorator.pyr         r   c                 C   r    r!   r"   )r   r"   r"   r#   r      r$   c                   s   d fdd}| r|| S |S )zC
    Decorator to validate the arguments passed to a function.
    _funcr   r   c                    sN   t |  t| dtdtdtf fdd} |_ j|_ j|_ j|_|S )Nargskwargsr   c                     s    j | i |S r!   )call)r&   r'   vdr"   r#   wrapper_function&   s   z>validate_arguments.<locals>.validate.<locals>.wrapper_function)ValidatedFunctionr   r   r*   init_model_instancevalidateraw_functionmodel)r%   r+   r   r)   r#   r.   #   s   
z$validate_arguments.<locals>.validateN)r%   r   r   r   r"   )r   r   r.   r"   r   r#   r      s   v__args	v__kwargsv__positional_onlyv__duplicate_kwargsc                
   @   s   e Zd ZdddZdeded	efd
dZdeded	efddZdeedf de	e
ef d	e	e
ef fddZded	efddZde	e
ef dededdd	df
ddZdS )r,   functionr   r   r   c                 C   s4  ddl m}m} ||j}| tttth@ r,t	dt dt dt dt dt
j d|| _i | _t | _d| _d	| _t|}d
}d
}i }	t| D ]\}
\}}|j|ju r[t}n|| }|j|ju rgdn|j}|j|jkr|| j|
< ||f|	|< tt d f|	t< | j| qL|j|jkr|| j|
< ||f|	|< tt d f|	t< qL|j|jkr||f|	|< qL|j|j kr|| _t!|df d f|	|< d}qL|j|j"ksJ |j|| _t#t|f d f|	|< d}qL|s| j|	v rt| _|s| j|	v rt| _|stt d f|	| j< |st#ttf d f|	| j< | $|	||| d S )Nr   )	Parameter	signature"z", "z" and "z6" are not permitted as argument names when using the "z" decoratorr&   r'   F.T)%inspectr6   r7   
parameterskeys
ALT_V_ARGSALT_V_KWARGSV_POSITIONAL_ONLY_NAMEV_DUPLICATE_KWARGSr   r   __name__r/   arg_mappingsetpositional_only_argsv_args_namev_kwargs_namer   	enumerateitems
annotationemptyr   defaultkindPOSITIONAL_ONLYr   straddPOSITIONAL_OR_KEYWORDKEYWORD_ONLYVAR_POSITIONALr
   VAR_KEYWORDr   r   )selfr5   r   r6   r7   r:   
type_hints
takes_argstakes_kwargsfieldsinameprH   rJ   r"   r"   r#   __init__=   sd   


zValidatedFunction.__init__r&   r'   r   c                 O   s   |  ||}| jdi |S )Nr"   )build_valuesr0   )rS   r&   r'   valuesr"   r"   r#   r-      s   z%ValidatedFunction.init_model_instancec                 O   s   | j |i |}| |S r!   )r-   execute)rS   r&   r'   mr"   r"   r#   r(      s   
zValidatedFunction.call.c                    s4  i }|r9t |}	 zt|\}}W n	 ty   Y nw  j|}|d ur*|||< n|gdd |D  | j< nq	i }g }	g }
 fdd jj D }t	 jj j j
h }| D ](\}}||v sh||v r| jv rr|	| ||v r{|
| |||< q\|||< q\|r|| j
< |	r|	|t< |
r|
|t< |S )NTc                 S   s   g | ]\}}|qS r"   r"   ).0_ar"   r"   r#   
<listcomp>   s    z2ValidatedFunction.build_values.<locals>.<listcomp>c                    s&   g | ]\}}| j  jfvr|jqS r"   )rD   rE   alias)r`   rY   fieldrS   r"   r#   rc      s
    )rF   nextStopIterationrA   getrD   r0   
__fields__rG   rB   rE   rC   appendr>   r?   )rS   r&   r'   r]   arg_iterrX   rb   arg_name
var_kwargswrong_positional_argsduplicate_kwargsfields_aliasnon_var_fieldskvr"   rf   r#   r\      sJ   








zValidatedFunction.build_valuesr_   c           	         s    fdd   D }|| ji }| j|v rHg }d}i }| D ]\}}|r,|||< q!|| jkr8||7 }d}q!|| q!| j|i ||S | jrqg }i }| D ]\}}|| jv rb|| qS|||< qS| j|i ||S | jdi ||S )Nc                    s,   i | ]\}}| j v s j| jr||qS r"   )__fields_set__rj   default_factory)r`   rs   rt   r_   r"   r#   
<dictcomp>   s   , z-ValidatedFunction.execute.<locals>.<dictcomp>FTr"   )_iterpoprE   rD   rG   rk   r/   rC   )	rS   r_   drn   args_	in_kwargsr'   rY   valuer"   rw   r#   r^      s.   




zValidatedFunction.executerW   rU   rV   Nc                    s   t jG dd d ts t|trtdd| n|d ur | t ds*t dr.tdG  fdd	d	t}t	t
jjfd
|i|_d S )Nc                   @   s   e Zd ZdS )z4ValidatedFunction.create_model.<locals>.CustomConfigN)r@   
__module____qualname__r"   r"   r"   r#   CustomConfig   s    r   Configr"   rW   alias_generatorzSetting the "fields" and "alias_generator" property on custom Config for @validate_arguments is not yet supported, please remove.c                       s   e Zd Zejddddeee  deee  ffddZej	ddddee
eef  dee
eef  ffdd	Zeeddddeee  dd
fddZeeddddeee  dd
fddZG  fddd Zd
S )z:ValidatedFunction.create_model.<locals>.DecoratorBaseModelFT)check_fieldsallow_reusert   r   c                    s,   s|d u r|S t   d t|  d)Nz# positional arguments expected but z given)	TypeErrorlen)clsrt   )pos_argsrU   r"   r#   
check_args   s   zEValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_argsc                    sL    s|d u r|S t |dkrdnd}dtt| }td| d| )Nr    s, zunexpected keyword argument: )r   joinmapreprr;   r   r   rt   pluralr;   )rV   r"   r#   check_kwargs   s
   zGValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_kwargsNc                 S   sJ   |d u rd S t |dkrdnd}dtt|}td| d| d| )Nr   r   r   r   zpositional-only argumentz passed as keyword argumentr   r   r   r   r   r   r   r"   r"   r#   check_positional_only   s
   zPValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_positional_onlyc                 S   sD   |d u rd S t |dkrdnd}dtt|}td| d| )Nr   r   r   r   zmultiple values for argumentr   r   r   r"   r"   r#   check_duplicate_kwargs   s
   zQValidatedFunction.create_model.<locals>.DecoratorBaseModel.check_duplicate_kwargsc                       s   e Zd Ze dejZdS )zAValidatedFunction.create_model.<locals>.DecoratorBaseModel.ConfigextraN)r@   r   r   getattrr   forbidr   r"   )r   r"   r#   r     s    r   )r@   r   r   r   rD   r	   r   r   r   rE   r   rM   r   r>   r   r?   r   r   r"   r   r   rS   rU   rV   r"   r#   DecoratorBaseModel   s    *0r   __base__)r   rA   r   
isinstancedicttypehasattrr   r   r   r   r/   r@   r0   )rS   rW   rU   rV   r   r   r"   r   r#   r      s   

"&zValidatedFunction.create_model)r5   r   r   r   )r@   r   r   r[   r   r   r-   r(   r
   r   rM   r\   r^   boolr   r"   r"   r"   r#   r,   <   s    
C.+*r,   r!   )r   r   r   r   )&	functoolsr   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   errorsr   mainr   r   r   utilsr   __all__r   r   rM   r   r   r<   r=   r>   r?   r,   r"   r"   r"   r#   <module>   s.    8*"