U
    \ShzV                     @  s  d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ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lmZ ejdkrddlmZ n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)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 dd
l7mZ8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@mAZA e
rddlBmCZC ddlDmEZE e<FeGZHddiZIG d d! d!ZJd"d#d$d%d&d'ZKd"d(d)d*d+ZLdS ),zSphinx component registry.    )annotationsN)import_module)
MethodType)TYPE_CHECKINGAnyCallableIterator)nodes)	Publisher)ElementNodeTextElement)Parser)	Directive)	Transform)   
   )entry_points)Builder)Config)DomainIndexObjType)GenericObjectTarget)BuildEnvironment)ExtensionErrorSphinxErrorVersionRequirementError)	Extension)create_publisher)__)XRefRole)logging)prefixed_warnings)RoleFunctionTitleGetter)Sphinx)
Documenterzsphinxjp.themecorez1.2c                   @  s  e Zd ZddddZdddddd	d
ZddddddZddddddddZdddddddZdddddZdddd d!Z	dddd"ddd#d$d%Z
dddd&ddd'd(d)Zddd*ddd+d,d-Zd.ddd.g dfdddd/d0dd1ddd2	d3d4Zddddd0dddd5d6d7Zdddddd8d9d:Zdd;ddd<d=d>Zdd;d?d@dAZdBddCdDZdddEdFdGdHZdddIdddJdKdLZdMdNddOdPdQZddIdRdSdTZddUdVdWdXdYZdZdd[d\d]Zd^dd_d`ZdZdd[dadbZd^ddcddZddeddfdgdhZdidjddkdldmZddUddndodpZdqdUddndrdsZdddtdudvZ dddqdddwdxdyZ!ddzdd{ddd|d}d~Z"dddddddZ#ddddddZ$ddddddZ%dddddZ&ddddddZ'dS )SphinxComponentRegistryNone)returnc                 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 )NZper_page)autodoc_attrgettrsbuildersdocumenters	css_filesdomainsdomain_directivesdomain_indicesdomain_object_typesdomain_rolesenumerable_nodeshtml_inline_math_renderershtml_block_math_renderersZ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 rE   B/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/registry.py__init__4   s0    z SphinxComponentRegistry.__init__Fztype[Builder]bool)builderoverrider+   c                 C  sf   t d| t|ds&ttd| |j| jkrV|sVt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!   rK   r-   
__module__)rD   rI   rJ   rE   rE   rF   add_builder   s    
z#SphinxComponentRegistry.add_builderr'   str)apprK   r+   c              
   C  st   |d krd S || j krptdd}z|| }W n4 tk
