
    Fe                       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rdd	lmZ dd
lmZ  ej,                  e      Zd j.                  Z G d d      ZddZddZd ZddZddZddZ ddZ!y)zPreserve 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)Sphinxc                      y N r       F/usr/lib/python3/dist-packages/sphinx/ext/autodoc/preserve_defaults.py<lambda>r      s    r   c                      e Zd ZddZddZy)DefaultValuec                    || _         y r   name)selfr   s     r   __init__zDefaultValue.__init__   s	    	r   c                    | j                   S r   r   )r   s    r   __repr__zDefaultValue.__repr__"   s    yyr   N)r   strreturnNone)r   r   )__name__
__module____qualname__r   r   r   r   r   r   r      s    r   r   c                b   t        j                  dt        d       	 t        j                  |       }|j                  d      r4t        j                  d|z         }|j                  d   j                  d   S t        j                  |      }|j                  d   S # t        t        f$ r Y yw xY 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)objsourcemodules      r   get_function_defr4   &   s     MM  !9Q	H""3'[) YY|f45F;;q>&&q))YYv&F;;q>!Y s   AB 8#B B.-B.c               n   	 t        j                  |       }|j                  d      r5t        j                  d|z         }|j
                  d   j
                  d   }n$t        j                  |      }|j
                  d   }t        |      S # t        t        f$ r Y yt        $ r t        |       rY y w xY 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/   r0   SyntaxError
_is_lambda_get_arguments_inner)r1   r2   r3   subjects       r   _get_argumentsr:   @   s    ""3'[)YY|f45Fkk!n))!,GYYv&Fkk!nG$  ((# Y  c? 
 	s   A?B B4B42B4c               `    t        | t        j                        xr | j                  t        k(  S r   )
isinstancetypes
LambdaTyper   _LAMBDA_NAMExs    r   r7   r7   c   s#    a))*Iqzz\/IIr   c                  t        | t        j                  t        j                  t        j                  f      r| j
                  S t        | t        j                  t        j                  f      rt        | j                        S y r   )
r<   r,   AsyncFunctionDefFunctionDefLambdaargsAssign	AnnAssignr8   valuer@   s    r   r8   r8   g   sS    !c**COOSZZHIvv!cjj#--01#AGG,,r   c                    	 |j                   |j                  k(  r+| |j                   dz
     }||j                  |j                   S y # t        t
        f$ r Y y w xY w)N   )lineno
end_lineno
col_offsetend_col_offsetAttributeError
IndexError)linespositionlines      r   get_default_valuerU   o   sa    ??h1111,-D++H,C,CDD J' s   AA AAc                   | j                   j                  sy	 t        j                  |      j	                         }|d   j                  d      r|j                  dd       	 t        |      }|y|j                  s|j                  sy	 |rAt        j                  |      r,t        |d      r t        j                  |j                         }nt        j                  |      }t#        |j                        }t#        |j                        }t#        |j$                  j'                               }t)        |      D ]  \  }	}
|
j*                  |
j,                  u r,|
j.                  |
j0                  k(  s8|j3                  d       J|
j.                  |
j4                  |
j6                  fv rI|j3                  d      }t9        ||      }|t;        |      }|
j=                  t?        |            ||	<   |j3                  d      }t9        ||      }|t;        |      }|
j=                  t?        |            ||	<    |j=                  |      }	 ||_         y# t        t        f$ r g }Y 
w xY w# t        $ r Y yw xY w# tB        $ r ||jD                  d<   Y yw xY w# tB        t        f$ r Y ytF        $ r*}tH        jK                  tM        d	      ||       Y d}~yd}~ww xY 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/   r0   r:   r6   defaultskw_defaultsismethodhasattr	signaturerX   listrZ   values	enumeraterY   emptykindKEYWORD_ONLYpopPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrU   ast_unparsereplacer   r[   rP   __dict__NotImplementedErrorloggerwarningr   )appr1   bound_methodrR   rF   sigr`   ra   rZ   iparamrY   rI   excs                 r   update_defvaluerz   {   s   :://!!#&1138{+LLBc" | 	==!1!1(\G,,S1gc:6N##CLL1C##C(C&4++,#..//12
!*- 	OHAu}}+::!3!33OOA&::%"7"79T9T!UU&ll1oG-eW=E} +G 4$)MM,u:MM$NJqM)ooa0G-eW=E} +G 4$)MM,u:MM$NJqM#	O& kkZk0	0 #C[ Y 
  R  	0,/CLL)	0 I& 
 	 \rOPRUWZ[[\sh   A	I #I0 C'J 3CJ I? I-,I-0	I<;I<?JJ JJ K .K 6 KK c                z    | j                  ddd       | j                  dt               t        j                  ddS )Nr]   FTz autodoc-before-process-signature)versionparallel_read_safe)add_config_valueconnectrz   sphinx__display_version__)rt   s    r   setupr      s<    4eTBKK2OD --" r   )r1   r	   r   zast.FunctionDef | None)r1   r	   r   ast.arguments | None)rA   r	   r   r   )rR   z	list[str]rS   zast.ASTr   z
str | None)rt   r
   r1   r	   ru   boolr   r   )rt   r
   r   zdict[str, Any])"__doc__
__future__r   r,   r)   r=   r'   typingr   r   sphinx.deprecationr   sphinx.localer   sphinx.pycode.astr   rn   sphinx.utilr   r	   sphinx.applicationr
   	getLoggerr   rr   r?   r   r4   r:   r7   r8   rU   rz   r   r   r   r   <module>r      s    # 
       7  4 )			8	$&& 4 )FJ	B\Jr   