o
    NiV                     @  s  d Z ddlmZ ddlZddlmZ ddl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mZ 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mZ ddl 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-m.Z.m/Z/ ddl0m1Z1 erddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZA e(BeCZDeEdZFeEdZGe$ ZHG dd deeI ZJG dd deJZKG dd  d e%ZLG d!d" d"eeI ZMG d#d$ d$e+ZNG d%d& d&eeI ZOG d'd( d(e+ZPG d)d* d*e%ZQeEd+ZRd[d0d1ZSd\d?d@ZTG dAdB dBe+ZUd]d^dGdHZVG dIdJ dJe+ZWG dKdL dLe%ZXG dMdN dNeZYd_dVdWZZd`dYdZZ[dS )azThe standard domain.    )annotationsN)copy)TYPE_CHECKINGAnyClassVarFinalcast)nodes)ElementNodesystem_message)	Directive
directives)
StringList)addnodes)desc_signaturepending_xref)ObjectDescription)DomainObjType)___)EmphasizedLiteralXRefRole)docname_joinloggingws_re)SphinxDirective)clean_astextmake_idmake_refnode)nested_parse_to_nodes)CallableIterableIteratorSet)Sphinx)Builder)BuildEnvironment)ExtensionMetadata
OptionSpecRoleFunctionTitleGetterz ((?:/|--|-|\+)?[^\s=]+)(=?\s*.*)z`((~?[\w-]*:)?\w+)`c                   @  s>   e Zd ZU dZdZded< dZded< dddZdddZdS )GenericObjectzM
    A generic x-ref directive registered with Sphinx.add_object_type().
     strindextemplateNz=Callable[[BuildEnvironment, str, desc_signature], str] | None
parse_nodesigsignoder   returnc                 C  sB   | j r|  | j||}|S |  |t||7 }td|}|S )N )r1   envclearr   	desc_namer   sub)selfr2   r3   name r<   O/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/domains/std/__init__.pyhandle_signature8   s   zGenericObject.handle_signaturer;   Nonec           	      C  s   t | j| jj| j|}|d | | jj| | jrS| jd}|dkr>| jd | 	 }| j|d d  	 |f }nd}| j|f }| j
d |||dd f | jjj}|j| j|||d d S )	Nids:   singleentriesr.   location)r   r6   statedocumentobjtypeappendnote_explicit_targetr0   findstrip	indexnodedomainsstandard_domainnote_object)	r:   r;   r2   r3   node_idcolon	indextype
indexentrystdr<   r<   r=   add_target_and_indexB   s   
z"GenericObject.add_target_and_indexr2   r/   r3   r   r4   r/   r;   r/   r2   r/   r3   r   r4   r?   )	__name__
__module____qualname____doc__r0   __annotations__r1   r>   rX   r<   r<   r<   r=   r-   0   s   
 

r-   c                   @  s   e Zd ZedZdS )EnvVarenvironment variable; %sN)r[   r\   r]   r   r0   r<   r<   r<   r=   r`   U   s    r`   c                   @  s   e Zd ZdZdddZdS )EnvVarXRefRolezQ
    Cross-referencing role for environment variables (adds an index entry).
    rI   nodes.documentr6   r(   noder
   is_refboolr4   'tuple[list[Node], list[system_message]]c           	      C  s~   |s|gg fS |d }d| d }t }d||dd fdtd| |dd fg|d< tjdd|gd}|| |||gg fS )	N	reftargetzindex-%sindexrD   r.   ra   rE   r@   )new_serialnor   ri   r   r	   targetrL   )	r:   rI   r6   rd   re   varnametgtidrO   
targetnoder<   r<   r=   result_nodes^   s   

zEnvVarXRefRole.result_nodesN)
rI   rc   r6   r(   rd   r
   re   rf   r4   rg   )r[   r\   r]   r^   rp   r<   r<   r<   r=   rb   Y   s    rb   c                   @  s   e Zd ZU edZded< ejejejejejejdZ	ded< d#ddZ
d$ddZd%ddZd&ddZd'ddZd(ddZd)d d!Zd"S )*ConfigurationValuez%s; configuration valuer/   index_template)zno-indexzno-index-entryzno-contents-entryzno-typesettingtypedefaultClassVar[OptionSpec]option_specr2   sig_noder   r4   c                 C  s0   |   |t||7 }td|}||d< |S )Nr5   fullname)r7   r   r8   r   r9   )r:   r2   rw   r;   r<   r<   r=   r>   y   s
   z#ConfigurationValue.handle_signaturetuple[str, ...]c                 C  s
   |d fS )Nrx   r<   )r:   rw   r<   r<   r=   _object_hierarchy_parts   s   
