a
    1a]~                  	   @   s$  d Z ddlZddl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mZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZm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)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQ ddlRmSZS eDTeUZVeWd ZXeWd!ZYd"ZZG d#d$ d$ej[Z\e%ej]dd%d&d'Z^ej_e\dd(d)d*Z`ej_edd(d+d,ZaG d-d. d.ej[ZbeSebdd(d/d0Zce+d1d2die*i  G d3d4 d4ZdG d5d6 d6e4Zee%eeee2 d7d8d9ZfG d:d; d;eHZgehehd<d=d>Ziehehd<d?d@ZjdcehekehdBdCdDZleeh eehdEdFdGZmddeheeh ekehehdIdJdKZnG dLdM dMeoZpe-eeh dNdOdPZqdgdQfeheeh ereeheeehf dRdSdTZsdeehereeeehf dUdVdWZtdgdQfeheeh ereeheeehf dRdXdYZuG dZd[ d[eIZve%ehd\d]d^Zwe%dd\d_d`Zxe%eehef d\dadbZydS )fa  
    sphinx.ext.autosummary
    ~~~~~~~~~~~~~~~~~~~~~~

    Sphinx extension that adds an autosummary:: directive, which can be
    used to generate function/method/attribute/etc. summary lists, similar
    to those output eg. by Epydoc and other API doc generation tools.

    An :autolink: role is also provided.

    autosummary directive
    ---------------------

    The autosummary directive has the form::

        .. autosummary::
           :nosignatures:
           :toctree: generated/

           module.function_1
           module.function_2
           ...

    and it generates an output table (containing signatures, optionally)

        ========================  =============================================
        module.function_1(args)   Summary line from the docstring of function_1
        module.function_2(args)   Summary line from the docstring
        ...
        ========================  =============================================

    If the :toctree: option is specified, files matching the function names
    are inserted to the toctree with the given prefix:

        generated/module.function_1
        generated/module.function_2
        ...

    Note: The file names contain the module:: or currentmodule:: prefixes.

    .. seealso:: autosummary_generate.py


    autolink role
    -------------

    The autolink role functions as ``:obj:`` when the name referred can be
    resolved to a Python object, and otherwise it becomes simple emphasis.
    This can be used as the default role to make links 'smart'.

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)	Parameter)path)
ModuleType)AnyDictListOptionalSequenceTupleTypecast)nodes)ElementNodesystem_message)
directives)RSTStateMachineStructstate_classes)
StringList)addnodes)Sphinx)Config)RemovedInSphinx50WarningRemovedInSphinx60Warningdeprecated_alias)BuildEnvironment)TocTree)INSTANCEATTR
Documenter)DocumenterBridgeOptions)import_module)mock)__)Project)ModuleAnalyzerPycodeError)SphinxComponentRegistry)loggingrst)NullReporterSphinxDirective
SphinxRolenew_documentswitch_source_input)signature_from_str)Matcher)
OptionSpec)HTMLTranslatorz	\.(?:\s+)z::\s*$)zet al.z i.e.c                   @   s   e Zd ZdS )autosummary_tocN__name__
__module____qualname__ r9   r9   >lib/python3.9/site-packages/sphinx/ext/autosummary/__init__.pyr4   k   s   r4   )appdoctreereturnc                    sD   t jdtdd | jji d	ttdd fdd  | dS )
ziInsert items described in autosummary:: to the TOC tree, but do
    not generate the toctree:: list.
    z'process_autosummary_toc() is deprecated   )
stacklevel   N)nodedepthr=   c              	      s   d| < | D ]x}z8t |trFt |d tjrFtj|d  W qW n ty^   Y qY n0 t |tj	snq|vr ||d  qd S )NTr   r@   )

isinstancer4   r   toctreer   Znotedocname
IndexErrorr   section)rA   rB   subnode	crawl_tocZcrawledenvr9   r:   rJ   x   s    

