o
    NirY                     @  s  d 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 ddlmZmZmZ dd	lmZmZ dd
lmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ  ddl!m"Z" ddl#m$Z$ ddl%m&Z& erddl'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3mZ ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZF e$GeHZIddd d!ZJG d"d# d#ZKd/d*d+ZLd0d-d.ZMdS )1zSphinx component registry.    )annotationsN)import_module)entry_points)
MethodType)TYPE_CHECKINGAny)DomainIndexObjType)GenericObjectTarget)ExtensionErrorSphinxErrorVersionRequirementError)	Extension)create_publisher)__)Parser)XRefRole)logging)prefixed_warnings)CallableIteratorSequence)nodes)	Publisher)ElementNodeTextElement)	Directive)	Transform)Sphinx)Builder)Config)BuildEnvironment)
Documenter)ExtensionMetadataRoleFunctionTitleGetter_ExtensionSetupFuncz1.2z1.3z2.0.0)zsphinxjp.themecorezsphinxcontrib-napoleonsphinxprettysearchresultsc                   @  s  e Zd ZdddZedddZddddZdddZdddZddddZ	dddZ
dd!d"Z	ddd%d&Z	ddd)d*Z	ddd-d.Z	/	0	0	/	1	ddd<d=Z	/	0	/	ddd>d?ZdddBdCZdddFdGZddHdIZddKdLZddOdPZ	dddSdTZddYdZZdd[d\Zdd`daZddddeZddgdhZddidjZddkdlZddpdqZddvdwZddydzZ dd|d}Z!dd~dZ"	ddddZ#	ddddZ$dddZ%dddZ&dddZ'dddZ(dddZ)d0S )SphinxComponentRegistryreturnNonec                 C  s   i | _ i | _i | _g | _i | _i | _i | _i | _i | _i | _	i | _
i | _d| _i | _g | _g | _g | _g | _i | _i | _i | _i | _g | _i | _d S )Nper_page)autodoc_attrgettersbuildersdocumenters	css_filesdomainsdomain_directivesdomain_indicesdomain_object_typesdomain_rolesenumerable_nodeshtml_inline_math_renderershtml_block_math_renderershtml_assets_policyhtml_themesjs_fileslatex_packageslatex_packages_after_hyperrefpost_transformssource_parserssource_suffixtranslatorstranslation_handlers
transforms
publishersself rI   C/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/registry.py__init__8   s4   
z SphinxComponentRegistry.__init__*dict[type, Callable[[Any, str, Any], Any]]c                 C     | j S Nr/   rG   rI   rI   rJ   autodoc_attrgettrs   s   z*SphinxComponentRegistry.autodoc_attrgettrsFbuildertype[Builder]overrideboolc                 C  sf   t d| t|dsttd| |j| jv r+|s+ttd|j| j|j jf || j|j< d S )Nz[app] adding builder: %rnamez(Builder class %s has no "name" attributez(Builder %r already exists (in module %s))loggerdebughasattrr   r   rU   r0   
__module__)rH   rQ   rS   rI   rI   rJ   add_builder   s   
z#SphinxComponentRegistry.add_builderappr!   rU   strc              
   C  sn   |d u rd S || j vr5tdd}z|| }W n ty+ } z	ttd| |d }~ww | ||j d S d S )Nzsphinx.builders)groupz?Builder name %s not registered or available through entry point)r0   r   KeyErrorr   r   load_extensionmodule)rH   r[   rU   builder_entry_pointsentry_pointexcrI   rI   rJ   preload_builder   s    

z'SphinxComponentRegistry.preload_builderenvr$   r"   c                 C  s*   || j vrttd| | j | ||S )NzBuilder name %s not registered)r0   r   r   )rH   r[   rU   re   rI   rI   rJ   create_builder   s   
z&SphinxComponentRegistry.create_builderdomaintype[Domain]c                 C  s>   t d| |j| jv r|sttd|j || j|j< d S )Nz[app] adding domain: %rzdomain %s already registered)rV   rW   rU   r3   r   r   )rH   rg   rS   rI   rI   rJ   
add_domain   s   z"SphinxComponentRegistry.add_domainc                 C  s
   || j v S rN   )r3   )rH   rg   rI   rI   rJ   