z*ConfigurationValue._object_hierarchy_partsc                 C  s   | dsdS |d \}|S )N
_toc_partsr.   )get)r:   rw   r;   r<   r<   r=   _toc_entry_name   s   

z"ConfigurationValue._toc_entry_namer;   r3   r?   c                 C  sx   t | j| jj| j|}|d | | jj| | j| }| jd d||dd f | jj	j
}|j| j|||d d S )Nr@   rE   pairr.   rF   )r   r6   rH   rI   rJ   rK   rL   rr   rO   rP   rQ   rR   )r:   r;   r2   r3   rS   index_entrydomainr<   r<   r=   rX      s   

z'ConfigurationValue.add_target_and_indexcontent_nodeaddnodes.desc_contentc                 C  s   t  }d| jv r| | jd \}}|| ||7 }d| jv r4| | jd \}}|| ||7 }t|jdkrC|d| dS dS )z,Insert *type* and *default* as a field list.rs   rt   r   N)	r	   
field_listoptionsformat_typerK   format_defaultlenchildreninsert)r:   r   r   fieldmsgsr<   r<   r=   transform_content   s   



z$ConfigurationValue.transform_contenttype_(tuple[nodes.field, list[system_message]]c                 C  D   | j || jd\}}tdtdtdtjdg|R  }||fS )zFormats the ``:type:`` option.linenor.   Typeparse_inliner   r	   r   
field_namer   
field_body)r:   r   parsedr   r   r<   r<   r=   r         zConfigurationValue.format_typert   c                 C  r   )z!Formats the ``:default:`` option.r   r.   Defaultr   )r:   rt   r   r   r   r<   r<   r=   r      r   z!ConfigurationValue.format_defaultN)r2   r/   rw   r   r4   r/   )rw   r   r4   ry   )rw   r   r4   r/   rZ   )r   r   r4   r?   )r   r/   r4   r   )rt   r/   r4   r   )r[   r\   r]   r   rr   r_   r   flagunchanged_requiredrv   r>   rz   r}   rX   r   r   r   r<   r<   r<   r=   rq   n   s    
 
	



	

rq   c                   @  s<   e Zd ZU dZdZdZdZdZdZi Z	de
d< dddZdS )Targetz@
    Generic target for user-defined cross-reference types.
    r.   FrC   r   Tru   rv   r4   
list[Node]c                 C  s  t d| jd  }t| j| jj| j|}t	j
dd|gd}| | | jj| |g}| jrf| j|f }d}|d}|dkrT|d |  }||d d   }tj|||dd fgd	}|d| | j}	d| jv rw| jdd\}
}	| jjj}|j|	|||d
 |S )Nr5   r   r.   rj   rD   rA   rB   rC   )rE   rF   )r   r9   	argumentsrN   r   r6   rH   rI   r;   r	   rl   set_source_inforL   r0   rM   r   ri   r   splitrP   rQ   rR   )r:   rx   rS   rd   retrV   rU   rT   inoder;   r   rW   r<   r<   r=   run   s*   



z
Target.runNr4   r   )r[   r\   r]   r^   r0   has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacerv   r_   r   r<   r<   r<   r=   r      s   
 r   c                   @  s$   e Zd ZdZdddZdddZdS )	Cmdoptionz;
    Description of a command-line option (.. option).
    r2   r/   r3   r   r4   c                 C  s  d}d}| dD ]}| }t|}|s!tjtd||d q	| \}}|d dkr=|d dkr=|d	d }d| }|r[| jj	j
rS|td
d
7 }|t 7 }n|tdd7 }|t||7 }| jj	j
rd}	|r|d dkr|d dkrd}	|tdd7 }|dd }n%|d dkr|t 7 }| }n|d dkr|tdd7 }|dd	 }t|D ]}
t|
tjr|t|
 7 }q||
