
    -Ph-G                       U d Z ddlmZ ddlZddl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 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mZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ erId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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 e(d         Z9de:d<    ej;        e<          Z= e>h d          Z? G d d e          Z@ G d! d"e          ZA G d# d$e@          ZBdUd)ZC G d* d+e@          ZD G d, d-e@          ZE G d. d/e@          ZF G d0 d1e@          ZGe	jH        e	jI        e	jJ        ejK        e	jL        d2ZM G d3 d4e@          ZN G d5 d6e@          ZO G d7 d8e@          ZP G d9 d:e@          ZQ G d; d<e@          ZR G d= d>e@          ZS G d? d@e          ZT G dA dBee@          ZU G dC dDe@          ZV G dE dFe@          ZW G dG dHe@          ZXdVdLZYdWdPZZdXdTZ[dS )Yz:Docutils transforms used by Sphinx when reading documents.    )annotationsN)TYPE_CHECKINGcast)nodes)	TransformTransformer)ContentsFilter)	Footnotes)SmartQuotes)normalize_language_tag)
smartchars)addnodes)___)logging)new_document)format_date)apply_source_workaroundis_smartquotable)Iterator)AnyLiteral	TypeAlias)NodeText)TypeIs)Sphinx)Config)StandardDomain)BuildEnvironment)ExtensionMetadata)versionreleasetodaytranslation progressr   _DEFAULT_SUBSTITUTION_NAMES>   r$   r#   r"   r%   c                  Z    e Zd ZdZed
d            Zedd            Zedd            Zd	S )SphinxTransformzA base class of Transforms.

    Compared with ``docutils.transforms.Transform``, this class improves accessibility to
    Sphinx APIs.
    returnr   c                    | j         j        S )z)Reference to the :class:`.Sphinx` object.)envappselfs    Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/transforms/__init__.pyr,   zSphinxTransform.app>   s     x|    r    c                $    | j         j        j        S )z3Reference to the :class:`.BuildEnvironment` object.)documentsettingsr+   r-   s    r/   r+   zSphinxTransform.envC   s     }%))r0   r   c                    | j         j        S )z)Reference to the :class:`.Config` object.)r+   configr-   s    r/   r5   zSphinxTransform.configH   s     xr0   N)r)   r   )r)   r    )r)   r   )__name__