has_domain   s   
z"SphinxComponentRegistry.has_domainIterator[Domain]c                 c  s    | j  D ]B}||}|j| j|ji  |j| j|ji  |j	
| j|jg  | j|ji  D ]
\}}||| q:|V  qd S rN   )r3   values
directivesupdater4   getrU   rolesr7   indicesextendr5   r6   itemsadd_object_type)rH   re   DomainClassrg   rU   objtyperI   rI   rJ   create_domains   s   z&SphinxComponentRegistry.create_domainsclstype[Directive]c                 C  f   t d|||f || jvrttd| | j|i }||v r-|s-ttd||f |||< d S )Nz$[app] adding directive to domain: %rdomain %s not yet registeredz3The %r directive is already registered to domain %s)rV   rW   r3   r   r   r4   
setdefault)rH   rg   rU   rx   rS   rm   rI   rI   rJ   add_directive_to_domain   s   
z/SphinxComponentRegistry.add_directive_to_domainroleRoleFunction | XRefRolec                 C  rz   )Nz[app] adding role to domain: %rr{   z.The %r role is already registered to domain %s)rV   rW   r3   r   r   r7   r|   )rH   rg   rU   r~   rS   rp   rI   rI   rJ   add_role_to_domain   s   
z*SphinxComponentRegistry.add_role_to_domainindextype[Index]c                 C  sh   t d||f || jvrttd| | j|g }||v r-|s-ttd|j|f || d S )Nz [app] adding index to domain: %rr{   z/The %r index is already registered to domain %s)	rV   rW   r3   r   r   r5   r|   rU   append)rH   rg   r   rS   rq   rI   rI   rJ   add_index_to_domain   s   
z+SphinxComponentRegistry.add_index_to_domain NrI   directivenamerolenameindextemplate
parse_nodeCallable | Noneref_nodeclasstype[TextElement] | Noneobjnamedoc_field_typesr   c	              
   C  s   t d|||||||f t|ttf||ot||d}	| d||	 | d|t|d | j	
di }
||
v rC|sCttd| t|pG|||
|< d S )Nz[app] adding object type: %r)r   r   r   stdinnernodeclassz(The %r object_type is already registered)rV   rW   typer   objectstaticmethodr}   r   r   r6   r|   r   r   r
   )rH   r   r   r   r   r   r   r   rS   	directiveobject_typesrI   rI   rJ   rt      s(   
z'SphinxComponentRegistry.add_object_typec           	      C  s   t d|||||f t|ttfd|i}| d|| | d|t|d | j	di }||v r;|s;t
td| t|p?||||< d S )Nz[app] adding crossref type: %rr   r   r   z*The %r crossref_type is already registered)rV   rW   r   r   r   r}   r   r   r6   r|   r   r   r
   )	rH   r   r   r   r   r   rS   r   r   rI   rI   rJ   add_crossref_type   s   	z)SphinxComponentRegistry.add_crossref_typesuffixfiletypec                 C  s:   t d|| || jv r|sttd| || j|< d S )Nz"[app] adding source_suffix: %r, %rz&source_suffix %r is already registered)rV   rW   rB   r   r   )rH   r   r   rS   rI   rI   rJ   add_source_suffix  s   z)SphinxComponentRegistry.add_source_suffixparsertype[Parser]c                 C  sD   t d| |jD ]}|| jv r|sttd| || j|< q	d S )Nz%[app] adding search source_parser: %rz*source_parser for %r is already registered)rV   rW   	supportedrA   r   r   )rH   r   rS   r   rI   rI   rJ   add_source_parser   s   
z)SphinxComponentRegistry.add_source_parserc              
   C  s8   z| j | W S  ty } z	ttd| |d }~ww )Nz#Source parser for %s not registered)rA   r^   r   r   )rH   r   rc   rI   rI   rJ   get_source_parser*  s   z)SphinxComponentRegistry.get_source_parserdict[str, type[Parser]]c                 C  rM   rN   )rA   rG   rI   rI   rJ   get_source_parsers0     z*SphinxComponentRegistry.get_source_parsersfilenamer   c                 C  s(   |  |}| }t|tr|| |S rN   )r   