z*process_autosummary_toc.<locals>.crawl_toc)r@   )warningswarnr   builderrK   r   int)r;   r<   r9   rI   r:   process_autosummary_toco   s    rP   )selfrA   r=   c                 C   s
   t jdS )z-Hide autosummary toctree list in HTML output.N)r   ZSkipNoderQ   rA   r9   r9   r:   autosummary_toc_visit_html   s    rS   c                 C   s   d S Nr9   rR   r9   r9   r:   autosummary_noop   s    rU   c                   @   s   e Zd ZdS )autosummary_tableNr5   r9   r9   r9   r:   rV      s   rV   c                 C   s   zt tj|d }t tj|d }t tj|d }t ttj |}|D ]d}t tj|d }t tj|d }t	t
|D ]2\}	}
t|
tjrv|
 dd}t|||	< qvqFW n ty   Y n0 dS )z0Make the first column of the table non-breaking.r        N)r   r   tabletgrouptbodyr   rowentry	paragraph	enumeratelistrC   TextastextreplacerF   )rQ   rA   rZ   r[   r\   Zrowsr]   Z
col1_entryZparjrH   Znew_textr9   r9   r:   autosummary_table_visit_html   s    rf   zsphinx.ext.autosummaryZ_appc                   @   s   e Zd Zdd ZdS )FakeApplicationc                 C   s8   d | _ d | _i | _d | _t | _td d | _t | _	d S rT   )
Z
doctreedirZevents
extensionssrcdirr   configr%   Zprojectr(   registry)rQ   r9   r9   r:   __init__   s    zFakeApplication.__init__N)r6   r7   r8   rl   r9   r9   r9   r:   rg      s   rg   c                       s"   e Zd Zdd fddZ  ZS )FakeDirectiveNr=   c                    sX   t dd}t |d}t }|jdddd  t|}t |d}t |d t d| d S )	N   )Z	tab_width)settingsZautodoc_class_signatureZmixedT)documentr   )r   rg   rj   addr   superrl   r!   )rQ   rp   rq   r;   rK   state	__class__r9   r:   rl      s    


zFakeDirective.__init__)r6   r7   r8   rl   __classcell__r9   r9   ru   r:   rm      s   rm   )r;   objparentr=   c                    s   ddl m}m} t r|S |dur4t| |d}n|}t|drR|t |jn|t d fdd| j	j
 D }|r|jdd	 d
 |d S |S dS )zGet an autodoc.Documenter class suitable for documenting the given
    object.

    *obj* is the Python object to be documented, and *parent* is an
    another Python object (e.g. a module or a class) to which *obj*
    belongs to.
    r   )DataDocumenterModuleDocumenterNr6    c                    s    g | ]}|  d dr|qS )r|   F)Zcan_document_member).0clsrx   Z
parent_docr9   r:   
<listcomp>   s   z"get_documenter.<locals>.<listcomp>c                 S   s   | j S rT   )priority)r~   r9   r9   r:   <lambda>       z get_documenter.<locals>.<lambda>)keyrW   )sphinx.ext.autodocrz   r{   inspectZismoduleget_documenterhasattrrm   r6   rk   Zdocumentersvaluessort)r;   rx   ry   rz   r{   Zparent_doc_clsclassesr9   r   r:   r      s    

r   c                   @   s   e Zd ZU dZdZdZdZdZej	ej
ejejej
dZeed< ee ddd	Zeee eeeeef d
ddZeeeeddddZee eeeeeef  dddZeeeeeef  ee dddZdS )Autosummaryz
    Pretty table containing short signatures and summaries of functions etc.

    autosummary can also optionally generate a hidden toctree:: node.
    r   FT)captionrD   nosignatures	recursivetemplateoption_specrn   c                 C   s  t | j| jjjt | j| j| _dd | jD }| 	|}| 
|}d| jv rlt| jj}| jd  }g }t| jj}| jj}|D ]\}	}
}}|||}t||}tt||}|| jjvr|| j|d rtd}ntd}tj|||  d q|| q|rlt }||d< dd |D |d	< d
|d< d |d< | jd|d< |t dd| d| jvrd| jv rtjtd|d
 d |S )Nc                 S   s8   g | ]0}|  rtd |  d r|   d qS )z^[~a-zA-Z_]r   )stripresearchsplitr}   xr9   r9   r:   r     s   z#Autosummary.run.<locals>.<listcomp>rD   z5autosummary references excluded document %r. Ignored.zMautosummary: stub file not found %r. Check your autosummary_generate setting.locationZincludefilesc                 S   s   g | ]}d |fqS rT   r9   )r}   Zdocnr9   r9   r:   r   %  r   entriesrW   Zmaxdepthglobr   r|   z;A captioned autosummary requires :toctree: option. ignored.)!r    rK   rt   rq   reporterr!   linenobridgecontent	get_items	get_tableoptions	posixpathdirnamerE   r   r1   rj   Zexclude_patternsautosummary_filename_mapgetjoinnormpath
