U
    \ShS                     @  s   d 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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 ddlmZ e e!Z"G dd deZ#G dd deZ$dddddZ%dS )zThe math domain.    )annotations)TYPE_CHECKINGAnyIterable)nodes)ElementNodemake_idsystem_message)pending_xref)Domain)BuildEnvironment)__)XRefRole)logging)make_refnode)Sphinx)Builderc                   @  s"   e Zd ZddddddddZd	S )
MathReferenceRolenodes.documentr   r   boolz'tuple[list[Node], list[system_message]])documentenvnodeis_refreturnc                 C  s   d|d< |gg fS )NmathZ	refdomain )selfr   r   r   r   r   r   F/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/domains/math.pyresult_nodes   s    zMathReferenceRole.result_nodesN)__name__
__module____qualname__r    r   r   r   r   r      s   r   c                	   @  s  e Zd ZU dZdZdZi i dZded< ddiZe	j
d	iZd
e iZeddddZd8dddddddZdddddZdddddddZdddd d!Zd"ddd#d$d%Zddd&ddd'd(d)d*d+d,Zddd&dd'd(d-d.d/d0Zd1dd2d3Zd9d4d5dd6d7ZdS ):
MathDomainzMathematics domain.r   Zmathematics)objectshas_equationsdict[str, Any]initial_dataeqzequation not found: %(target)s)displaymathNnumrefzdict[str, tuple[str, int]])r   c                 C  s   | j di S )Nr%   )data
setdefaultr   r   r   r   	equations4   s    zMathDomain.equationsNstrr   None)docnamelabelidlocationr   c                 C  sP   || j kr2| j | d }tjtd||f |d || jdd f| j |< d S )Nr   z4duplicate label of equation %s, other instance in %sr4   eqno   )r/   loggerwarningr   r   Znew_serialno)r   r2   r3   r4   otherr   r   r   note_equation8   s    

zMathDomain.note_equationz
int | None)r3   r   c                 C  s    || j kr| j | d S d S d S )Nr7   )r/   )r   r3   r   r   r   get_equation_number_for@   s    
z"MathDomain.get_equation_number_forr   r   )r   r2   r   r   c                 C  s,   ddddd}t ||| jd |< d S )Nr   r   )r   r   c                 S  s   t | tjtjfS N)
isinstancer   r   
math_block)r   r   r   r   	math_nodeH   s    z)MathDomain.process_doc.<locals>.math_noder&   )anyfindallr,   )r   r   r2   r   r@   r   r   r   process_docF   s    zMathDomain.process_doc)r2   r   c                 C  sB   t | j D ]\}\}}||kr| j|= q| jd |d  d S )Nr&   )listr/   itemsr,   pop)r   r2   Zequation_iddocZ_eqnor   r   r   	clear_docM   s    
zMathDomain.clear_doczIterable[str])docnames	otherdatar   c                 C  sT   |d   D ]"\}\}}||kr||f| j|< q|D ]}|d | | jd |< q4d S )Nr%   r&   )rE   r/   r,   )r   rI   rJ   r3   rG   r6   r2   r   r   r   merge_domaindataT   s
    zMathDomain.merge_domaindatar   r   r   zElement | None)r   fromdocnamebuildertyptargetr   contnoder   c              
   C  s  |dkst | j|}|r|\}	}
td| }|jjrz|jjrz|	|jkrt|j|	 d |d}dt	t
|}qd}nt
|
}z"|jjpd}t|j|d}W nR tk
r } z4tjtd	||d
 td|
 }td|
 }W 5 d }~X Y nX t|||	||S d S d S )N)r)   r+   zequation-%sr*   r   . z
({number}))numberzInvalid math_eqref_format: %rr5   z(%d))AssertionErrorr/   getr	   configZmath_numfigZnumfigZtoc_fignumbersjoinmapr0   Zmath_eqref_formatr   TextformatKeyErrorr8   r9   r   r   )r   r   rL   rM   rN   rO   r   rP   resultr2   rS   Znode_idnumbersr6   Zeqref_formattitleexcr   r   r   resolve_xref\   s,    
 zMathDomain.resolve_xrefzlist[tuple[str, Element]])r   rL   rM   rO   r   rP   r   c              	   C  s0   |  |||d|||}|d kr"g S d|fgS d S )Nr)   )r`   )r   r   rL   rM   rO   r   rP   Zrefnoder   r   r   resolve_any_xrefz   s    zMathDomain.resolve_any_xrefz-Iterable[tuple[str, str, str, str, str, int]]c                 C  s   g S r=   r   r.   r   r   r   get_objects   s    zMathDomain.get_objectsz
str | Noner   c                 C  s,   |r| j d |dS t| j d  S d S )Nr&   F)r,   rU   rA   values)r   r2   r   r   r   r&      s    zMathDomain.has_equations)N)N)r!   r"   r#   __doc__namelabelr(   __annotations__Zdangling_warningsr   r?   Zenumerable_nodesr   Zrolespropertyr/   r;   r<   rC   rH   rK   r`   ra   rb   r&   r   r   r   r   r$   !   s4   
   	r$   r   r'   )appr   c                 C  s*   |  t | dtdd dddddS )Nr)   T)Zwarn_danglingbuiltin   )versionZenv_versionZparallel_read_safeZparallel_write_safe)Z
add_domainr$   Zadd_roler   )ri   r   r   r   setup   s    
rm   N)&rd   
__future__r   typingr   r   r   Zdocutilsr   Zdocutils.nodesr   r   r	   r
   Zsphinx.addnodesr   Zsphinx.domainsr   Zsphinx.environmentr   Zsphinx.localer   Zsphinx.rolesr   Zsphinx.utilr   Zsphinx.util.nodesr   Zsphinx.applicationr   Zsphinx.buildersr   	getLoggerr!   r8   r   r$   rm   r   r   r   r   <module>   s$   
l