
    bMh{                        d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ erdd	lmZ dd
lmZ  G d d          Z e            Zd$dZd%dZd&dZ	 d'd(d#ZdS ))    )annotationsN)	Parameter	Signature	signature)TYPE_CHECKINGAnyCallable)PydanticUndefined   )is_valid_identifier   )ExtraValues	FieldInfoc                      e Zd Zd ZdS )_HAS_DEFAULT_FACTORY_CLASSc                    dS )Nz	<factory> )selfs    ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pydantic/_internal/_signature.py__repr__z#_HAS_DEFAULT_FACTORY_CLASS.__repr__   s    {    N)__name__
__module____qualname__r   r   r   r   r   r      s#            r   r   
field_namestr
field_infor   returnc                    t          |j        t                    rt          |j                  r|j        S t          |j        t                    rt          |j                  r|j        S | S )a  Extract the correct name to use for the field when generating a signature.

    Assuming the field has a valid alias, this will return the alias. Otherwise, it will return the field name.
    First priority is given to the alias, then the validation_alias, then the field name.

    Args:
        field_name: The name of the field
        field_info: The corresponding FieldInfo object.

    Returns:
        The correct name to use when generating a signature.
    )
isinstancealiasr   r   validation_alias)r   r   s     r   _field_name_for_signaturer$      sl     *"C((  -@AQ-R-R  *-s33 +8KJLg8h8h +**r   paramr   c                ,   ddl m} | j        }t          ||          rv| j        }|dk    rt
          }|j        }|t          u r'|j        t          u rt          j	        }nt          j        }|                     |t          | j        |          |          S | S )zModify the signature for a parameter in a dataclass where the default value is a FieldInfo instance.

    Args:
        param (Parameter): The parameter

    Returns:
        Parameter: The custom processed parameter
    r   r   r   )
annotationnamedefault)fieldsr   r)   r!   r'   r   r
   default_factoryr   emptydataclasses_HAS_DEFAULT_FACTORYreplacer$   r(   )r%   r   param_defaultr'   r)   s        r   _process_param_defaultsr1   .   s     #"""""MM-++ 
%
 J  '''',0AAA#/ &:}}!(A%*m(\(\fm  
 
 	
 Lr   initCallable[..., None]r*   dict[str, FieldInfo]validate_by_nameboolextraExtraValues | Nonedict[str, Parameter]c                $   ddl m} t          |           j                                        }i }d}d} ||dd          D ]}	|                    |	j                  rSt          ||	j                 dd          du r;|	                    t          |	j        ||	j                                     }	|	j
        d	k    r|	                    t          
          }	|	j        |	j        u r|	}|	||	j        <   |r|}
|                                D ]\  }}t          ||          }||v s||v rt          |          s|
r|}nd}5|                                rt"          j        }n|j        t(          }n|j        }t#          |t"          j        |                                |          ||<   |dk    rd}|r^|r\dt"          j        fdt"          j        fg}d |D             |k    rd}n|j        }||v r	|dz  }||v 	|                    |          ||<   |S )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )isliceNFr   r2   T)r(   r   )r'   )r'   r)   allowr   datac                *    g | ]}|j         |j        fS r   )r(   kind).0ps     r   
<listcomp>z2_generate_signature_parameters.<locals>.<listcomp>   s!    555QVQV555r   
extra_data_)	itertoolsr;   r   
parametersvaluesgetr(   getattrr/   r$   r'   r   r?   VAR_KEYWORDitemsr   is_requiredr   r,   r+   r.   r)   KEYWORD_ONLYrebuild_annotationPOSITIONAL_ONLY)r2   r*   r5   r7   r;   present_paramsmerged_paramsvar_kw
use_var_kwr%   allow_namesr   field
param_namer)   default_model_signaturevar_kw_names                    r   _generate_signature_parametersrY   P   s    !     t__/6688N*,MFJ400 * * ::ej!! 	bvej)6488EAAMM'@VTYT^M_'`'`MaaEu$$MMSM11E:***F$)ej!! &!' 	 	J2:uEEJ]**jM.I.I&z22  !+JJ!%J  "" (#/&2.-(1& 3355	) ) )M*%% 
 F* F Y./Y*+#
 65n5559PPP&KK !+K V##3K V##%+^^^%E%Ek"r   Fis_dataclassr   c                    t          | |||          }|rd |                                D             }t          t          |                                          d          S )ay  Generate signature for a pydantic BaseModel or dataclass.

    Args:
        init: The class init.
        fields: The model fields.
        validate_by_name: The `validate_by_name` value of the config.
        extra: The `extra` value of the config.
        is_dataclass: Whether the model is a dataclass.

    Returns:
        The dataclass/BaseModel subclass signature.
    c                4    i | ]\  }}|t          |          S r   )r1   )r@   kvs      r   
<dictcomp>z/generate_pydantic_signature.<locals>.<dictcomp>   s'    YYY41a3A66YYYr   N)rF   return_annotation)rY   rK   r   listrG   )r2   r*   r5   r7   rZ   rQ   s         r   generate_pydantic_signaturerb      si    & 34AQSXYYM ZYY=CVCVCXCXYYY]%9%9%;%; < <PTUUUUr   )r   r   r   r   r   r   )r%   r   r   r   )
r2   r3   r*   r4   r5   r6   r7   r8   r   r9   )F)r2   r3   r*   r4   r5   r6   r7   r8   rZ   r6   r   r   )
__future__r   r-   inspectr   r   r   typingr   r   r	   pydantic_corer
   _utilsr   configr   r*   r   r   r.   r$   r1   rY   rb   r   r   r   <module>ri      sY   " " " " " "     3 3 3 3 3 3 3 3 3 3 / / / / / / / / / / + + + + + + ' ' ' ' ' ' #$$$$$$""""""       
 2133    *   DQ Q Q Qr V V V V V V Vr   