7 }q|	r|tdd7 }n|t||7 }|s|}|g|d< n|d | |d7 }q	|st|S )z/Transform an option description into RST nodes.r   r.   z, znMalformed option description %r, should look like "opt", "-opt args", "--opt args", "/opt args" or "+opt args"rF   rB   []N,FTrC   r5   =allnames)r   rN   option_desc_rematchloggerwarningr   groupsr6   configoption_emphasise_placeholdersr   desc_sig_punctuationdesc_sig_spacedesc_addnamer8   	samp_roleparse
isinstancer	   TextastextrK   
ValueError)r:   r2   r3   count	firstnamepotential_optionmoptnameargsadd_end_bracketpartr<   r<   r=   r>      sd   






zCmdoption.handle_signaturer   r?   c                 C  s  | j jd}|dg D ],}dg}|r|| |ds#|d d|}t| j | jj||}|d | q| jj	| | j j
j}	|dg D ]}|	||| j j|d d  qL|rftd	| }
ntd
}
|dg D ]}|
 d| }| jd d||d d dd f qpd S )Nstd:programr   	cmdoption)-/argr   r@   r   z%s command line optionzcommand line optionz; rE   r~   r.   )r6   ref_contextr|   rK   
startswithjoinr   rH   rI   rL   rP   rQ   add_program_optiondocnamer   rO   )r:   r   r2   r3   currprogramr   prefixesprefixrS   r   descroptionentryr<   r<   r=   rX     s.   




$zCmdoption.add_target_and_indexNrY   )r   r/   r2   r/   r3   r   r4   r?   )r[   r\   r]   r^   r>   rX   r<   r<   r<   r=   r      s    
:r   c                   @  8   e Zd ZU dZdZdZdZdZi Zde	d< dd
dZ
dS )ProgramzI
    Directive to name the program for which options are documented.
    FrC   r   Tru   rv   r4   r   c                 C  sB   t d| jd  }|dkr| jjdd  g S || jjd< g S )Nr   r   r?   r   )r   r9   r   rN   r6   r   pop)r:   programr<   r<   r=   r   D  s   zProgram.runNr   r[   r\   r]   r^   r   r   r   r   rv   r_   r   r<   r<   r<   r=   r   9     
 r   c                   @     e Zd ZdddZdS )OptionXRefRoler6   r(   refnoder
   has_explicit_titlerf   titler/   rl   r4   tuple[str, str]c                 C  s   |j d|d< ||fS )Nr   )r   r|   )r:   r6   r   r   r   rl   r<   r<   r=   process_linkN  s   zOptionXRefRole.process_linkNr6   r(   r   r
   r   rf   r   r/   rl   r/   r4   r   r[   r\   r]   r   r<   r<   r<   r=   r   M      r   z +: +liner/   r4   tuple[str, str | None]c                 C  s2   t | }|d }t|dkr|d nd }||fS )Nr      rC   )_term_classifiers_rer   r   )r   partstermfirst_classifierr<   r<   r=   split_term_classifiersW  s   
r   r6   r(   	textnodesIterable[Node]	index_key
str | Nonesourcer   intrS   rI   rc   
nodes.termc           
      C  s   t jddg|R  }||_||_| }|r|d | nt| |d|}|d | || | jj	j
|||d t }	d||d|fg|	d< |j|j|	_|	_||	 |S )Nr.   r@   r   rF   rD   mainrE   )r	   r   r   r   r   rK   r   rL   rP   rQ   
_note_termr   ri   )
r6   r   r   r   r   rS   rI   r   termtextrO   r<   r<   r=   make_glossary_term_  s   

r   c                   @  s>   e Zd ZU dZdZdZdZdZdej	iZ
ded< dd
dZdS )Glossaryz[
    Directive to create a glossary with cross-reference targets for :term:
    roles.
    Tr   Fsortedru   rv   r4   r   c                 C  s  t  }| jj|_d| jv |d< g }d}d}d}g }t| j| jjddD ]\}\}}	|s>|r;|r;|d d d||	 d}q$|r|d 	 s|
d	rNd}q$d}|rr|sc|| jjjtd
||	d ||||	fgt f d}nb|r|| jjjtd||	d |r|d d |||	f nB|| jjjtd||	d n2|rn/|sd}t|t|  }
|r|d d ||
d  ||	 n|| jjjtd||	d d}q$g }|D ]m\}}g }g }|D ]/\}}}	t|\}}| j||	d\}}t| j||||	d | jjd}||_|| || q|| |r.|jd d }t| j||dd}ng }|tjdg|R   |tjdg|R   qtjdg|R  }|d d ||7 }g ||S )Nr   TF)strictrB   rC   r.   r   z.. z,glossary term must be preceded by empty line)r   r   z3glossary terms must not be separated by empty linesz4glossary seems to be misformatted, check indentationr   )rS   rI   )offsetallow_section_headingsclassesglossary)r   r   rH   rI   r   zipcontentitemsrK   isspacer   reporterr   r   r   r   lstripr   r   r   r6   	rawsourceextendr!   r	   
definitiondefinition_list_itemdefinition_list)r:   rd   rE   in_definition
in_comment	was_emptymessagesr   r   r   
indent_lenr  termsr	  	termnodessystem_messagesterm_r   r   sysmsgr   r   definition_nodesdlistr<   r<   r=   r     s   
 

 