found_docsdoc2pathr$   loggerwarningget_locationappendr   rD   r4   )rQ   namesitemsr   r   Ztree_prefixZdocnamesZexcludedZfilename_map_name_sigZ_summary	real_namerE   msgZtocnoder9   r9   r:   run  sH    



zAutosummary.run)nameprefixesr=   c                 C   s   t | jj zt||ddW W  d    S  ty } zz&t||W W  Y d }~W  d    S  ty } z>|jr|j|jg }n|j|g }t|j	d |W Y d }~n
d }~0 0 W Y d }~n
d }~0 0 W d    n1 s0    Y  d S )NTgrouped_exceptionr   )
r#   rj   autosummary_mock_importsimport_by_nameImportExceptionGroupimport_ivar_by_nameImportError	__cause__
exceptionsargs)rQ   r   r   excZexc2errorsr9   r9   r:   r   2  s    &zAutosummary.import_by_namer   )r;   rx   ry   	full_namer=   c                 C   s   t |||}|| j|S )zGet an autodoc.Documenter class suitable for documenting the given
        object.

        Wraps get_documenter and is meant as a hook for extensions.
        )r   r   )rQ   r;   rx   ry   r   Zdocclsr9   r9   r:   create_documenterB  s    zAutosummary.create_documenter)r   r=   c                 C   sj  t | j}g }d}|D ]L}|}|drD|dd }|dd }z| j||d\}}}	}
W nh ty } zPttdd	 |jD }t	j
td
|d||  d W Y d}~qW Y d}~n
d}~0 0 t | j_|}t|ts|
d |t|
d d  }| | jj||	|}| sFt	j
td||  d ||dd|f q| s|t	j
td||  d ||dd|f qzt| |_|j  W n8 ty } zt	d| d|_W Y d}~n
d}~0 0 z|j dd}W n t!y    |  }Y n0 |sd}nt"d|t| }t#||d}|$d t%| jjj&dd | j'j(}|||||f q|S )z}Try to import the given names, and return a list of
        ``[(name, signature, summary_string, real_name), ...]``.
        2   ~r@   N.rW   )r   c                 s   s    | ]}d t |j|f V  qdS )z* %s: %sN)typer6   r}   er9   r9   r:   	<genexpr>_  r   z(Autosummary.get_items.<locals>.<genexpr>z4autosummary: failed to import %s.
Possible hints:
%s
r   z::zfailed to parse name %sr|   zfailed to import object %sz$[autodoc] module analyzer failed: %sF)Zshow_annotation
   	max_chars))get_import_prefixes_from_envrK   
startswithr   r   r   ra   setr   r   r   r$   r   r   r   r   resultrC   r   lenr   r;   Z
parse_namer   Zimport_objectr&   
for_moduleZget_real_modnameanalyzerZfind_attr_docsr'   debugZformat_signature	TypeErrormaxmangle_signatureZadd_contentextract_summarydatart   rq   )rQ   r   r   r   Zmax_item_charsr   Zdisplay_namer   rx   ry   modnamer   r   r   Z
documentererrsigr   summaryr9   r9   r:   r   L  sj    



"




zAutosummary.get_items)r   r=   c                    s   t  }d|d< td}tjddgd}|| tjddd}|| |tjddd	 |tjdd
d	 td |  t	dd fdd}|D ]N\}}}	}
d}dj
vrd|||
t|f }nd|||
f }|	}||| q||gS )zGenerate a proper list of table nodes for autosummary:: directive.

        *items* is a list produced by :meth:`get_items`.
        z\X{1}{2}\X{1}{2}specr|   Z	longtabler   r>   )Zcolsr   )ZcolwidthZ   N)column_textsr=   c               
      s   t d}j \}}| D ]}t d}t }||d||f  tj|b j	|d| zt