__module____qualname____doc__propertyr,   r+   r5    r0   r/   r(   r(   7   s~             X * * * X*    X  r0   r(   c                  F     e Zd ZU dZded<   dZded<   dd
Zd fdZ xZS )SphinxTransformerzA transformer for Sphinx.nodes.documentr2   NzBuildEnvironment | Noner+   r    r)   Nonec                    || _         d S N)r+   )r.   r+   s     r/   set_environmentz!SphinxTransformer.set_environmentT   s    r0   c                   t          | j        t          j                  rYt          | j        j        d          s| j        r| j        | j        j        _        t                                                       d S 	 t          d          }| j        r| j        |j        _        || j        z  }|| _        t                                                       | j        d         | _        d S # | j        d         | _        w xY w)Nr+    r   )	
isinstancer2   r   hasattrr3   r+   superapply_transformsr   )r.   r2   	__class__s     r/   rH   z"SphinxTransformer.apply_transformsW   s    dmU^44 	14=1599 6dh 6-1X&*GG$$&&&&&1'++8 5,0HH%)DM) (((*** $a 0a 00000s   ;AC' 'C;)r+   r    r)   r?   )r)   r?   )	r6   r7   r8   r9   __annotations__r+   rB   rH   __classcell__rI   s   @r/   r=   r=   N   sv         ###'C''''   1 1 1 1 1 1 1 1 1 1r0   r=   c                  &    e Zd ZdZdZddZddZdS )DefaultSubstitutionszBReplace some substitutions if they aren't defined in the document.   kwargsr   r)   r?   c                    t           t          | j        j                  z
  }| j                            t
          j                  D ]6}|d         x}|v r(|                    |                     |                     7d S )Nrefname)	_DEFAULT_SUBSTITUTIONSsetr2   substitution_defsfindallr   substitution_referencereplace_self_handle_default_substitution)r.   rP   	to_handlerefnames        r/   applyzDefaultSubstitutions.applyp   s    *S1P-Q-QQ	=(()EFF 	J 	JCI&944  !B!B4!H!HIII	J 	Jr0   r\   r&   
nodes.Textc                   |dk    r&t          j        t          | j                            S |dk    rj| j        j        x}rt          j        |          S | j        j        pt          d          }t          j        t          || j        j	                            S t          j        t          | j        |                    S )Nr%   r$   z	%b %d, %Y)language)r   r   _calculate_translation_progressr2   r5   r$   	today_fmtr   r   r`   getattr)r.   r\   textrb   s       r/   rY   z1DefaultSubstitutions._handle_default_substitutionw   s     ))):=dmLLMMM7??{((t (z$'''-?;I:k)dk>RSSSTTTz'$+t44555r0   NrP   r   r)   r?   )r\   r&   r)   r^   )r6   r7   r8   r9   default_priorityr]   rY   r;   r0   r/   rN   rN   j   sN        LL J J J J6 6 6 6 6 6r0   rN   r2   r>   r)   strc                    	 | d         }n# t           $ r t          d          cY S w xY w|d         }|d         }|dk    rt          d          S ||z  dS )Ntranslation_progressz)could not calculate translation progress!total
translatedr   zno translated elements!z.2%)KeyErrorr   )r2   ri   rj   rk   s       r/   ra   ra      s    >'(>? > > ><=====> !)E%l3Jzz*+++5 &&&s    ''c                      e Zd ZdZdZd	dZdS )
MoveModuleTargetszqMove module targets that are the first thing in a section to the section
    title.

    XXX Python specific
    rO   rP   r   r)   r?   c                h   t          | j                            t          j                            D ]}|d         sd|v rpt          |j                  t          j        u rP|j                            |          dk    r2|d         |j        d         dd<   |j        	                    |           d S )Nidsismod   r   )
listr2   rV   r   targettypeparentsectionindexremover.   rP   nodes      r/   r]   zMoveModuleTargets.apply   s    ..u|<<== 	) 	)D; 4%%66 K%%d++q00*.u+E"1Q3'""4(((	) 	)r0   Nre   r6   r7   r8   r9   rf   r]   r;   r0   r/   rn   rn      s:          ) ) ) ) ) )r0   rn   c                      e Zd ZdZdZd	dZdS )
HandleCodeBlocksz+Several code block related transformations.rO   rP   r   r)   r?   c                    | j                             t          j                  D ]:}t	          d |j        D                       r|                    |j                   ;d S )Nc              3  J   K   | ]}t          |t          j                  V  d S rA   )rE   r   doctest_block).0childs     r/   	<genexpr>z)HandleCodeBlocks.apply.<locals>.<genexpr>   s/      UUe:eU%899UUUUUUr0   )r2   rV   r   block_quoteallchildrenrX   rz   s      r/   r]   zHandleCodeBlocks.apply   sf    M))%*;<< 	1 	1DUUt}UUUUU 1!!$-000	1 	1r0   Nre   r|   r;   r0   r/   r~   r~      s4        551 1 1 1 1 1r0   r~   c                      e Zd ZdZdZd	dZdS )
AutoNumberingzERegister IDs of tables, figures and literal_blocks to assign numbers.rO   rP   r   r)   r?   c                   | j         j        j        }| j                            t
          j                  D ]R}|                    |          r;|                    |          &|d         g k    r| j        	                    |           Sd S )Nrp   )
r+   domainsstandard_domainr2   rV   r   Elementis_enumerable_nodeget_numfig_titlenote_implicit_target)r.   rP   domainr{   s       r/   r]   zAutoNumbering.apply   s    !%!1!AM))%-88 	9 	9D))$//9++D11=K2%%224888	9 	9r0   Nre   r|   r;   r0   r/   r   r      s4        OO	9 	9 	9 	9 	9 	9r0   r   c                      e Zd ZdZdZd	dZdS )
SortIdsz7Sort section IDs so that the "id[0-9]+" one comes last.i  rP   r   r)   r?   c                   | j                             t          j                  D ]_}t	          |d                   dk    rD|d         d                             d          r#|d         dd          |d         d         gz   |d<   `d S )Nrp      r   id)r2   rV   r   rw   len
startswithrz   s      r/   r]   zSortIds.apply   s    M))%-88 	A 	AD4;!##UA(A(A$(G(G#"5k!""oeQ0@@U	A 	Ar0   Nre   r|   r;   r0   r/   r   r      s:        AAA A A A A Ar0   r   )zliteral-blockzdoctest-blockrawrx   imagec                      e Zd ZdZdZd	dZdS )
ApplySourceWorkaroundz&Update source and rawsource attributes
   rP   r   r)   r?   c                    | j                                         D ]E}t          |t          j        t          j        z  t          j        z            rt          |           Fd S rA   )r2   rV   rE   r   TextElementr   topicr   rz   s      r/   r]   zApplySourceWorkaround.apply   s[    M))++ 	. 	.D$ 1EK ?%+ MNN .'---	. 	.r0   Nre   r|   r;   r0   r/   r   r      s4        00. . . . . .r0   r   c                      e Zd ZdZdZd	dZdS )