zGlossary.runNr   )r[   r\   r]   r^   r   r   r   r   r   r   rv   r_   r   r<   r<   r<   r=   r   |  s   
 r   r.   textproductionGroupr   c                 C  s&  t |dkr
|d7 }g }d}t| D ]k}| |kr+| ||  }|t| |d}d|v r\|d dkrH|d\}}|dd  }	n|d dkrW|dd  }|}	n|}|}	n|}|| }	t	|dd|	d}
|
tj
||dgd	7 }
||
 | }q|t | k r|t| |d   |S )
Nr   rA   rC   ~tokenrW   )reftype	refdomainrh   xrefr   )r   token_refinditerstartrK   r	   r   groupr   r   literalend)r  r  retnodesposr   txtr  r   r   rl   r   r<   r<   r=   token_xrefs  s:   


r)  c                   @  r   )ProductionListz0
    Directive to list grammar productions.
    FrC   r   Tru   rv   r4   r   c              	   C  sF  | j jj}t }| | td}|d| j	d 
d}d}d}|D ]z}|s2d|vr2| }q%d}z
|
dd\}}	W n tyJ   Y  |gS w t|}
| }||
d	< |
d	 rd
| }t| j | jj||}|
d | | jj|
|
 t|dkr| d| }n|}|jd|||d |
t|	| ||
 q%|gS )Nz\\\nr.   r   
FrA   TrC   	tokennamezgrammar-token-%sr@   r  rF   )r6   rP   rQ   r   productionlistr   recompiler9   r   r   rN   r   
productionr   rH   rI   rK   note_implicit_targetr   rR   r  r)  )r:   r   rd   nl_escape_relinesr  first_rule_seenruler;   tokenssubnoder   rS   objNamer<   r<   r=   r     sB   



zProductionList.runNr   r   r<   r<   r<   r=   r*    r   r*  c                   @  r   )TokenXRefRoler6   r(   r   r
   r   rf   r   r/   rl   r4   r   c                 C  sN   | d}| js#|d dkr#d|v r|d\}}||fS |dd  }||fS )Nr  r   rA   rC   )r  r   r   )r:   r6   r   r   r   rl   r   r<   r<   r=   r   D  s   
zTokenXRefRole.process_linkNr   r   r<   r<   r<   r=   r9  C  r   r9  c                      s  e Zd ZU dZdZdZeeddddeedd	ddeed
ddddeddeeddeeddeedddddZde	d< e
eeeeeedZde	d< eddedde e eejddedejddedddeddedejd d!	Zd"e	d#< i i d$d%ed&fd'd%ed(fd)d%ed*fd+d,d-d.d+d/Zd0e	d1< d$ed&fd'ed(fd)ed*fd+Zd2e	d3< d4d5d6d7d8d9Zejd:ejd;ejd<iZd=e	d>< d fdCdDZ	%dddJdKZ e!ddMdNZ"dddTdUZ#e!ddVdWZ$dddXdYZ%e!dd[d\Z&e!dd^d_Z'e!dd`daZ(ddbdcZ)ddhdiZ*ddkdlZ+ddodpZ,ddxdyZ-dddZ.dddZ/dddZ0dddZ1dddZ2dddZ3dddZ4dddZ5dddZ6dddZ7ddddZ8dddZ9dddZ:dddZ;dddZ<dddZ=  Z>S )StandardDomainzs
    Domain for all objects that don't fit into another domain or are added
    via the application interface.
    rW   r   zglossary termr   rB   )