|d t jr||d }W n ty   Y n0 |t d| W d    q1 s0    Y  q | d S )Nr|   z%s:%d:<autosummary>r   )r   r]   state_machineZget_source_and_liner_   r   r   r/   rt   Znested_parserC   rF   r^   )r   r]   sourcelinetextrA   ZvlbodyrQ   r9   r:   
append_row  s    

2z)Autosummary.get_table.<locals>.append_rowrx   r   z:py:%s:`%s <%s>`\ %sz:py:%s:`%s <%s>`)r   Ztabular_col_specrV   r   rZ   r   r[   Zcolspecr\   strr   r*   escape)rQ   r   Z
table_specrZ   Z
real_tablegroupr   r   r   r   r   Z	qualifierZcol1Zcol2r9   r   r:   r     s(    




zAutosummary.get_tableN)r6   r7   r8   __doc__Zrequired_argumentsZoptional_argumentsZfinal_argument_whitespaceZhas_contentr   Zunchanged_requiredZ	unchangedflagr   r2   __annotations__r   r   r   r   r
   r   r   r   r   r   r   r9   r9   r9   r:   r      s$   
0"
$Or   )sr=   c                 C   s   |  dd  S )z+Strip a type hint from argument definition.:r   )r   r   )r   r9   r9   r:   strip_arg_typehint  s    r   c                 C   s   z|t | }t|j }t|D ]B\}}|jtjurB|jtjd}|j	tjurZ|jdd}|||< q |j|tjd}t
|W S  ty   |  Y S 0 dS )zCClean up signature using inspect.signautre() for mangle_signature())
annotationN)default)
parametersZreturn_annotation)r0   ra   r   r   r`   r   r   emptyrd   r   r   	Exception)r   r   r   iZparamr9   r9   r:   _cleanup_signature  s    

r      )r   r   r=   c           
      C   s  t | }tdd|}tdd| }tdd|}tdd|}tdd|}td	d|}td
d|}td|rtdd|}qntd|rtdd|}qtd|rtdd|}qg }g }td}|r||}|s|d}q|d|d |ddd }qt	|D ]\}}t
|||< q$t	|D ]\}}	t
|	||< qDtd||d d} |r| sdtd||d d } n@t| |d d d k r| dtd||t|  d d d 7 } d|  S )z5Reformat a function signature to a more compact form.z\)\s*->\s.*$)z
^\((.*)\)$z\1z\\\\r|   z\\'z\\"z'[^']*'z"[^"]*"z	\([^)]*\)z<[^>]*>z{[^}]*}z^(.*, |)([a-zA-Z0-9_*]+)\s*=\s*z, r   r>   r@   Nr   z[%s]      z[, %s]z(%s))r   r   subr   r   compiler   insertr   r`   r   limited_joinr   )
r   r   r   r   ZoptsZopt_remr   argoptr9   r9   r:   r     sJ    




r   )docrq   r=   c                 C   sb  t t ttjddd}| r4| d  s4| d qt| D ] \}}| s<| d| }  q^q<| g krjdS || |j}t	|d tj
r|d   }nt	|d tjs| d  }ntd| }t|dkr|d  }nrd}tt|D ]`}d	|d|d  d
d
 }g |dd< || |j}|tr:qt|tjs qRqtd
|}|S )zExtract summary from docstring.)r	  rp   r=   c                 S   s,   t td}td|}t |_|| | |S )NZBodyr|   )r   r   r.   r+   r   r   )r	  rp   r   rA   r9   r9   r:   parse   s
    

zextract_summary.<locals>.parser   Nr|   rX   r@   z. r   )r   r   r   r   rq   r   popr`   rp   rC   rG   rc   r_   
periods_rer   r   r   rangerstripendswithWELL_KNOWN_ABBREVIATIONSanyfindallr   
literal_rer  )r	  rq   r
  r   ZpiecerA   r   Z	sentencesr9   r9   r:   r     s8    	 r   ...)sepr   r   overflow_markerr=   c                 C   sz   |  |}t||k r|S d}d}|D ]6}|t|t|  7 }||t| k rX|d7 }q& q^q&|  t|d| |g S )zJoin a number of strings into one, limiting the length to *max_chars*.

    If the string overflows this limit, replace the last fitting item by
    *overflow_marker*.

    Returns: joined_string
    r   r@   N)r   r   ra   )r  r   r   r  Zfull_strZn_charsZn_itemsitemr9   r9   r:   r  V  s    	

