
    8'h|                        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 ddlmZ erd	d
lmZ ddZddZ	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)	Parameter	Signature	signature)TYPE_CHECKINGAnyCallable)PydanticUndefined   )ConfigWrapper)is_valid_identifier   	FieldInfoc                    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aliasstrr   validation_alias)
field_name
field_infos     Y/var/www/html/trade_iq/venv/lib/python3.12/site-packages/pydantic/_internal/_signature.py_field_name_for_signaturer      s^     *""C(-@AQAQ-R*--s38KJLgLg8h***    c                N   ddl m} | j                  }t        ||      r| j                  }|dk(  rt
        }|j                  }|t        u r3|j                  t        u rt        j                  }nt        j                  }| 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   )paramr   param_defaultr   r   s        r   _process_param_defaultsr'   %   s     #MMM-+%%
 J  '''',,0AA#// &::}}!(A%**m(\fm  
 	
 Lr   c                l   ddl m} t        |       j                  j	                         }i }d}d} ||dd      D ]  }|j                  |j                        rPt        ||j                     dd      du r;|j                  t        |j                  ||j                                 }|j                  d	k(  r|j                  t        
      }|j                  |j                  u r|}|||j                  <    |r|j                  }	|j                         D ]  \  }
}t        |
|      }|
|v s||v rt!        |      s|	r|
}nd}.|j#                         ri nd|j%                  d      i}t'        |t&        j(                  fd|j+                         i|||<    |j,                  dk(  rd}|r|rdt&        j.                  fdt&        j                  fg}|D cg c]  }|j                  |j                  f c}|k(  rd}n|j                  }||v r
|dz  }||v r
|j                  |      ||<   |S c c}w )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )isliceNFr   initT)r   r   )r   r   )call_default_factoryr   allowselfdata
extra_data_)	itertoolsr)   r   
parametersvaluesgetr   getattrr$   r   r   r   kindVAR_KEYWORDpopulate_by_nameitemsr   is_requiredget_defaultr   KEYWORD_ONLYrebuild_annotationextraPOSITIONAL_ONLY)r*   r   config_wrapperr)   present_paramsmerged_paramsvar_kw
use_var_kwr%   allow_namesr   field
param_namekwargsdefault_model_signaturepvar_kw_names                    r   _generate_signature_parametersrL   G   sM    !t_//668N*,MFJ40 * ::ejj!vejj)648EAMM'@VTYT^T^M_'`MaEu$MMSM1E::***F$)ejj!* $55!' 	J2:uEJ]*jM.I&z2!+J!%J ,,.RY@Q@Qgl@Q@m4nF(1I22)?D?W?W?Y)]c)M*%	& w&
* Y../Y**+#
 '55QVVQVV59PP&K !++K V#3K V#%+^^^%Ek" 6s   H1c                    t        | ||      }|r,|j                         D ci c]  \  }}|t        |       }}}t        t	        |j                               d      S c c}}w )a8  Generate signature for a pydantic BaseModel or dataclass.

    Args:
        init: The class init.
        fields: The model fields.
        config_wrapper: The config wrapper instance.
        is_dataclass: Whether the model is a dataclass.

    Returns:
        The dataclass/BaseModel subclass signature.
    N)r2   return_annotation)rL   r9   r'   r   listr3   )r*   r   r@   is_dataclassrB   kvs          r   generate_pydantic_signaturerS      sb     34PMCPCVCVCXY41a3A66YY]%9%9%; <PTUU Zs   A )r   r   r   r   returnr   )r%   r   rT   r   )r*   Callable[..., None]r   dict[str, FieldInfo]r@   r   rT   zdict[str, Parameter])F)
r*   rU   r   rV   r@   r   rP   boolrT   r   )
__future__r   r"   inspectr   r   r   typingr   r   r	   pydantic_corer
   _configr   _utilsr   r   r   r   r'   rL   rS    r   r   <module>r_      s    "  3 3 / / + " '"*DG
G G "G 	GV rwV
V';VMZVjnVVr   