U
    \Sh8                     @  s   d Z ddlm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eZG d	d
 d
ZdddddZddddddZdddddddZdddddZdS ) zPreserve function defaults.

Preserve the default argument values of function signatures in source code
and keep them not evaluated for readability.
    )annotationsN)Any)Sphinx)__)unparse)loggingc                   @  s*   e Zd ZdddddZddddZd	S )
DefaultValuestrNone)namereturnc                 C  s
   || _ d S Nr   )selfr    r   W/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/ext/autodoc/preserve_defaults.py__init__   s    zDefaultValue.__init__)r   c                 C  s   | j S r   r   )r   r   r   r   __repr__   s    zDefaultValue.__repr__N)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   r   zast.FunctionDef | None)objr   c              	   C  sn   zNt | }|dr6td| }|jd jd W S t|}|jd W S W n ttfk
rh   Y dS X dS )zGet FunctionDef object from living object.
    This tries to parse original code for living object and returns
    AST node for given *obj*.
     z\tz	if True:
r   N)inspect	getsource
startswithastparsebodyOSError	TypeError)r   sourcemoduler   r   r   get_function_def   s    


r$   z	list[str]zast.ASTz
str | None)linespositionr   c              	   C  sV   z6|j |jkr.| |j d  }||j|j W S W d S W n ttfk
rP   Y d S X d S )N   )lineno
end_lineno
col_offsetend_col_offsetAttributeError
IndexError)r%   r&   liner   r   r   get_default_value1   s    
r/   r   boolr
   )appr   bound_methodr   c              
   C  s$  | j jsdS z,t| }|d dr6|dd W n ttfk
rT   g }Y nX zxt	|}|dk	snt
|jjs|jjrt|}t|jj}t|jj}t|j }t|D ]\}	}
|
j|
jkr|
j|
jkr|d q|
j|
j|
jfkr4|d}t||}|dkrt|}|
jt|d||	< q|d}t||}|dkrZt|}|
jt|d||	< q|rt|rtdtjj}|d| |j|d}|rt|r||j d< n||_!W nN t"tfk
r   Y n6 t#k
r } zt$%t&d	|| W 5 d}~X Y nX dS )
z2Update defvalue info of *obj* using type_comments.Nr   r    )defaultcls)
parameters__signature__z3Failed to parse a default argument value for %r: %s)'configautodoc_preserve_defaultsr   r   
splitlinesr   insertr    r!   r$   AssertionErrorargsdefaultskw_defaults	signaturelistr6   values	enumerater4   emptykindKEYWORD_ONLYpopPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr/   ast_unparsereplacer   ismethod	Parameter__dict__r7   r,   NotImplementedErrorloggerwarningr   )r1   r   r2   r%   functionsigr>   r?   r6   iparamr4   valuer5   excr   r   r   update_defvalue=   sT    








rX   zdict[str, Any])r1   r   c                 C  s&   |  ddd | dt tjddS )Nr9   FTz autodoc-before-process-signature)versionZparallel_read_safe)Zadd_config_valueconnectrX   sphinxZ__display_version__)r1   r   r   r   setupv   s
    r\   )__doc__
__future__r   r   r   typingr   r[   Zsphinx.applicationr   Zsphinx.localer   Zsphinx.pycode.astr   rJ   Zsphinx.utilr   	getLoggerr   rP   r   r$   r/   rX   r\   r   r   r   r   <module>   s   
9