AutoIndexUpgraderzQDetect old style (4 column based indices) and automatically upgrade to new style.rO   rP   r   r)   r?   c                ~   | j                             t          j                  D ]}d|v rt	          d |d         D                       rrt          d          |d         z  }t                              ||           t          |d                   D ](\  }}t          |          dk    rg |d R |d         |<   )d S )Nentriesc              3  <   K   | ]}t          |          d k    V  dS )   N)r   )r   entrys     r/   r   z*AutoIndexUpgrader.apply.<locals>.<genexpr>   s,      (V(VUUq(V(V(V(V(V(Vr0   zG4 column based index found. It might be a bug of extensions you use: %r)locationr   )
r2   rV   r   rx   anyr   loggerwarning	enumerater   )r.   rP   r{   msgir   s         r/   r]   zAutoIndexUpgrader.apply   s    M))(.99 	< 	<DD  S(V(Vd9o(V(V(V%V%V F  9o	&  sT222 )$y/ : : < <HAu5zzQ-;u^d^^Y*	< 	<r0   Nre   r|   r;   r0   r/   r   r      s4        [[< < < < < <r0   r   c                      e Zd ZdZdZd	dZdS )
ExtraTranslatableNodeszMake nodes translatabler   rP   r   r)   r?   c                    t          | j        j                  t          fdt                                          D                       sd S d	fd}| j                            |          D ]}d|d<   d S )
Nc              3  *   K   | ]\  }}|v 	|V  d S rA   r;   )r   kvtargetss      r/   r   z/ExtraTranslatableNodes.apply.<locals>.<genexpr>  s+      VV41agQVVr0   r{   r   r)   TypeIs[nodes.Element]c                $    t          |           S rA   )rE   )r{   target_nodess    r/   is_translatable_nodez:ExtraTranslatableNodes.apply.<locals>.is_translatable_node  s    dL111r0   Ttranslatable)r{   r   r)   r   )	frozensetr5   gettext_additional_targetstupleTRANSLATABLE_NODESitemsr2   rV   )r.   rP   r   r{   r   r   s       @@r/   r]   zExtraTranslatableNodes.apply  s    DKBCCVVVV+=+C+C+E+EVVVVV 	F	2 	2 	2 	2 	2 	2 M))*>?? 	( 	(D#'D  	( 	(r0   Nre   r|   r;   r0   r/   r   r     s4        !!
( 
( 
( 
( 
( 
(r0   r   c                  .    e Zd ZdZej        dz   Zd	dZdS )
UnreferencedFootnotesDetectorz/Detect unreferenced footnotes and emit warningsrr   rP   r   r)   r?   c                   | j         j        D ]`}|d         sV|d         rNt                              t	          d          |d         r|d         d         n|d         d         dd|           a| j         j        D ]5}|d         s+t                              t	          d	          dd|           6| j         j        D ]=}|d         s3|d         r+t                              t	          d
          dd|           >d S )Nbackrefsnamesz Footnote [%s] is not referenced.r   dupnamesr[   footnote)ru   subtyper   zFootnote [*] is not referenced.zFootnote [#] is not referenced.)r2   	footnotesr   r   r   symbol_footnotesautofootnotesrz   s      r/   r]   z#UnreferencedFootnotesDetector.apply  sD   M+ 	 	D 
# W 9::(,WNDM!$$4
;KA;N&!     M2 	 	D
# 899&!	     M/ 
	 
	D 
# W 899&!	    
	 
	r0   Nre   )r6   r7   r8   r9   r
   rf   r]   r;   r0   r/   r   r     s<        99 1A5     r0   r   c                      e Zd ZdZdZd	dZdS )
DoctestTransformz.Set "doctest" style to each doctest_block node  rP   r   r)   r?   c                    | j                             t          j                  D ]}|d                             d           d S )Nclassesdoctest)r2   rV   r   r   appendrz   s      r/   r]   zDoctestTransform.applyF  sI    M))%*=>> 	. 	.DO""9----	. 	.r0   Nre   r|   r;   r0   r/   r   r   A  s4        88. . . . . .r0   r   c                      e Zd ZdZdZd	dZdS )
FilterSystemMessagesz&Filter system messages from a doctree.i  rP   r   r)   r?   c                4   | j         j        rdnd}t          | j                            t
          j                            D ]U}|d         |k     rGt                              d|	                                           |j
                            |           Vd S )Nrr      levelz%s [filtered system message])r5   keep_warningsrs   r2   rV   r   system_messager   debugastextrv   ry   )r.   rP   filterlevelr{   s       r/   r]   zFilterSystemMessages.applyP  s    ;4;aa!..u/CDDEE 	) 	)DG}{**;T[[]]KKK""4(((	) 	)r0   Nre   r|   r;   r0   r/   r   r   K  s4        00) ) ) ) ) )r0   r   c                  (    e Zd ZdZej        ZddZdS )	SphinxContentsFilterzsUsed with BuildEnvironment.add_toc_from() to discard cross-file links
    within table-of-contents link nodes.
    r{   nodes.imager)   r?   c                    t           j        rA   )r   SkipNode)r.   r{   s     r/   visit_imagez SphinxContentsFilter.visit_image_  s
    nr0   N)r{   r   r)   r?   )r6   r7   r8   r9   r	    ignore_node_but_process_childrenvisit_pending_xrefr   r;   r0   r/   r   r   X  s=          (H     r0   r   c                  8     e Zd ZdZdZd fdZdd	ZddZ xZS )SphinxSmartQuoteszmCustomized SmartQuotes to avoid transform for some extra node types.

    refs: sphinx.parsers.RSTParser
    i  rP   r   r)   r?   c                    |                                  sd S | j        j        | _        t                                                       d S rA   )is_availabler5   smartquotes_actionrG   r]   )r.   rP   rI   s     r/   r]   zSphinxSmartQuotes.applyk  s@      "" 	F #'+"@r0   boolc                   | j         j                            dg           }| j         j                            dg           }| j        j        j        du rdS | j         j        du rdS | j        j        j	        |v rdS | j         j
        |v rdS | j        j        d         }t          d t          |          D                       S )Nbuilders	languagesFlanguage_codec              3  2   K   | ]}|t           j        v V  d S rA   )r   quotes)r   tags     r/   r   z1SphinxSmartQuotes.is_available.<locals>.<genexpr>  s*      XX3*++XXXXXXr0   )r5   smartquotes_excludesgetr2   r3   smart_quotessmartquotesr,   builderr\   r`   r+   r   r   )r.   r   r   r`   s       r/   r   zSphinxSmartQuotes.is_availablet  s    ;377
BGGK488bII	=!.%775;"e++58 H,,5;9,,5 8$_5XX7Mh7W7WXXXXXXr0   txtnodes
list[Text]Iterator[tuple[str, str]]c              #     K   |D ]S}t          |          r*t          j        ddt          |                    }d|fV  ;d|                                fV  Td S )Nz(?<=\x00)([-\\\'".`])z\\\1plainliteral)r   resubrg   r   )r.   r   txtnoderd   s       r/   
get_tokenszSphinxSmartQuotes.get_tokens  s~         	2 	2G(( 2v6WNNtm####  !1!111111	2 	2r0   re   )r)   r   )r   r   r)   r   )	r6   r7   r8   r9   rf   r]   r   r   rK   rL   s   @r/   r   r   c  s{         
      Y Y Y Y*
2 
2 
2 
2 
2 
2 
2 
2r0   r   c                      e Zd ZdZdZd	dZdS )
DoctreeReadEventz!Emit :event:`doctree-read` event.ip  rP   r   r)   r?   c                P    | j         j                            d| j                   d S )Nzdoctree-read)r,   eventsemitr2   )r.   rP   s     r/   r]   zDoctreeReadEvent.apply  s$    ^T];;;;;r0   Nre   r|   r;   r0   r/   r  r    s4        ++< < < < < <r0   r  c                      e Zd ZdZdZd	dZdS )
GlossarySorterz.Sort glossaries that have the ``sorted`` flag.r   rP   r   r)   r?   c                    | j                             t          j                  D ]7}|d         r-t	          d|d                   }t          |d           |d d <   8d S )Nsortedznodes.definition_listr   c                    t          j        dt          d|           d                                                                                   S )NNFDz
nodes.termr   )unicodedata	normalizer   r   lower)items    r/   <lambda>z&GlossarySorter.apply.<locals>.<lambda>  s?    [%:tL$77:AACCIIKK& & r0   key)r2   rV   r   glossaryr   r  )r.   rP   r  definition_lists       r/   r]   zGlossarySorter.apply  sz    --h.?@@ 	 	H! "&'>"L"L%+# & & &"	 	r0   Nre   r|   r;   r0   r/   r  r    s6        88 	 	 	 	 	 	r0   r  c                      e Zd ZdZdZd	dZdS )
%ReorderConsecutiveTargetAndIndexNodesa  Index nodes interspersed between target nodes prevent other
    Transformations from combining those target nodes,
    e.g. ``PropagateTargets``.  This transformation reorders them:

    Given the following ``document`` as input::

        <document>
            <target ids="id1" ...>
            <index entries="...1...">
            <target ids="id2" ...>
            <target ids="id3" ...>
            <index entries="...2...">
            <target ids="id4" ...>

    The transformed result will be::

        <document>
            <index entries="...1...">
            <index entries="...2...">
            <target ids="id1" ...>
            <target ids="id2" ...>
            <target ids="id3" ...>
            <target ids="id4" ...>
       rP   r   r)   r?   c                r    | j                             t          j                  D ]}t	          |           d S rA   )r2   rV   r   rt   _reorder_index_target_nodes)r.   rP   rt   s      r/   r]   z+ReorderConsecutiveTargetAndIndexNodes.apply  s>    m++EL99 	0 	0F'////	0 	0r0   Nre   r|   r;   r0   r/   r  r    s:         4 0 0 0 0 0 0r0   r  