searchpriozgrammar tokenr  zreference labelrefkeywordzconfiguration valueconfvalzenvironment variableenvvarzprogram optionr   rI   doc)r   r  labelr>  r?  r   r@  zdict[str, ObjType]object_types)r   r   r   r>  r?  r   r-  zdict[str, type[Directive]]r   T)warn_dangling)innernodeclassrC  )	lowercaserD  rC  )rE  rC  )rC  rD  )	r   r>  r?  r  r   r<  numrefr=  r@  z"dict[str, RoleFunction | XRefRole]rolesgenindexr.   Indexpy-modindexzModule IndexsearchzSearch Page)rH  modindexrK  )rH  r.   )rJ  r.   )rK  r.   )progoptionsobjectslabels
anonlabelsr   initial_datadict[str, tuple[str, str]]_virtual_doc_namesz term not in glossary: %(target)rzundefined label: %(target)rzunknown keyword: %(target)rzunknown document: %(target)rzunknown option: %(target)r)r   rF  r=  r@  r   )figureN)tableN)
code-blockNz0dict[type[Node], tuple[str, TitleGetter | None]]enumerable_nodesr6   r(   r4   r?   c                   s>   t  | t| j| _|jjj D ]	\}}|| j|< qd S N)super__init__r   rW  appregistryr  )r:   r6   rd   settings	__class__r<   r=   rZ    s
   zStandardDomain.__init__r;   r/   r   rS   r   c                 C  sj   || j v r | j | ||fkr ttd|| j| j | d  ||f| j |< |r3|||f| j|< dS dS )aU  Add a hyperlink target for cross reference.

        .. warning::

           This is only for internal use.  Please don't use this from your extension.
           ``document.note_explicit_target()`` or ``note_implicit_target()`` are recommended to
           add a hyperlink target to the document.

           This only adds a hyperlink target to the StandardDomain.  And this does not add a
           node_id to node.  Therefore, it is very fragile to calling this without
           understanding hyperlink target framework in both docutils and Sphinx.

        .. versionadded:: 3.0
        (duplicate label %s, other instance in %sr   N)rP  r   r   r   r6   doc2pathrO  )r:   r;   r   rS   r   r<   r<   r=   note_hyperlink_target  s   
z$StandardDomain.note_hyperlink_target&dict[tuple[str, str], tuple[str, str]]c                 C     | j di S )NrN  data
setdefaultr:   r<   r<   r=   rN       zStandardDomain.objectsNrJ   labelidrG   r   c                 C  sR   ||f| j v r| j ||f d }tjtd||||d | jj|f| j ||f< dS )zRNote a generic object for cross reference.

        .. versionadded:: 3.0
        r   z4duplicate %s description of %s, other instance in %srF   N)rN  r   r   r   r6   r   )r:   rJ   r;   rj  rG   r   r<   r<   r=   rR     s   
zStandardDomain.note_objectc                 C  rd  )z2.. note:: Will be removed soon. internal use only.r  re  rh  r<   r<   r=   _terms  s   zStandardDomain._termsc                 C  s*   |  d||| | jj|f| j| < dS )zeNote a term for cross reference.

        .. note:: Will be removed soon. internal use only.
        r   N)rR   r6   r   rk  lower)r:   r   rj  rG   r<   r<   r=   r     s   zStandardDomain._note_term-dict[tuple[str | None, str], tuple[str, str]]c                 C  rd  )NrM  re  rh  r<   r<   r=   rM    ri  zStandardDomain.progoptionsdict[str, tuple[str, str, str]]c                 C  rd  )NrO  re  rh  r<   r<   r=   rO    ri  zStandardDomain.labelsc                 C  rd  )NrP  re  rh  r<   r<   r=   rP    ri  zStandardDomain.anonlabelsc                 C  s   d }t | j D ]\}\}}||kr| j|= q	t | j D ]\}\}}||kr-| j|= qt | j D ]\}\}}||krC| j|= q5t | j D ]\}\}}}||krZ| j|= qKt | j D ]\}\}}||krp| j|= qbd S rX  )listrM  r  rN  rk  rO  rP  )r:   r   keyfn_lr<   r<   r=   	clear_doc  s,   zStandardDomain.clear_docdocnamesSet[str]	otherdatadict[str, Any]c                 C  s   |d   D ]\}}|d |v r|| j|< q|d   D ]\}}|d |v r+|| j|< q|d   D ]\}}|d |v rA|| j|< q2|d   D ]\}}|d |v rW|| j|< qH|d   D ]\}}|d |v rm|| j|< q^d S )NrM  r   rN  r  rO  rP  )r  rM  rN  rk  rO  rP  )r:   rt  rv  rp  rf  r<   r<   r=   merge_domaindata  s*   




