o
    Ni                     @  s.  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ er^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Z#g dZ$G dd de%e&ee&ge&f f Z'G dd dZ(d*ddZ)d+d%d&Z*G d'd( d(eZ+d)S ),    )annotations)Callable)TYPE_CHECKINGAny)nodes)
StringList)Reporterassemble_option_dict)
DocumenterOptions)logging)SphinxDirectiveswitch_source_input)nested_parse_to_nodes)Node)RSTState)Config)BuildEnvironment)memberszundoc-memberszinherited-memberszshow-inheritanceprivate-membersspecial-memberszignore-module-allexclude-memberszmember-orderzimported-memberszclass-doc-fromzno-value)r   r   r   r   c                   @  s$   e Zd ZdZdddZdd	d
ZdS )DummyOptionSpecz"An option_spec allows any options.returnboolc                 C  s   dS )z&Behaves like some options are defined.T )selfr   r   P/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/autodoc/directive.py__bool__&   s   zDummyOptionSpec.__bool___keystrCallable[[str], str]c                 C  s   dd S )Nc                 S  s   | S Nr   )xr   r   r   <lambda>+   s    z-DummyOptionSpec.__getitem__.<locals>.<lambda>r   )r   r   r   r   r   __getitem__*   s   zDummyOptionSpec.__getitem__N)r   r   )r   r    r   r!   )__name__
__module____qualname____doc__r   r%   r   r   r   r   r   #   s    
r   c                   @  s   e Zd ZdZdddZdS )DocumenterBridgez'A parameters container for Documenters.envr   reporterReporter | Noneoptionsr   linenointstater   r   Nonec                 C  s2   || _ || _|| _|| _t | _t | _|| _d S r"   )	r+   	_reportergenoptr/   setrecord_dependenciesr   resultr1   )r   r+   r,   r.   r/   r1   r   r   r   __init__1   s   
zDocumenterBridge.__init__N)r+   r   r,   r-   r.   r   r/   r0   r1   r   r   r2   )r&   r'   r(   r)   r8   r   r   r   r   r*   .   s    r*   
documentertype[Documenter]configr   r.   dict[str, str]r   r   c                 C  s   |j }tD ]]}|| jvrq|d| ddu }||v rR|sR||v rKt|| trK|tv rJ|| durJ|| drJ||  d|| dd  ||< q|| ||< q||durb|| 	d||< qt
t| | jS )z0Recognize options of Documenter from user input.zno-TN+,   )autodoc_default_optionsAUTODOC_DEFAULT_OPTIONSoption_specpop
isinstancer    AUTODOC_EXTENDABLE_OPTIONS
startswithgetlstripr   r	   items)r9   r;   r.   default_optionsnamenegatedr   r   r   process_documenter_options<   s    
"rM   r1   r   contentr   r
   
list[Node]c                 C  st   t | |+ |jrt| |W  d   S t }| j|_| j|d|dd |jW  d   S 1 s3w   Y  dS )z1Parse an item of content generated by Documenter.Nr   F)match_titles)r   titles_allowedr   r   	paragraphdocumentnested_parsechildren)r1   rN   r9   noder   r   r   parse_generated_contentV   s   $rW   c                   @  s0   e Zd ZdZe ZdZdZdZdZ	d
ddZ
d	S )AutodocDirectivezA directive class for all autodoc directives. It works as a dispatcher of Documenters.

    It invokes a Documenter upon running. After the processing, it parses and returns
    the content generated by Documenter.
    Tr?   r   r   rO   c              
   C  sL  | j jj}z
|| j\}}W n ty   d\}}Y nw td||| j | j	dd  }| j
jjj| }z
t|| j| j}W n% tttfyd } ztjd| j	|| j
j|fd g W  Y d }~S d }~ww t| j
|||| j }||| jd }	|	j| jd |jsg S tdd	|j |jD ]}
| j jjj|
 qt| j |j|	}|S )
N)NNz[autodoc] %s:%s: input:
%s   z=An option to %s is either unknown or has an invalid value: %s)locationr   )more_contentz[autodoc] output:
%s
) r1   rS   r,   get_source_and_liner/   AttributeErrorloggerdebug
block_textrK   r+   appregistrydocumentersrM   r;   r.   KeyError
ValueError	TypeErrorerrordocnamer*   	argumentsgeneraterN   r7   joinr6   settingsaddrW   )r   r,   sourcer/   objtypedocclsdocumenter_optionsexcparamsr9   fnr7   r   r   r   runq   s<   

zAutodocDirective.runN)r   rO   )r&   r'   r(   r)   r   rB   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacerv   r   r   r   r   rX   d   s    rX   N)r9   r:   r;   r   r.   r<   r   r   )r1   r   rN   r   r9   r
   r   rO   ),
__future__r   collections.abcr   typingr   r   docutilsr   docutils.statemachiner   docutils.utilsr   r	   sphinx.ext.autodocr
   r   sphinx.utilr   sphinx.util.docutilsr   r   sphinx.util.parsingr   docutils.nodesr   docutils.parsers.rst.statesr   sphinx.configr   sphinx.environmentr   	getLoggerr&   r_   rA   rE   dictr    r   r*   rM   rW   rX   r   r   r   r   <module>   s.    
"