isinstanceSphinxParserset_application)rH   r[   r   parser_classr   rI   rI   rJ   create_source_parser3  s
   


z,SphinxComponentRegistry.create_source_parser
translatortype[nodes.NodeVisitor]c                 C  s8   t d| || jv r|sttd| || j|< d S )Nz.[app] Change of translator for the %s builder.z Translator for %r already exists)rV   rW   rC   r   r   )rH   rU   r   rS   rI   rI   rJ   add_translator:  s   z&SphinxComponentRegistry.add_translatornodetype[Element]kwargs tuple[Callable, Callable | None]c           	      K  sz   t d|| | D ]/\}}| j|i }z|\}}||f||j< W q ty: } zttd||f |d }~ww d S )Nz)[app] adding translation_handlers: %r, %rzEkwargs for add_node() must be a (visit, depart) function tuple: %r=%r)	rV   rW   rs   rD   r|   __name__
ValueErrorr   r   )	rH   r   r   builder_namehandlersrD   visitdepartrc   rI   rI   rJ   add_translation_handlersA  s"   z0SphinxComponentRegistry.add_translation_handlersc                 C  sZ   z| j |j W S  ty,   z|jW  Y S  ty+ } zd|j }t||d }~ww w )Nztranslator not found for )rC   rU   r^   default_translator_classAttributeError)rH   rQ   errmsgrI   rI   rJ   get_translator_classR  s   
z,SphinxComponentRegistry.get_translator_classargsr   nodes.NodeVisitorc           	      G  s   |  |}|| }| j|jd }|d u r| j|ji }| D ]\}\}}t|d| t|| |r?t|d| t|| q!|S )Nvisit_depart_)r   rD   ro   rU   formatrs   setattrr   )	rH   rQ   r   translator_classr   r   rU   r   r   rI   rI   rJ   create_translator\  s   
z)SphinxComponentRegistry.create_translator	transformtype[Transform]c                 C     t d| | j| d S )Nz[app] adding transform: %r)rV   rW   rE   r   rH   r   rI   rI   rJ   add_transformm     z%SphinxComponentRegistry.add_transformlist[type[Transform]]c                 C  rM   rN   )rE   rG   rI   rI   rJ   get_transformsq  r   z&SphinxComponentRegistry.get_transformsc                 C  r   )Nz[app] adding post transform: %r)rV   rW   r@   r   r   rI   rI   rJ   add_post_transformt  r   z*SphinxComponentRegistry.add_post_transformc                 C  rM   rN   )r@   rG   rI   rI   rJ   get_post_transformsx  r   z+SphinxComponentRegistry.get_post_transformsrv   
documentertype[Documenter]c                 C     || j |< d S rN   )r1   )rH   rv   r   rI   rI   rJ   add_documenter{     z&SphinxComponentRegistry.add_documentertypr   
attrgetterCallable[[Any, str, Any], Any]c                 C  r   rN   rO   )rH   r   r   rI   rI   rJ   add_autodoc_attrgetter~  s   z.SphinxComponentRegistry.add_autodoc_attrgetter
attributesc                 K  s   | j ||f d S rN   )r2   r   rH   r   r   rI   rI   rJ   add_css_files  s   z%SphinxComponentRegistry.add_css_files
str | Nonec                 K  s"   t d|| | j||f d S )Nz[app] adding js_file: %r, %r)rV   rW   r=   r   r   rI   rI   rJ   add_js_file  s   z#SphinxComponentRegistry.add_js_filec                   s"   | j | j }t fdd|D S )Nc                   s   g | ]
}|d   kr|qS )r   rI   ).0xrU   rI   rJ   
<listcomp>  s    z=SphinxComponentRegistry.has_latex_package.<locals>.<listcomp>)r>   r?   rT   )rH   rU   packagesrI   r   rJ   has_latex_package  s   z)SphinxComponentRegistry.has_latex_packageoptionsafter_hyperrefc                 C  sN   |  |rtd| td| |r| j||f d S | j||f d S )Nz#latex package '%s' already includedz[app] adding latex package: %r)r   rV   warningrW   r?   r   r>   )rH   rU   r   r   rI   rI   rJ   add_latex_package  s   
z)SphinxComponentRegistry.add_latex_package
type[Node]figtypetitle_getterTitleGetter | Nonec                 C  s@   t d||| || jv r|sttd| ||f| j|< d S )Nz*[app] adding enumerable node: (%r, %r, %r)z%enumerable_node %r already registered)rV   rW   r8   r   r   )rH   r   r   r   rS   rI   rI   rJ   add_enumerable_node  s   z+SphinxComponentRegistry.add_enumerable_nodeinline_renderers'tuple[Callable, Callable | None] | Noneblock_renderersc                 C  sV   t d||| || jv rttd| |d ur|| j|< |d ur)|| j|< d S d S )Nz+[app] adding html_math_renderer: %s, %r, %rz&math renderer %s is already registered)rV   rW   r9   r   r   r:   )rH   rU   r   r   rI   rI   rJ   add_html_math_renderer  s   