r  c                       s0   e Zd ZdZee ee d fddZ  Z	S )r   zExceptions raised during importing the target objects.

    It contains an error messages and a list of exceptions as its arguments.
    )messager   c                    s   t  | t|| _d S rT   )rs   rl   ra   r   )rQ   r  r   ru   r9   r:   rl   x  s    zImportExceptionGroup.__init__)
r6   r7   r8   r   r   r   r	   BaseExceptionrl   rw   r9   r9   ru   r:   r   r  s   r   )rK   r=   c                 C   s\   dg}| j d}|r"|d| | j d}|rX|rL|d|d |  n|d| |S )z`
    Obtain current Python import prefixes (for `import_by_name`)
    from ``document.env``
    Nz	py:moduler   zpy:classr   )Zref_contextr   r  )rK   r   Z
currmoduleZ	currclassr9   r9   r:   r   }  s    r   F)r   r   r   r=   c                 C   s   g }g }|D ]}z:|r&d || g}n| }t||\}}}	||||	fW   S  tyf   || Y q ty }
 z || ||
 W Y d}
~
qd}
~
0 0 q|rtdd |D g }tdd | |ntdd | dS )z~Import a Python object that has the given *name*, under one of the
    *prefixes*.  The first name that succeeds is used.
    r   Nc                 s   s   | ]}|j V  qd S rT   )r   r   r9   r9   r:   r     r   z!import_by_name.<locals>.<genexpr>zno module named %sz or )r   _import_by_namer   r   r   sum)r   r   r   Ztriedr   prefixZprefixed_namerx   ry   r   r   r   r9   r9   r:   r     s$    
"r   )r   r   r=   c                 C   s  g }zj|  d}d|dd }|rz t|}t||d ||fW W S  tttfy } z||jpj| W Y d}~n
d}~0 0 d}d}t	t
dt|d D ]n}|}d|d| }zt| W n6 t y } z||jp| W Y d}~n
d}~0 0 |tjv r qq|t|k r\d}	tj| }
||d D ]}|
}	t|
|}
q:|
|	|fW S tj| d|fW S W nV ttttfy } z4|| |rtd|nt|j |W Y d}~n
d}~0 0 dS )z+Import a Python object given its full name.r   NrW   r   r@   r|   )r   r   r"   getattrr   rF   AttributeErrorr   r   reversedr  r   sysmodules
ValueErrorKeyErrorr   r   )r   r   r   Z
name_partsr   modr   Zlast_jre   ry   rx   Zobj_namer9   r9   r:   r    sD    
&&


r  c              
   C   s   z|  dd\} }t| ||\}}}}||d d}tt|d|}	|	  ||f|	jv sl||f|	jv r|d | t	||fW S W nB t
ttfy }
 zt
|
W Y d}
~
nd}
~
0  ty    Y n0 t
dS )zImport an instance variable that has the given *name*, under one of the
    *prefixes*.  The first name that succeeds is used.
    r   r@   r|   r7   N)rsplitr   rd   r&   r   r  ZanalyzeZ	attr_docsannotationsr   r   r"  r'   r   )r   r   r   attrr   rx   ry   r   qualnamer   r   r9   r9   r:   r     s    r   c                   @   s.   e Zd ZdZeee ee f dddZdS )AutoLinkzSmart linking role.

    Expands to ':obj:`text`' if `text` is an object that can be imported;
    otherwise expands to '*text*'.
    rn   c                 C   s   | j dd}|d| j| j| j| j| j| j\}}|rB||fS t	|dksRJ t