zStandardDomain.merge_domaindatarc   c                 C  s  |j  D ]\}}|sq|j| }|d u rq|j| }t|tjr3d|v r3|j|d }|d d }|jdksBd|v sB|j	drCq|| j
v r[tjtd||| j
| d |d ||f| j|< |jd	krtttj|d }t|}	ne|jd
kr~t|}	n[| |r| |pd}	|	sqnKt|tjtjB r|jrttj|jd }t|tjtjB rttj|jd }t|tjtjB rt|}	nt|tj d }
|
r|
dr|
d }	nq|||	f| j
|< qd S )Nrefidnamesr   footnoterefuridesc_r`  rF   sectionrubricr.   caption)!	nametypesr  nameidsr@   r   r	   rl   r|   tagnamer   rO  r   r   r   ra  rP  r   r   r   is_enumerable_nodeget_numfig_titler  r   r   r
   r   r
  r   r   nextfindallr   toctree)r:   r6   r   rI   r;   explicitrj  rd   r   sectnamer  r<   r<   r=   process_doc  sZ   












zStandardDomain.process_docr   r   c                 C  s(   ||f| j vr||f| j ||f< d S d S rX  )rM  )r:   r   r;   r   rj  r<   r<   r=   r   F  s   z!StandardDomain.add_program_optionfromdocnamebuilderr'   r  rolenamer   r
   c                 K  s   | dtj}|dddi|}	t||}
|
dd ur-|
d d |
d d|  ||kr6||	d< n td}||d	< ||d
< ||||	d< |rV|	d  d| 7  < |	|
 |	S )N	nodeclassr.   internalTr   rW   zstd-ry  
refdocnamerefsectnamer|  #r.   r.   )r   r	   	referenceinliner|   rK   r   get_relative_uri)r:   r  r  r   rj  r  r  r   r  newnode	innernodecontnoder<   r<   r=   build_reference_nodeL  s$   

z#StandardDomain.build_reference_nodetyprl   rd   r   r  Element | Nonec           	      C  sz   |dkr| j }n+|dkr| j}n#|dkr| j}n|dkr | j}n|dkr(| j}n|dkr0| j}n| j}||||||||S )Nr<  rF  r=  r@  r   r   )_resolve_ref_xref_resolve_numref_xref_resolve_keyword_xref_resolve_doc_xref_resolve_option_xref_resolve_term_xref_resolve_obj_xref)	r:   r6   r  r  r  rl   rd   r  resolverr<   r<   r=   resolve_xrefe  s   zStandardDomain.resolve_xrefc                 C  sT   |d r| j |d\}}	| }
n
| j|d\}}	}
|s d S | ||||	|
dS )Nrefexplicitr  r.   r.   r.   r<  )rP  r|   r   rO  r  )r:   r6   r  r  r  rl   rd   r  r   rj  r  r<   r<   r=   r  y  s   
z StandardDomain._resolve_ref_xrefc              
   C  s
  || j v r| j |d\}}	}
n| j|d\}}	d }
|sd S ||j|	}|d us.J | |}|d u r9d S |dkrN|jjdu rNtj	t
d|d |S z| |||||}|d u r_|W S W n tyu   tj	t
d|	|d | Y S w zM|d r| }n|jj|d	}|
d u rd
|v rtj	t
d||d |W S dtt|}d
|v sd|v r|
r|j|
|d}n|j|d}n|| }W n3 ty } ztj	t
d|||d |W  Y d }~S d }~w ty   tj	t
d||d | Y S w | j||||	|dtj|dS )Nr  r  r~  Fz(numfig is disabled. :numref: is ignored.rF   zBFailed to create a cross reference. Any number is not assigned: %sr  r.   z{name}zthe link has no caption: %s.number)r;   r  )r  zinvalid numfig_format: %s (%r)zinvalid numfig_format: %srF  )r  r   )rO  r|   rP  get_doctreer@   get_enumerable_node_typer   numfigr   r   r   get_fignumberr   r   numfig_formatr   mapr/   formatKeyError	TypeErrorr  r   number_reference)r:   r6   r  r  r  rl   rd   r  r   rj  fignametarget_nodefigtype	fignumberr   fignumnewtitleexcr<   r<   r=   r    sh   



z#StandardDomain._resolve_numref_xrefc                 C  s,   | j |d\}}	}
|sd S t||||	|S )Nr  )rO  r|   r    )r:   r6   r  r  r  rl   rd   r  r   rj  r   r<   r<   r=   r    s   z$StandardDomain._resolve_keyword_xrefc                 C  sj   | d|}t||d }	|	|jvrd S |d r| }
nt|j|	 }
tj|
|
dgd}t|||	d |S )Nrefdocrh   r  r@  r  )	r|   r   all_docsr   r   titlesr	   r  r    )r:   r6   r  r  r  rl   rd   r  r  r   r  r  r<   r<   r=   r    s   

z StandardDomain._resolve_doc_xrefc                 C  s   | d}| }| j ||fd\}	}
|	s6dD ]}||v r5||\}}}| j ||fd\}	}
|	r5 nq|	sfg }t|rdt|d\}}|| d|}| j ||fd\}	}
|	r_nt|s?d S t	|||	|
|S )Nr   r  )r   z[=r5   rC   r   )
r|   rN   rM  	partitionr   rK  r   rK   r   r    )r:   r6   r  r  r  rl   rd   r  prognamer   rj  needlestemr   commands
subcommandr<   r<   r=   r    s2   




	z#StandardDomain._resolve_option_xrefc              	   C  sR   |  |||||||}|r|S | | jv r'| j|  \}	}
t|||	|
|S d S rX  )r  rl  rk  r    )r:   r6   r  r  r  rl   rd   r  resultr   rj  r<   r<   r=   r    s   z!StandardDomain._resolve_term_xrefc                 C  s\   |  |pg }|D ]}	|	|f| jv r| j|	|f \}
} nq	d\}
}|
s&d S t|||
||S )Nr  )objtypes_for_rolerN  r    )r:   r6   r  r  r  rl   rd   r  objtypesrJ   r   rj  r<   r<   r=   r    s   z StandardDomain._resolve_obj_xreflist[tuple[str, Element]]c              
   C  s   g }|  }dD ]}	| ||||	|	dkr|n|||}
|
r&|d|	 |
f q| jD ].}||f}|dkr8||f}|| jv rX| j| \}}d| | }	||	t|||||f q*|S )N)r<  r   r<  zstd:r   )rl  r  rK   rB  rN  role_for_objtyper    )r:   r6   r  r  rl   rd   r  resultsltargetroleresrJ   rp  r   rj  r<   r<   r=   resolve_any_xref%  s,   

zStandardDomain.resolve_any_xref-Iterator[tuple[str, str, str, str, str, int]]c                 c  s8   | j jD ]}|t| j j| d|ddfV  q| j D ]*\\}}}|r9| d| }||d|d |d dfV  q||d|d |d dfV  q| j D ]\\}}}||||d |d | j| jd fV  qL| j	 D ]\}\}}	}
||
d	||	dfV  qkt
| j	}| j D ]\}\}}	||vr||d	||	dfV  qd S )
Nr@  r.   rB   r  r   r   rC   r;  rA  )r6   r  r   r  rM  r  rN  rB  attrsrO  setrP  )r:   r@  progr   inforx   rs   r;   r   rj  sectionnamenon_anon_labelsr<   r<   r=   get_objects<  s(    
zStandardDomain.get_objectsFrs   r   primaryrf   c                 C  s   |j S rX  )lname)r:   rs   r  r<   r<   r=   get_type_nameQ  s   zStandardDomain.get_type_namer   c                 C  s   |j | jv S rX  )r_  rW  )r:   rd   r<   r<   r=   r  U  s   z!StandardDomain.is_enumerable_nodec                 C  s`   |  |r.tt|}| j|jd\}}|r||S |D ]}t|tjtj	B r-t
|  S qdS )z?Get the title of enumerable nodes to refer them using its titleNNN)r  r   r
   rW  r|   r_  r   r	   r  r   r   )r:   rd   elemr   title_getterr7  r<   r<   r=   r  X  s   