start_nodenodes.targetr?   c                    g }|                      dd          D ]?}t          |t          j        t          j        z            r|                    |           ? t          |          dk     rdS |d         j        }||d         j        k    ro|                    |d                   }|                    |d                   }|t          |          z   dz
  |k    r"t          |t          	          |||dz   <   dS dS dS )
zSort target and index nodes.

    Find all consecutive target and index nodes starting from ``start_node``,
    and move all index nodes to before the first target node.
    FT)descendsiblingsrr   Nr   r   r  )rV   rE   r   rt   r   rx   r   r   rv   r  	_sort_key)r  nodes_to_reorderr{   rv   	first_idxlast_idxs         r/   r  r    s     =?
 ""54"@@  dEL8>9:: 	##D)))
q  a 'F!"%,,,LL!1!!455	<< 0 455s+,,,q0H<</56FI/V/V/VF9x!|+,,,	 -, =<r0   r{   
nodes.Nodeintc                    t          | t          j                  rdS t          | t          j                  rdS dt          |           }t          |          )Nr   r   z+_sort_key called with unexpected node type )rE   r   rx   r   rt   ru   
ValueError)r{   r   s     r/   r  r    sS    $'' q$%% q
FT


F
FC
S//r0   r,   r   r!   c                   |                      t                     |                      t                     |                      t                     |                      t                     |                      t
                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     |                      t                     ddddS )NbuiltinT)r"   parallel_read_safeparallel_write_safe)add_transformr   r   rN   rn   r~   r   r   r   r   r   r   r   r  r  r  )r,   s    r/   setupr,    sT   +,,,,---*+++'(((&'''g&'''m$$$'(((*+++3444'(((&'''n%%%;<<< "#  r0   )r2   r>   r)   rg   )r  r  r)   r?   )r{   r#  r)   r$  )r,   r   r)   r!   )\r9   
