o
    Ni                     @  s  d Z ddlmZ ddlZddlZddlZddl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 erNdd	lmZ dd
lmZ ddlmZ eeZdd jZG dd dZd/ddZd0ddZd1ddZd2ddZ d3d$d%Z!d4d*d+Z"d5d-d.Z#dS )6zPreserve function defaults.

Preserve the default argument values of function signatures in source code
and keep them not evaluated for readability.
    )annotationsN)TYPE_CHECKING)RemovedInSphinx90Warning)__)unparse)logging)Any)Sphinx)ExtensionMetadatac                   C  s   d S N r   r   r   X/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/autodoc/preserve_defaults.py<lambda>   s    r   c                   @  s    e Zd Zd
ddZdddZd	S )DefaultValuenamestrreturnNonec                 C  s
   || _ d S r   r   )selfr   r   r   r   __init__    s   
zDefaultValue.__init__c                 C  s   | j S r   r   )r   r   r   r   __repr__#   s   zDefaultValue.__repr__N)r   r   r   r   )r   r   )__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   objr   r   ast.FunctionDef | Nonec              	   C  st   t jdtdd z%t| }|dr#td| }|jd jd W S t|}|jd W S  t	t
fy9   Y dS w )zGet FunctionDef object from living object.

    This tries to parse original code for living object and returns
    AST node for given *obj*.
    zsphinx.ext.autodoc.preserve_defaults.get_function_def is deprecated and scheduled for removal in Sphinx 9. Use sphinx.ext.autodoc.preserve_defaults._get_arguments() to extract AST arguments objects from a lambda or regular function.   )
stacklevel 		if True:
r   N)warningswarnr   inspect	getsource
startswithastparsebodyOSError	TypeError)r   sourcemoduler   r   r   get_function_def'   s   


r/   ast.arguments | Nonec             	   C  s   z.t | }|drtd| }|jd jd }nt|}|jd }W t
|S W t
|S  ttfy:   Y dS  tyH   t	| rGY dS  w )zParse 'ast.arguments' from an object.

    This tries to parse the original code for an object and returns
    an 'ast.arguments' node.
    r   r"   r   N)r%   r&   r'   r(   r)   r*   r+   r,   SyntaxError
_is_lambda_get_arguments_inner)r   r-   r.   subjectr   r   r   _get_argumentsA   s"   


r5   xboolc                C  s   t | tjo
| jtkS r   )
isinstancetypes
LambdaTyper   _LAMBDA_NAMEr6   r   r   r   r2   d   s   r2   c                C  s>   t | tjtjB tjB r| jS t | tjtjB rt| j	S d S r   )
r8   r(   AsyncFunctionDefFunctionDefLambdaargsAssign	AnnAssignr3   valuer<   r   r   r   r3   h   s
   
r3   lines	list[str]positionast.expr
str | Nonec              	   C  sL   z|j |jkr| |j d  }||j|j W S W d S  ttfy%   Y d S w )N   )lineno
end_lineno
col_offsetend_col_offsetAttributeError
IndexError)rD   rF   liner   r   r   get_default_valuep   s   rQ   appr	   bound_methodr   c              
   C  s,  | j jsdS zt| }|d dr|dd W n ttfy)   g }Y nw zt	|}W n
 t
y:   Y dS w |du rAdS |jsI|jsIdS z|r]t|r]t|dr]t|j}nt|}t|j}t|j}t|j }t|D ]X\}	}
|
j|
ju r|
j|
jkr|d qw|
j|
j|
jfv r|d}t||}|du rt|}|
jt|d||	< qw|d}t||}|du rt|}|
jt|d||	< qw|j|d}z||_ W W dS  t!y   ||j"d< Y W dS w  t!tfy   Y dS  t#y } zt$%t&d	|| W Y d}~dS d}~ww )
z2Update defvalue info of *obj* using type_comments.Nr   r    __func__)default)
parameters__signature__z3Failed to parse a default argument value for %r: %s)'configautodoc_preserve_defaultsr%   r&   
splitlinesr'   insertr+   r,   r5   r1   defaultskw_defaultsismethodhasattr	signaturerU   listrW   values	enumeraterV   emptykindKEYWORD_ONLYpopPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrQ   ast_unparsereplacer   rX   rN   __dict__NotImplementedErrorloggerwarningr   )rR   r   rS   rD   r@   sigr]   r^   rW   iparamrV   rC   excr   r   r   update_defvalue|   sl   







 ru   r
   c                 C  s&   |  ddd | dt tjddS )NrZ   Fenvz autodoc-before-process-signatureT)versionparallel_read_safe)add_config_valueconnectru   sphinx__display_version__)rR   r   r   r   setup   s
   r}   )r   r   r   r   )r   r   r   r0   )r6   r   r   r7   )r6   r   r   r0   )rD   rE   rF   rG   r   rH   )rR   r	   r   r   rS   r7   r   r   )rR   r	   r   r
   )$__doc__
__future__r   r(   r%   r9   r#   typingr   r{   sphinx.deprecationr   sphinx.localer   sphinx.pycode.astr   rk   sphinx.utilr   r   sphinx.applicationr	   sphinx.util.typingr
   	getLoggerr   ro   r;   r   r/   r5   r2   r3   rQ   ru   r}   r   r   r   r   <module>   s4    




#


E