zStandardDomain.get_numfig_titlec                 C  sV   ddd}t |tjrd	S t |tjrd
|v r||tjrdS | j|jd\}}|S )zGet type of enumerable nodes.rd   r
   clsrs   r4   rf   c                   s   t  fdd| D S )Nc                 3  s    | ]}t | V  qd S rX  )r   ).0childr  r<   r=   	<genexpr>i  s    zMStandardDomain.get_enumerable_node_type.<locals>.has_child.<locals>.<genexpr>)any)rd   r  r<   r  r=   	has_childh  s   z:StandardDomain.get_enumerable_node_type.<locals>.has_childr~  literal_blockrV  r  N)rd   r
   r  rs   r4   rf   )r   r	   r~  	containerr  rW  r|   r_  )r:   rd   r  r  r   r<   r<   r=   r  f  s   

z'StandardDomain.get_enumerable_node_typer  r  tuple[int, ...] | Nonec           	   
   C  s   |dkr1|j dkrdS ||jvrtd|d d  }||j| vr)|j| dS |j| |S z|d d }|j| | | W S  ttfyR } zt|d }~ww )Nr~  latexr<   r  r@   r   r.   )r;   toc_secnumbersr   r|   toc_fignumbersr  
IndexError)	r:   r6   r  r  r   r  
anchorname	figure_idr  r<   r<   r=   r  v  s    