__future__r   r   r  typingr   r   docutilsr   docutils.transformsr   r   docutils.transforms.partsr	   docutils.transforms.referencesr
   docutils.transforms.universalr   docutils.utilsr   docutils.utils.smartquotesr   sphinxr   sphinx.localer   r   sphinx.utilr   sphinx.util.docutilsr   sphinx.util.i18nr   sphinx.util.nodesr   r   collections.abcr   r   r   r   docutils.nodesr   r   typing_extensionsr   sphinx.applicationr   sphinx.configr   sphinx.domains.stdr   sphinx.environmentr    sphinx.util.typingr!   r&   rJ   	getLoggerr6   r   r   rS   r(   r=   rN   ra   rn   r~   r   r   literal_blockr   r   rx   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r,  r;   r0   r/   <module>rF     s   @ @ @ " " " " " " 				     & & & & & & & &       6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 1 1                     - - - - - - ( ( ( ( ( ( G G G G G G G G ((((((..........))))))))(((((())))))$$$$$$111111333333444444-4	 .     
	8	$	$" $ $ $       i   .1 1 1 1 1 1 1 186 6 6 6 6? 6 6 6:
' 
' 
' 
') ) ) ) ) ) ) )2	1 	1 	1 	1 	1 	1 	1 	1,9 9 9 9 9O 9 9 9"A A A A Ao A A A ((9^[  . . . . .O . . .< < < < < < < <*( ( ( ( (_ ( ( ($$ $ $ $ $O $ $ $N. . . . . . . .
) 
) 
) 
) 
)? 
) 
) 
)    >   02 02 02 02 02_ 02 02 02f< < < < < < < <    _   &0 0 0 0 0O 0 0 0DW W W W8        r0   