r` } zttd| |W 5 d }~X Y nX | ||j d S )Nzsphinx.builders)groupz?Builder name %s not registered or available through entry point)r-   r   KeyErrorr   r!   load_extensionmodule)rD   rR   rK   Zbuilder_entry_pointsentry_pointexcrE   rE   rF   preload_builder   s    

z'SphinxComponentRegistry.preload_builderNzBuildEnvironment | Noner   )rR   rK   envr+   c                 C  s*   || j krttd| | j | ||S )NzBuilder name %s not registered)r-   r   r!   )rD   rR   rK   rZ   rE   rE   rF   create_builder   s    
z&SphinxComponentRegistry.create_builderztype[Domain])domainrJ   r+   c                 C  s>   t d| |j| jkr.|s.ttd|j || j|j< d S )Nz[app] adding domain: %rzdomain %s already registered)rL   rM   rK   r0   r   r!   )rD   r\   rJ   rE   rE   rF   
add_domain   s    z"SphinxComponentRegistry.add_domain)r\   r+   c                 C  s
   || j kS N)r0   )rD   r\   rE   rE   rF   
has_domain   s    z"SphinxComponentRegistry.has_domainr   zIterator[Domain])rZ   r+   c                 c  s   | j  D ]}||}|j| j|ji  |j| j|ji  |j	
| j|jg  | j|ji  D ]\}}||| qr|V  q
d S r^   )r0   values
directivesupdater1   getrK   rolesr4   indicesextendr2   r3   itemsadd_object_type)rD   rZ   ZDomainClassr\   rK   objtyperE   rE   rF   create_domains   s    z&SphinxComponentRegistry.create_domainsztype[Directive])r\   rK   clsrJ   r+   c                 C  sf   t d|||f || jkr,ttd| | j|i }||krZ|sZt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)rL   rM   r0   r   r!   r1   
setdefault)rD   r\   rK   rk   rJ   ra   rE   rE   rF   add_directive_to_domain   s    
z/SphinxComponentRegistry.add_directive_to_domainzRoleFunction | XRefRole)r\   rK   rolerJ   r+   c                 C  sf   t d|||f || jkr,ttd| | j|i }||krZ|sZttd||f |||< d S )Nz[app] adding role to domain: %rrl   z.The %r role is already registered to domain %s)rL   rM   r0   r   r!   r4   rm   )rD   r\   rK   ro   rJ   rd   rE   rE   rF   add_role_to_domain   s    
z*SphinxComponentRegistry.add_role_to_domainztype[Index])r\   indexrJ   r+   c                 C  sh   t d||f || jkr*ttd| | j|g }||krZ|sZttd|j|f || d S )Nz [app] adding index to domain: %rrl   z/The %r index is already registered to domain %s)	rL   rM   r0   r   r!   r2   rm   rK   append)rD   r\   rq   rJ   re   rE   rE   rF   add_index_to_domain   s    
z+SphinxComponentRegistry.add_index_to_domain zCallable | Noneztype[TextElement] | Nonelist)	directivenamerolenameindextemplate
parse_noderef_nodeclassobjnamedoc_field_typesrJ   r+   c	              
   C  s   t d|||||||f t|ttf|t||d}	| d||	 | d|t|d | j	
di }
||
kr|sttd| t|p|||
|< d S )Nz[app] adding object type: %r)rx   ry   r|   stdZinnernodeclassz(The %r object_type is already registered)rL   rM   typer   objectstaticmethodrn   rp   r"   r3   rm   r   r!   r   )rD   rv   rw   rx   ry   rz   r{   r|   rJ   	directiveobject_typesrE   rE   rF   rh      s,      z'SphinxComponentRegistry.add_object_type)rv   rw   rx   rz   r{   rJ   r+   c           	      C  s   t d|||||f t|ttfd|i}| d|| | d|t|d | j	di }||krv|svt
td| t|p~||||< d S )Nz[app] adding crossref type: %rrx   r}   r~   z*The %r crossref_type is already registered)rL   rM   r   r   r   rn   rp   r"   r3   rm   r   r!   r   )	rD   rv   rw   rx   rz   r{   rJ   r   r   rE   rE   rF   add_crossref_type   s    	z)SphinxComponentRegistry.add_crossref_type)suffixfiletyperJ   r+   c                 C  s:   t d|| || jkr,|s,ttd| || j|< d S )Nz"[app] adding source_suffix: %r, %rz&source_suffix %r is already registered)rL   rM   r>   r   r!   )rD   r   r   rJ   rE   rE   rF   add_source_suffix  s    z)SphinxComponentRegistry.add_source_suffixztype[Parser])parserrJ   r+   c                 C  sD   t d| |jD ],}|| jkr4|s4ttd| || j|< qd S )Nz%[app] adding search source_parser: %rz*source_parser for %r is already registered)rL   rM   	supportedr=   r   r!   )rD   r   rJ   r   rE   rE   rF   add_source_parser  s    
z)SphinxComponentRegistry.add_source_parser)r   r+   c              
   C  sF   z| j | W S  tk
r@ } zttd| |W 5 d }~X Y nX d S )Nz#Source parser for %s not registered)r=   rT   r   r!   )rD   r   rX   rE   rE   rF   get_source_parser!  s    z)SphinxComponentRegistry.get_source_parserzdict[str, type[Parser]]c                 C  s   | j S r^   )r=   rC   rE   rE   rF   get_source_parsers'  s    z*SphinxComponentRegistry.get_source_parsersr   )rR   filenamer+   c                 C  s(   |  |}| }t|tr$|| |S r^   )r   
isinstanceSphinxParserZset_application)rD   rR   r   parser_classr   rE   rE   rF   create_source_parser*  s
    


z,SphinxComponentRegistry.create_source_parserztype[nodes.NodeVisitor])rK   
translatorrJ   r+   c                 C  s8   t d| || jkr*|s*ttd| || j|< d S )Nz.[app] Change of translator for the %s builder.z Translator for %r already exists)rL   rM   r?   r   r!   )rD   rK   r   rJ   rE   rE   rF   add_translator1  s    z&SphinxComponentRegistry.add_translatorztype[Element]z'tuple[Callable | None, Callable | None])nodekwargsr+   c           	      K  s   t d|| | D ]j\}}| j|i }z|\}}||f||j< W q tk
r~ } zttd||f |W 5 d }~X Y qX qd S )Nz)[app] adding translation_handlers: %r, %rzEkwargs for add_node() must be a (visit, depart) function tuple: %r=%r)	rL   rM   rg   r@   rm   __name__
ValueErrorr   r!   )	rD   r   r   Zbuilder_namehandlersr@   visitdepartrX   rE   rE   rF   add_translation_handlers8  s    z0SphinxComponentRegistry.add_translation_handlers)rI   r+   c                 C  sj   z| j |j W S  tk
rd   z|jW  Y S  tk
r^ } ztd|j |W 5 d }~X Y nX Y nX d S )Nztranslator not found for )r?   rK   rT   Zdefault_translator_classAttributeError)rD   rI   errrE   rE   rF   get_translator_classI  s    z,SphinxComponentRegistry.get_translator_classr   znodes.NodeVisitor)rI   argsr+   c           	      G  s   |  |}|| }| j|jd }|d kr:| j|ji }| D ]<\}\}}t|d| t|| |rBt|d| t|| qB|S )Nvisit_Zdepart_)r   r@   rc   rK   formatrg   setattrr   )	rD   rI   r   Ztranslator_classr   r   rK   r   r   rE   rE   rF   create_translatorR  s    
z)SphinxComponentRegistry.create_translatorztype[Transform])	transformr+   c                 C  s   t d| | j| d S )Nz[app] adding transform: %r)rL   rM   rA   rr   rD   r   rE   rE   rF   add_transformc  s    z%SphinxComponentRegistry.add_transformzlist[type[Transform]]c                 C  s   | j S r^   )rA   rC   rE   rE   rF   get_transformsg  s    z&SphinxComponentRegistry.get_transformsc                 C  s   t d| | j| d S )Nz[app] adding post transform: %r)rL   rM   r<   rr   r   rE   rE   rF   add_post_transformj  s    z*SphinxComponentRegistry.add_post_transformc                 C  s   | j S r^   )r<   rC   rE   rE   rF   get_post_transformsn  s    z+SphinxComponentRegistry.get_post_transformsztype[Documenter])ri   
documenterr+   c                 C  s   || j |< d S r^   )r.   )rD   ri   r   rE   rE   rF   add_documenterq  s    z&SphinxComponentRegistry.add_documenterr   zCallable[[Any, str, Any], Any])typ
attrgetterr+   c                 C  s   || j |< d S r^   )r,   )rD   r   r   rE   rE   rF   add_autodoc_attrgettert  s    z.SphinxComponentRegistry.add_autodoc_attrgetter)r   
attributesr+   c                 K  s   | j ||f d S r^   )r/   rr   rD   r   r   rE   rE   rF   add_css_filesx  s    z%SphinxComponentRegistry.add_css_filesz
str | Nonec                 K  s"   t d|| | j||f d S )Nz[app] adding js_file: %r, %r)rL   rM   r9   rr   r   rE   rE   rF   add_js_file{  s    z#SphinxComponentRegistry.add_js_file)rK   r+   c                   s"   | j | j }t fdd|D S )Nc                   s   g | ]}|d   kr|qS )r   rE   ).0xrK   rE   rF   
<listcomp>  s      z=SphinxComponentRegistry.has_latex_package.<locals>.<listcomp>)r:   r;   rH   )rD   rK   packagesrE   r   rF   has_latex_package  s    z)SphinxComponentRegistry.has_latex_package)rK   optionsafter_hyperrefr+   c                 C  sL   |  |rtd| td| |r8| j||f n| j||f d S )Nz#latex package '%s' already includedz[app] adding latex package: %r)r   rL   warningrM   r;   rr   r:   )rD   rK   r   r   rE   rE   rF   add_latex_package  s    
z)SphinxComponentRegistry.add_latex_packagez
type[Node]zTitleGetter | None)r   figtypetitle_getterrJ   r+   c                 C  s@   t d||| || jkr.|s.ttd| ||f| j|< d S )Nz*[app] adding enumerable node: (%r, %r, %r)z%enumerable_node %r already registered)rL   rM   r5   r   r!   )rD   r   r   r   rJ   rE   rE   rF   add_enumerable_node  s    z+SphinxComponentRegistry.add_enumerable_nodez.tuple[Callable | None, Callable | None] | None)rK   inline_renderersblock_renderersr+   c                 C  sB   t d||| || jkr*ttd| || j|< || j|< d S )Nz+[app] adding html_math_renderer: %s, %r, %rz&math renderer %s is already registered)rL   rM   r6   r   r!   r7   )rD   rK   r   r   rE   rE   rF   add_html_math_renderer  s      

z.SphinxComponentRegistry.add_html_math_renderer)rK   
theme_pathr+   c                 C  s   || j |< d S r^   )r8   )rD   rK   r   rE   rE   rF   add_html_theme  s    z&SphinxComponentRegistry.add_html_theme)rR   extnamer+   c                 C  sf  ||j krdS |tkr0ttd|t|  dS td| }t| zt|}W nL tk
r } z.ttdt	
   ttd| ||W 5 d}~X Y nX t|dd}|dkrttd| i }nHz||}W n: tk
r } zttd||f |W 5 d}~X Y nX |dkr$i }n t|tsDttd	| i }t||f||j |< W 5 Q R X 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_BLACKLISTrL   r   r!   r$   r   ImportErrorverbose	traceback
format_excr   getattrr   r   dictr   )rD   rR   r   prefixmodr   r   metadatarE   rE   rF   rU     sV    

 


z&SphinxComponentRegistry.load_extensionzdict[str, str]rR   r+   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 )Zenv_version)r   rc   rK   )r   extrE   rE   rF   
<dictcomp>  s     z:SphinxComponentRegistry.get_envversion.<locals>.<dictcomp>Zsphinx)sphinx.environmentr   r   r`   )rD   rR   r   Z
envversionrE   rE   rF   get_envversion  s    z&SphinxComponentRegistry.get_envversionr
   )rR   r   r+   c                 C  s:   z| j | W S  tk
