
    -PhtY                       d Z ddlmZ ddl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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 erRddl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. ddl/m0Z0 ddl1m2Z2 ddlm3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 dNd'Z9dOd.Z:dPd5Z;dQd8Z<dRd<Z=dSd=Z>dTd>Z?dUd?Z@dVdBZA G dC dDe          ZB G dE dFe          ZC G dG dHe          ZDdWdMZEdS )XzKThis module provides logic for resolving references to intersphinx targets.    )annotationsN)Path)TYPE_CHECKINGcast)nodes)pending_xref)_deprecation_warning)ExtensionError)LOGGERInventoryAdapter)___)ReferencesResolver)CustomReSTDispatcher
SphinxRole)_relative_path)IterableSequenceSet)
ModuleType)Any)NodeTextElementsystem_message)Reporter)Sphinx)Domain)_DomainsContainer)BuildEnvironment)InventoryName)_InventoryItem)	InventoryRoleFunctiondomain_namestrinv_nameInventoryName | Noneinv_itemr!   noder   contnoder   returnnodes.referencec           	        |j         }d|vr^|                    d          rIt          t                      t          |d                   j                  |z                                  }|j        rt          d          |j        |j        fz  }nt          d          |j        fz  }t          j
        ddd||          }|                    d          r|                    |           n|j        d	k    s| d
k    r|d         dk    r|                                }|r|                    |dz             rZ|                    |                    |t!          |          dz   d          |t!          |          dz   d                               nI|                    |           n3|                    |                    |j        |j                             |S )Nz://refdocz(in %s v%s)z(in %s) F)internalrefurireftitlerefexplicit-stdreftypekeyword:   )urigetr   r   parentas_posixproject_versionr   project_namer   	referenceappenddisplay_nameastext
startswith	__class__len)	r$   r&   r(   r)   r*   r:   r2   newnodetitles	            _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/ext/intersphinx/_resolve.py_create_element_from_resultrJ   %   s    ,CCDHHX..dffd4>&:&:&ABBSHRRTT ;]##x'<h>V&WWY<<8#8"::ob"uS8TTTGxx Yx    		#	%	%uiI!=!= !!E$4$4X^$D$DNN""#h--!+--.c(mma6G6I6I0J     NN8$$$$ 	x))(*?AVWWXXXN    	inventoryr"   objtypesIterable[str]targetnodes.reference | Nonec           
     f   |D ])vr|         v r         |         }ndv r|                                 t          t          fd                                                             }t	          |          dk    rwfd|D             }	| pd}