zStandardDomain.get_fignumberc                 C  sd   | ddkr0| d}t| d}|r|d| | }|r.d|}| d| S d S d S )Nr  r   r   rh   r   r   r  )r|   r   r   r   r   r   )r:   rd   r  commandr   command_strr<   r<   r=   get_full_qualified_name  s   

z&StandardDomain.get_full_qualified_name)r6   r(   r4   r?   r.   )
r;   r/   r   r/   rS   r/   r   r/   r4   r?   )r4   rc  rX  )
rJ   r/   r;   r/   rj  r/   rG   r   r4   r?   )r4   rR  )r   r/   rj  r/   rG   r   r4   r?   )r4   rm  )r4   rn  )r   r/   r4   r?   )rt  ru  rv  rw  r4   r?   )r6   r(   r   r/   rI   rc   r4   r?   )
r   r   r;   r/   r   r/   rj  r/   r4   r?   )r  r/   r  r'   r   r/   rj  r/   r  r/   r  r/   r   r   r4   r
   )r6   r(   r  r/   r  r'   r  r/   rl   r/   rd   r   r  r
   r4   r  )r6   r(   r  r/   r  r'   rl   r/   rd   r   r  r
   r4   r  )r4   r  )F)rs   r   r  rf   r4   r/   )rd   r   r4   rf   )rd   r   r4   r   )r6   r(   r  r'   r  r/   r   r/   r  r
   r4   r  )rd   r
   r4   r   )?r[   r\   r]   r^   r;   rA  r   r   rB  r_   r   r   rq   r`   r   r*  r   r   r   rb   r9  r	   r  rG  rQ  rS  dangling_warningsrT  rU  r  rW  rZ  rb  propertyrN  rR   rk  r   rM  rO  rP  rs  rx  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r<   r<   r^  r=   r:  O  s   
 




		



3




@



!






r:  r[  r&   r   r   rd   r   bool | Nonec                 C  s^   |r|j dks|d dkrd S |d }||jvrtd}ntd}tj|||d|d d dS )	NrW   r  r<  rh   zundefined label: %rzDFailed to create a cross reference. A title or caption not found: %r)rG   rs   subtypeT)r;   rP  r   r   r   )r[  r   rd   rl   msgr<   r<   r=   warn_missing_reference  s   

r  r)   c                 C  s$   |  t | dt dddddS )Nzwarn-missing-referencebuiltinr   T)versionenv_versionparallel_read_safeparallel_write_safe)
add_domainr:  connectr  )r[  r<   r<   r=   setup  s   
r  )r   r/   r4   r   )r6   r(   r   r   r   r   r   r/   r   r   rS   r   rI   rc   r4   r   r  )r  r/   r  r/   r4   r   )r[  r&   r   r   rd   r   r4   r  )r[  r&   r4   r)   )\r^   
__future__r   r.  r   typingr   r   r   r   r   docutilsr	   docutils.nodesr
   r   r   docutils.parsers.rstr   r   docutils.statemachiner   sphinxr   sphinx.addnodesr   r   sphinx.directivesr   sphinx.domainsr   r   sphinx.localer   r   sphinx.rolesr   r   sphinx.utilr   r   r   sphinx.util.docutilsr   sphinx.util.nodesr   r   r    sphinx.util.parsingr!   collections.abcr"   r#   r$   r%   sphinx.applicationr&   sphinx.buildersr'   sphinx.environmentr(   sphinx.util.typingr)   r*   r+   r,   	getLoggerr[   r   r/  r   r   r   r/   r-   r`   rb   rq   r   r   r   r   r   r   r   r   r)  r*  r9  r:  r  r  r<   r<   r<   r=   <module>   sf    


%G(\


u!1    
X