r    Y nX t||}|| j |< |S r^   )rB   rT   r    )rD   rR   r   Z	publisherrE   rE   rF   get_publisher  s    

z%SphinxComponentRegistry.get_publisher)F)N)F)F)F)F)rt   Nrt   F)F)F)F)F)NF)(r   rO   __qualname__rG   rP   rY   r[   r]   r_   rj   rn   rp   rs   rh   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   rE   rE   rE   rF   r)   3   sn   M	     #    
 	    .r)   r'   r   r*   )rR   configr+   c                 C  s\   | j j D ]>\}}|| jjkr.|| jj|< q| jj| dkr|| jj|< q| jj| j _dS )zDMerge any user-specified source_suffix with any added by extensions.N)registryr>   rg   r   )rR   r   r   r   rE   rE   rF   merge_source_suffix  s    r   zdict[str, Any]r   c                 C  s   | j dtdd ddddS )Nzconfig-initedi   )prioritybuiltinT)versionZparallel_read_safeZparallel_write_safe)connectr   )rR   rE   rE   rF   r     s
    r   )M__doc__
__future__r   sysr   	importlibr   typesr   typingr   r   r   r   Zdocutilsr	   Zdocutils.corer
   Zdocutils.nodesr   r   r   Zdocutils.parsersr   Zdocutils.parsers.rstr   Zdocutils.transformsr   version_infoimportlib.metadatar   Zimportlib_metadataZsphinx.buildersr   Zsphinx.configr   Zsphinx.domainsr   r   r   Zsphinx.domains.stdr   r   r   r   Zsphinx.errorsr   r   r   Zsphinx.extensionr   Z	sphinx.ior    Zsphinx.localer!   Zsphinx.parsersr   Zsphinx.rolesr"   Zsphinx.utilr#   Zsphinx.util.loggingr$   Zsphinx.util.typingr%   r&   Zsphinx.applicationr'   Zsphinx.ext.autodocr(   	getLoggerr   rL   r   r)   r   r   rE   rE   rE   rF   <module>   sT   

    :