t	          |	          dk    r)t          j        t          d          |
|dd|	           n(t          j        t          d
          |
|dd|	           |r         |d                  }nt          || |||          c S d S )N>   std:term	std:labelc                4    |                                  k    S N)lower)ktarget_lowers    rI   <lambda>z8_resolve_reference_in_domain_by_target.<locals>.<lambda>c   s    l!: rK   r9   c                ,    h | ]}         |         S  r[   ).0matchrL   objtypes     rI   	<setcomp>z9_resolve_reference_in_domain_by_target.<locals>.<setcomp>f   s0       27Ig&u-  rK   main_inventoryz1inventory '%s': duplicate matches found for %s:%sintersphinxexternaltypesubtypelocationz0inventory '%s': multiple matches found for %s:%sr   )
rV   listfilterkeysrF   r   debugr   warningrJ   )r&   rL   r$   rM   rO   r)   r*   datainsensitive_matches
data_itemsinv_descriptorr^   rX   s    `         @@rI   &_resolve_reference_in_domain_by_targetrp   L   s     3X 3X)##Yw'''W%f-DD111 "<<>>L"&::::Ig<N<S<S<U<UVV# # &''!++    ;N  
 "*!=-=z??a''LNOO&* *!%     NMNN&* *!%    #  )*=a*@A 
 *;$hWWWWW4rK   honor_disabled_refsbooldisabled_reftypesSet[str]domainr   c           	        |j         t                              |          }dk    r	d|v rd |d<   dk    r	d|v rd |d<   fd|D             }|rfd|D             }g |                                }t	          | |||d	         ||          }	|	|	S |                    |          }
|
d S t	          | |||
||          S )
Nr5   	cmdoptionoptionpy	attributemethodc                     i | ]
} d | dS )r8   Nr[   )r\   obj_typer$   s     rI   
<dictcomp>z0_resolve_reference_in_domain.<locals>.<dictcomp>   s)    MMMxK,,(,,dMMMrK   c                    i | ]	}|v|d 
S rU   r[   )r\   r}   rs   s     rI   r~   z0_resolve_reference_in_domain.<locals>.<dictcomp>   s1     
 
 
000 d000rK   	reftarget)namedictfromkeysri   rp   get_full_qualified_name)r&   rL   rq   rs   ru   rM   r)   r*   	obj_typesresfull_qualified_namer$   s      `       @rI   _resolve_reference_in_domainr      s6    +K!%x!8!8I ey 8 8"	(d{i77"	( NMMM9MMMI  

 
 
 
%
 
 
	 #!!"H 1)[(D4EtX C 
 !88>>"t1)[(4Gx  rK   domainsr   c                   |o| d u }|rd|v rd S |d         }|dk    r]|                                 D ]F}|r|j         d|v r|j                                        }	t	          | |||||	||          }
|
|
c S Gd S |                    d          }|sd S |r	| d|v rd S 	 ||         }n4# t          $ r'}t          d          |z  }t          |          |d }~ww xY w|	                    |          pd}	|	sd S t	          | |||||	||          S )N*r6   anyz:*	refdomainzDomain %r is not registeredr[   )
sortedr   object_typesri   r   r;   KeyErrorr   r
   objtypes_for_role)r&   r   rL   rq   rs   r)   r*   typru   rM   r   r$   excmsgs                 rI   _resolve_referencer      s    .B(d2B s&777t
y/C
e||nn&& 	 	F" &+'9'9'9=N'N'N&,&9&>&>&@&@H.#!	 	C 


 thh{++ 	4 	k#5#5#59J#J#J4	/[)FF 	/ 	/ 	/233kAC %%3.	/ ++C006B 	4+	
 	
 		
s   B( (
C2"CCenvr   r    c                .    |t          |           j        v S rU   )r   named_inventory)r   r&   s     rI   inventory_existsr      s    ',,<<<rK   c           	         t          | |          sJ t          || j        t          |           j        |         dt          | j        j                  ||          S )zAttempt to resolve a missing reference via intersphinx references.

    Resolution is tried in the given inventory with the target as is.

    Requires ``inventory_exists(env, inv_name)``.
    F)r   r   r   r   r   	frozensetconfigintersphinx_disabled_reftypes)r   r&   r)   r*   s       rI   resolve_reference_in_inventoryr      s`     C*****-h7#*:;;  rK   c           	         t          d| j        t          |           j        |t	          | j        j                  ||          S )zAttempt to resolve a missing reference via intersphinx references.

    Resolution is tried with the target as is in any inventory.
    N)r   r   r   r`   r   r   r   )r   rq   r)   r*   s       rI   resolve_reference_any_inventoryr     sE     ,#*:;;  rK   c                :   | j         j        }t          | d||          }||S |d         }d|vrdS |                    d          \  }}}t	          |          o||k    }	|	r||d<   d|d<   dS t          | |          sdS ||d<   t          | |||          }
||d<   |
S )ah  Attempt to resolve a missing reference via intersphinx references.

    Resolution is tried first with the target as is in any inventory.
    If this does not succeed, then the target is split by the first ``:``,
    to form ``inv_name:new_target``. If ``inv_name`` is a named inventory, then resolution
    is tried in that inventory with the new target.
    TNr   r8   intersphinx_self_referential)r   intersphinx_resolve_selfr   	partitionrr   r   r   )r   r)   r*   resolve_selfr   rO   r&   r   
new_targetself_referentialres_invs              rI   "resolve_reference_detect_inventoryr   -  s     :6L *#tT8
D
DC

 +F