z.SphinxComponentRegistry.add_html_math_renderer
theme_pathc                 C  r   rN   )r<   )rH   rU   r   rI   rI   rJ   add_html_theme  r   z&SphinxComponentRegistry.add_html_themeextnamec                 C  sd  ||j v rdS |tv rttd|t|  dS td| }t| zt|}W n! tyJ } zttdt	
   ttd| ||d}~ww t|dd}|du r`ttd| i }nz||}W n ty} } zttd||f |d}~ww |du ri }nt|tsttd	| i }t||fi ||j |< W d   dS 1 sw   Y  dS )
zLoad a Sphinx extension.Nz\the extension %r was already merged with Sphinx since version %s; this extension is ignored.zwhile setting up extension %s:zOriginal exception:
zCould not import extension %ssetupzMextension %r has no setup() function; is it really a Sphinx extension module?zpThe %s extension used by this project needs at least Sphinx v%s; it therefore cannot be built with this version.zuextension %r returned an unsupported object from its setup() function; it should return None or a metadata dictionary)
extensionsEXTENSION_BLACKLISTrV   r   r   r   r   ImportErrorverbose	traceback
format_excr   getattrr   r   dictr   )rH   r[   r   prefixmodr   r   metadatarI   rI   rJ   r_     s^   





"z&SphinxComponentRegistry.load_extensiondict[str, int]c                 C  s,   ddl m} dd |j D }||d< |S )Nr   )ENV_VERSIONc                 S  s&   i | ]}|j d r|j|j d  qS )env_version)r   ro   rU   )r   extrI   rI   rJ   
<dictcomp>  s    
z:SphinxComponentRegistry.get_envversion.<locals>.<dictcomp>sphinx)sphinx.environmentr   r   rl   )rH   r[   r   
envversionrI   rI   rJ   get_envversion  s   z&SphinxComponentRegistry.get_envversionr   c                 C  s8   z| j | W S  ty   Y nw t||}|| j |< |S rN   )rF   r^   r   )rH   r[   r   	publisherrI   rI   rJ   get_publisher  s   

z%SphinxComponentRegistry.get_publisher)r,   r-   )r,   rL   )F)rQ   rR   rS   rT   r,   r-   )r[   r!   rU   r\   r,   r-   )r[   r!   rU   r\   re   r$   r,   r"   )rg   rh   rS   rT   r,   r-   )rg   r\   r,   rT   )re   r$   r,   rk   )
rg   r\   rU   r\   rx   ry   rS   rT   r,   r-   )
rg   r\   rU   r\   r~   r   rS   rT   r,   r-   )rg   r\   r   r   rS   rT   r,   r-   )r   NNr   rI   F)r   r\   r   r\   r   r\   r   r   r   r   r   r\   r   r   rS   rT   r,   r-   )r   Nr   F)r   r\   r   r\   r   r\   r   r   r   r\   rS   rT   r,   r-   )r   r\   r   r\   rS   rT   r,   r-   )r   r   rS   rT   r,   r-   )r   r\   r,   r   )r,   r   )r[   r!   r   r\   r,   r   )rU   r\   r   r   rS   rT   r,   r-   )r   r   r   r   r,   r-   )rQ   r"   r,   r   )rQ   r"   r   r   r,   r   )r   r   r,   r-   )r,   r   )rv   r\   r   r   r,   r-   )r   r   r   r   r,   r-   )r   r\   r   r   r,   r-   )r   r   r   r   r,   r-   )rU   r\   r,   rT   )rU   r\   r   r   r   rT   r,   r-   )NF)
r   r   r   r\   r   r   rS   rT   r,   r-   )rU   r\   r   r   r   r   r,   r-   )rU   r\   r   r\   r,   r-   )r[   r!   r   r\   r,   r-   )r[   r!   r,   r   )r[   r!   r   r\   r,   r   )*r   rY   __qualname__rK   propertyrP   rZ   rd   rf   ri   rj   rw   r}   r   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r  r  rI   rI   rI   rJ   r+   7   sp    
O
	


#




















.r+   r[   r!   configr#   r,   r-   c                 C  s   | j j D ]9\}}|| jjvr|| jj|< q| jj| dkr&|| jj|< q| jj| du r?td| }t| || jj|< q| jj| j _dS )zDMerge any user-specified source_suffix with any added by extensions.restructuredtextNz&`None` is not a valid filetype for %r.)registryrB   rs   r  r   rV   r   )r[   r  r   r   r   rI   rI   rJ   merge_source_suffix  s   
r  r&   c                 C  s   | j dtdd ddddS )Nzconfig-initedi   )prioritybuiltinT)versionparallel_read_safeparallel_write_safe)connectr  )r[   rI   rI   rJ   r     s
   r   )r[   r!   r  r#   r,   r-   )r[   r!   r,   r&   )N__doc__
__future__r   r   	importlibr   importlib.metadatar   typesr   typingr   r   sphinx.domainsr   r	   r
   sphinx.domains.stdr   r   sphinx.errorsr   r   r   sphinx.extensionr   	sphinx.ior   sphinx.localer   sphinx.parsersr   r   sphinx.rolesr   sphinx.utilr   sphinx.util.loggingr   collections.abcr   r   r   docutilsr   docutils.corer   docutils.nodesr   r   r   docutils.parsersdocutils.parsers.rstr   docutils.transformsr    sphinx.applicationr!   sphinx.buildersr"   sphinx.configr#   r  r$   sphinx.ext.autodocr%   sphinx.util.typingr&   r'   r(   r)   	getLoggerr   rV   r   r+   r  r   rI   rI   rI   rJ   <module>   sT    
   
B