tj|d }z t| j }t|d |dd W n@ ty   t
tj|d }tj| j| |d d	|d< Y n0 ||fS )
Npyrx   r@   r   Z	reftargetTr   r   r   )rK   Z
get_domainZroleZrawtextr   r   Zinlinerr   r   r   r   r   pending_xrefr   r   r   r   literalZemphasisrc   )rQ   Z
pyobj_roleZobjectsr   r+  r   r,  r9   r9   r:   r     s"    
zAutoLink.runN)	r6   r7   r8   r   r
   r   r   r   r   r9   r9   r9   r:   r)    s   r)  )r;   r=   c                    sF   t tt df d fdd}d } jjD ]}d||v r(|  S q(d S )N.)suffixr=   c                    s"    j  | }|d u rdS |jS )N)restructuredtext)rk   Zget_source_parsersr   Z	supported)r-  parser_classr;   r9   r:   get_supported_format  s    z,get_rst_suffix.<locals>.get_supported_formatr.  )r   r
   rj   source_suffix)r;   r1  r-  r9   r0  r:   get_rst_suffix  s    
r3  c              
      s&  | j j}|du r.| jj  fdd jD }nh|du r8n^t| j jfdd|D }|d d  D ]2}tt	| j
|sbttd| || qb|sd S t| }|d u rttd d S dd	lm} | j j}t| j j0 |||| j
| || j j| j jd
 W d    n1 s0    Y  d S )NTc                    s,   g | ]$}t j |r j|d dqS )N)base)osr   isfiler   r   )rK   r9   r:   r   $  s   z,process_generate_options.<locals>.<listcomp>Fc                    s*   g | ]"}|| t s  d  nd qS )r   r|   )r  tuple)r}   Zgenfile)extr9   r:   r   *  s   z(autosummary_generate: file not found: %szbautosummary generats .rst files internally. But your source_suffix does not contain .rst. Skipped.r   )generate_autosummary_docs)r-  	base_pathr;   imported_membersZ	overwriteencoding)rj   autosummary_generaterN   rK   r   ra   r2  r   r6  r   ri   r   r   r$   remover3  Zsphinx.ext.autosummary.generater9  autosummary_imported_membersr#   r   autosummary_generate_overwriteZsource_encoding)r;   Zgenfilesr^   r-  r9  r;  r9   )rK   r8  r:   process_generate_options  s8    

rA  c                 C   s  |  d | jtttfttfttfttfttfd | jtttfttfttfttfttfd | dt | 	dt
  | dt | di d | di d	 | d
ddttg | ddd | ddd d | dg dtg | dddt tjddS )Nzsphinx.ext.autodoc)htmlZlatexr   ZmanZtexinfoZautosummaryZautolinkzbuilder-initedZautosummary_contextTr   rB  r=  r@  Fr   c                 S   s   | j S rT   )Zautodoc_mock_imports)rj   r9   r9   r:   r   \  r   zsetup.<locals>.<lambda>rK   r?  Zautosummary_ignore_module_all)versionZparallel_read_safe)Zsetup_extensionZadd_noder4   rS   rU   rV   rf   Zadd_directiver   Zadd_roler)  ZconnectrA  Zadd_config_valueboolra   sphinxZ__display_version__r0  r9   r9   r:   setupE  s8    
rF  )r   )r   r  )F)zr   r   r5  r   r   r   rL   r   r   typesr   typingr   r   r   r   r	   r
   r   r   Zdocutilsr   Zdocutils.nodesr   r   r   Zdocutils.parsers.rstr   Zdocutils.parsers.rst.statesr   r   r   Zdocutils.statemachiner   rE  r   Zsphinx.applicationr   Zsphinx.configr   Zsphinx.deprecationr   r   r   Zsphinx.environmentr   Z#sphinx.environment.adapters.toctreer   r   r   r   Zsphinx.ext.autodoc.directiver    r!   Zsphinx.ext.autodoc.importerr"   Zsphinx.ext.autodoc.mockr#   Zsphinx.localer$   Zsphinx.projectr%   Zsphinx.pycoder&   r'   Zsphinx.registryr(   Zsphinx.utilr)   r*   Zsphinx.util.docutilsr+   r,   r-   r.   r/   Zsphinx.util.inspectr0   Zsphinx.util.matchingr1   Zsphinx.util.typingr2   Zsphinx.writers.htmlr3   Z	getLoggerr6   r   r  r  r  r  Zcommentr4   rq   rP   ZNodeVisitorrS   rU   rV   rf   rg   rm   r   r   r   r   r   rO   r   r   r  r   r   r   rD  r   r  r   r)  r3  rA  rF  r9   r9   r9   r:   <module>   s   6(


	% \;8  /
&