&t$..s33Ha L))Flh.F &[/3+,tC** t"D,S(D(KKGDNrK   appr   c                $    t          |||          S )zBAttempt to resolve a missing reference via intersphinx references.)r   )r   r   r)   r*   s       rI   missing_referencer   S  s     .c4BBBrK   c                  $     e Zd ZdZd fdZ xZS )IntersphinxDispatcherzyCustom dispatcher for external role.

    This enables :external:***:/:external+***: roles on parsing reST document.
    	role_namer%   language_moduler   linenointreporterr   r+   )tuple[RoleFunction, list[system_message]]c                    t          |          dk    r&|                    d          rt          |          g fS t                                          ||||          S )N	   )z	external:z	external+)rF   rD   IntersphinxRolesuperrole)selfr   r   r   r   rE   s        rI   r   zIntersphinxDispatcher.role`  sY     y>>A)"6"67Q"R"R"9--r1177<<	?FHMMMrK   )
r   r%   r   r   r   r   r   r   r+   r   )__name__
__module____qualname____doc__r   __classcell__)rE   s   @rI   r   r   Z  sQ         

N 
N 
N 
N 
N 
N 
N 
N 
N 
NrK   r   c                  v    e Zd Z ej        d          ZddZd dZd!dZd"dZ	d#dZ
d$dZd%dZd&dZd'dZdS )(r   z(\+([^:]+))?:(.*)	orig_namer%   r+   Nonec                    || _         d S rU   )r   )r   r   s     rI   __init__zIntersphinxRole.__init__s  s    "rK   'tuple[list[Node], list[system_message]]c           	     t   | j         | j                                        k    sJ |                     | j                  \  }}| j        j        j        }t          |          o||k    }|s>|r<t          | j        |          s'| 	                    t          d          |           g g fS |                     |          \  }'| 	                    t          d          |           g g fS ||| j        j        vr'| 	                    t          d          |           g g fS | j        j        |         }|j                                      }|d}|j                                      Hj        rA| 	                    t          | d          ||                     j                             n$| 	                    t          |          |           g g fS n| j        j        j        }	| j        j        j        }
|	|
|	k    r|
f}n|	|
f}d }|D ]'}|j                                      }|	|j         } n(|||                     d |D                       }d}fd|D             }|r>| d}| 	                    t          |          ||                     |                     n$| 	                    t          |          |           g g fS  || d	 | j        | j        | j        | j        | j        | j                  \  }}|s$|D ]!}t5          |t6                    r
d
|d<   ||d<   "||fS )Nz4inventory for external cross-reference not found: %rz+invalid external cross-reference suffix: %rz1domain for external cross-reference not found: %rz<role for external cross-reference not found in domain %r: %rz (perhaps you meant one of: %s)c              3  $   K   | ]}|j         V  d S rU   )r   )r\   ru   s     rI   	<genexpr>z&IntersphinxRole.run.<locals>.<genexpr>  s$      2U2U66;2U2U2U2U2U2UrK   z=role for external cross-reference not found in domains %s: %rc                t    h | ]4}|j                                       xj        D ]}|j         d | 5S )r8   )r   r;   rolesr   )r\   ru   rr   r   s      rI   r_   z&IntersphinxRole.run.<locals>.<setcomp>  ss     , , ,(.(;(?(?	(J(JJ, */	, ,  {((Q((, , , ,rK   r8   Tra   rL   )r   r   rV   get_inventory_and_name_suffixr   r   r   rr   r   _emit_warningr   _get_domain_roler   r   r;   r   _concat_stringscurrent_documentdefault_domainstandard_domainrawtexttextr   inlineroptionscontent
isinstancer   )r   rL   name_suffixr   r   r$   ru   	role_funcr   r   
std_domainr   domains_strpossible_rolesresultmessagesr)   r   r   s                    @@rI   runzIntersphinxRole.runv  s   yDN00222222!%!C!CDN!S!S	;x?--K,)2K 	 !1$(I!F!F ""MNN   2v!%!6!6{!C!CY@AA;   r6M
 "$("222""JKK[   2vX%k2F((33I T%266yAA+0B+&&cBBBCC#!,,\-?@@	    &&r#wwYGGG2v !" "X6EN)9J%~)E)E%-):6I!  "L,,Y77	("(+KE )  K$7"222U2UW2U2U2UUUU, , , , ,"), , , " 	H AAAC&&3#!,,^<<	    &&r#wwYGGG2v$9((Y((LIKLLL
 
   	2  2 2dL11 2*.D'(1D%xrK   r   tuple[str | None, str]c                    |                     d          s
J |            |dd         }|d         dk    r|                    dd          \  }}||fS |d         dk    rd|fS d| }t          |          )	a  Extract an inventory name (if any) and ``domain+name`` suffix from a role *name*.
        and the domain+name suffix.

        The role name is expected to be of one of the following forms:

        - ``external+inv:name`` -- explicit inventory and name, any domain.
        - ``external+inv:domain:name`` -- explicit inventory, domain and name.
        - ``external:name`` -- any inventory and domain, explicit name.
        - ``external:domain:name`` -- any inventory, explicit domain and name.
        rb   r   N   +r8   r9   z Malformed :external: role name: )rD   split
ValueError)r   r   suffixr&   r   s        rI   r   z-IntersphinxRole.get_inventory_and_name_suffix  s     z**00D000abb7c>>%||C33HfV##!W^^<;T;;CS//!rK   tuple[str | None, str | None]c                    |                     d          }t          |          dk    r
d|d         fS t          |          dk    r|d         |d         fS dS )a  Convert the *name* string into a domain and a role name.

        - If *name* contains no ``:``, return ``(None, name)``.
        - If *name* contains a single ``:``, the domain/role is split on this.
        - If *name* contains multiple ``:``, return ``(None, None)``.
        r8   r9   Nr      )NN)r   rF   )r   r   namess      rI   r   z IntersphinxRole._get_domain_role  sW     

3u::??q>!ZZ1__8U1X%%:rK   r   argsr   c               V    t          j        |g|R dd| j        j        | j        fd d S )Nra   rb   rc   )r   rk   r   docnamer   )r   r   r   s      rI   r   zIntersphinxRole._emit_warning  sQ    	
	
 	
 h&4	
 	
 	
 	
 	
 	
rK   stringsrN   c                Z    d                     d t          |          D                       S )Nz, c              3     K   | ]}|V  d S rU   r[   )r\   ss     rI   r   z2IntersphinxRole._concat_strings.<locals>.<genexpr>  s$      ;;aA;;;;;;rK   )joinr   )r   r   s     rI   r   zIntersphinxRole._concat_strings  s)    yy;;6'??;;;;;;rK   tuple[str, str] | Nonec                   t          t          | j        j         ddd           |                    d          }t	          |          dk    r&| j        j        j        x}|j        }nd }|d         }nt	          |          dk    r|\  }}nd S |r| 	                    ||          r||fS | 	                    d	|          rd	|fS d S )
Nz.get_role_namer/   r   r   remover8   r9   r   r   r5   )
r	   r   rE   r   rF   r   r   r   r   is_existent_role)r   r   r   ru   r$   r   s         rI   get_role_namezIntersphinxRole.get_role_name  s    0@@@"V	
 	
 	
 	
 

3u::??(3BBO$k"8DDZZ1__ %K4 	400dCC 	$$""5$// 	$;4rK   r$   r   rr   c                    t          t          | j        j         ddd           	 | j        j        |         }||j        v S # t          $ r Y dS w xY w)Nz.is_existent_roler/   r   r   F)r	   r   rE   r   r   r   r   )r   r$   r   ru   s       rI   r   z IntersphinxRole.is_existent_role.  sx    0CCCRPV	
 	
 	
 	
	-X%k2F ,,  	 	 	55	s   A 
AAr   tuple[str, str]c           	     Z   t          t          | j        j         ddd           | j                            |d                   }|ra|                    |d                   }|J  |d                    |          | j        | j        | j	        | j
        | j        | j                  S g g fS )	z<Invoke the role described by a ``(domain, role name)`` pair.z.invoke_roler/   r   r   r   r9   Nr8   )r	   r   rE   r   
get_domainr   r   r   r   r   r   r   r   )r   r   ru   r   s       rI   invoke_rolezIntersphinxRole.invoke_role9  s     	0>>>6	
 	
 	
 	
 $$T!W-- 	DG,,I(((9	   r6MrK   N)r   r%   r+   r   )r+   r   )r   r%   r+   r   )r   r%   r+   r   )r   r%   r   r   r+   r   )r   rN   r+   r%   )r   r%   r+   r   )r$   r%   r   r%   r+   rr   )r   r   r+   r   )r   r   r   recompile_re_inv_refr   r   r   r   r   r   r   r   r   r[   rK   rI   r   r   m  s         "*122K# # # #j  j  j  j X" " " ",   
 
 
 
< < < <
   2	- 	- 	- 	-     rK   r   c                  .    e Zd ZdZej        dz
  Zd	dZdS )
IntersphinxRoleResolverzpending_xref node resolver for intersphinx role.

    This resolves pending_xref nodes generated by :intersphinx:***: role.
    r9   kwargsr   r+   r   c                    | j                             t                    D ]}d|vrt          d|d                                                   }|d         }|/t          | j        |          sJ t          | j        |||          }nt          | j        d||          }|W|d         }t          d          |d         ||d	         fz  }t          j        ||d
|           |                    |           |                    |           d S )Nra   znodes.TextElementr   rL   Fr6   z-external %s:%s reference target not found: %sr   r   ref)rf   rd   re   )documentfindallr   r   deepcopyr   r   r   r   r   r   rk   replace_self)r   r  r)   r*   r&   rG   r   r   s           rI   r   zIntersphinxRoleResolver.runZ  s>   M)),77 	+ 	+DD((/a1A1A1C1CDDHK(H#'(;;;;;8Hhh  :HeT8  9oHII%%M 
 sTsKKKK!!(++++!!'****1	+ 	+rK   N)r  r   r+   r   )r   r   r   r   r   default_priorityr   r[   rK   rI   r  r  R  sB         
 *:Q>+ + + + + +rK   r  r   source	list[str]r   c                J    t                      }|                                 dS )zEnable IntersphinxDispatcher.

    .. note:: The installed dispatcher will be uninstalled on disabling sphinx_domain
              automatically.
    N)r   enable)r   r   r  
dispatchers       rI   install_dispatcherr  v  s'     '((JrK   )r$   r%   r&   r'   r(   r!   r)   r   r*   r   r+   r,   )r&   r'   rL   r"   r$   r%   rM   rN   rO   r%   r)   r   r*   r   r+   rP   )r&   r'   rL   r"   rq   rr   rs   rt   ru   r   rM   rN   r)   r   r*   r   r+   rP   )r&   r'   r   r   rL   r"   rq   rr   rs   rt   r)   r   r*   r   r+   rP   )r   r   r&   r    r+   rr   )
r   r   r&   r    r)   r   r*   r   r+   rP   )
r   r   rq   rr   r)   r   r*   r   r+   rP   )r   r   r)   r   r*   r   r+   rP   )
r   r   r   r   r)   r   r*   r   r+   rP   )r   r   r   r%   r  r  r+   r   )Fr   
__future__r   r   pathlibr   typingr   r   docutilsr   sphinx.addnodesr   sphinx.deprecationr	   sphinx.errorsr
   sphinx.ext.intersphinx._sharedr   r   sphinx.localer   r   !sphinx.transforms.post_transformsr   sphinx.util.docutilsr   r   sphinx.util.osutilr   collections.abcr   r   r   typesr   r   docutils.nodesr   r   r   docutils.utilsr   sphinx.applicationr   sphinx.domainsr   !sphinx.domains._domains_containerr   sphinx.environmentr   r    sphinx.util.inventoryr!   sphinx.util.typingr"   r#   rJ   rp   r   r   r   r   r   r   r   r   r   r  r  r[   rK   rI   <module>r)     so   Q Q " " " " " " 				       & & & & & & & &       ( ( ( ( ( ( 3 3 3 3 3 3 ( ( ( ( ( ( C C C C C C C C         @ @ @ @ @ @ A A A A A A A A - - - - - - ;7777777777      @@@@@@@@@@''''''))))))%%%%%%CCCCCC333333<<<<<<444444::::::::$ $ $ $N= = = =@/ / / /d;
 ;
 ;
 ;
|= = = =   0   *# # # #LC C C CN N N N N0 N N N&b b b b bj b b bJ!+ !+ !+ !+ !+0 !+ !+ !+H     rK   