
    -Phz                       d Z ddlmZ ddl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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 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/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 erDddl9m:Z:m;Z; ddlm<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZI ddlmJZJ dd lKmLZL dd!lMmNZNmOZO dd"lmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  e,j        e          ZdNd%Z G d& d'ee                   Z G d( d)e          Z G d* d+e          Z G d, d-e          Z G d. d/e          Z G d0 d1e          Z G d2 d3e          Z G d4 d5e          Z G d6 d7e          Z G d8 d9e5          Z G d: d;e5          Z G d< d=e5          Z G d> d?e	j?                  Z G d@ dAe(          Z G dB dCee                   Z G dD dEe&          Z G dF dGe6          Z G dH dIe          ZdOdMZdS )PzThe C++ language domain.    )annotationsN)NoneType)TYPE_CHECKING)nodes)
directives)addnodes)ObjectDescription)DomainObjType)ASTDeclarationASTIdentifierASTNamespaceASTNestedNameASTNestedNameElement)_max_id)DefinitionParser)Symbol_DuplicateSymbolError)NoUri)___)XRefRole)SphinxTransform)ReferencesResolver)logging)DefinitionErrorNoOldIdErroranon_identifier_re)FieldGroupedField)SphinxDirective
SphinxRole)make_refnode)IteratorSet)AnyClassVar)ElementNodeTextElementsystem_message)desc_signaturepending_xref)Sphinx)Builder)	LookupKey)BuildEnvironment)ExtensionMetadata
OptionSpec)WASTAlignofExprASTArrayASTAssignmentExprASTBaseASTBaseClassASTBinOpExprASTBooleanLiteralASTBracedInitListASTCastExprASTCharLiteralASTClassASTCommaExpr
ASTConceptASTConditionalExprASTDeclaratorASTDeclaratorMemPtrASTDeclaratorNameBitFieldASTDeclaratorNameParamQualASTDeclaratorParamPackASTDeclaratorParenASTDeclaratorPtrASTDeclaratorRefASTDeclSpecsASTDeclSpecsSimpleASTDeleteExprASTEnumASTEnumeratorASTExplicitCastASTExplicitSpecASTExpressionASTFallbackExprASTFoldExprASTFunctionParameterASTIdExpressionASTInitializer
ASTLiteral
ASTNewExprASTNoexceptExprASTNoexceptSpecASTNumberLiteralASTOperatorASTOperatorBuildInASTOperatorLiteralASTOperatorTypeASTPackExpansionExprASTParametersQualifiersASTParenExprASTParenExprListASTPointerLiteralASTPostfixArrayASTPostfixCallExprASTPostfixDecASTPostfixExprASTPostfixIncASTPostfixMemberASTPostfixMemberOfPointerASTPostfixOpASTRequiresClauseASTSizeofExprASTSizeofParamPackASTSizeofTypeASTStringLiteralASTTemplateArgConstantASTTemplateArgsASTTemplateDeclarationPrefixASTTemplateIntroduction ASTTemplateIntroductionParameter ASTTemplateKeyParamPackIdDefaultASTTemplateParam'ASTTemplateParamConstrainedTypeWithInitASTTemplateParamNonTypeASTTemplateParamsASTTemplateParamTemplateTypeASTTemplateParamTypeASTThisLiteralASTTrailingTypeSpecASTTrailingTypeSpecDecltypeASTTrailingTypeSpecDecltypeAutoASTTrailingTypeSpecFundamentalASTTrailingTypeSpecNameASTType	ASTTypeIdASTTypeUsingASTTypeWithInitASTUnaryOpExprASTUnionASTUserDefinedLiteralreturnr   c                 d    t          t          d          d           } t          | gdgd          S )NPhonyNameDueToErrorF)rooted)r   r   r   )nnes    [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/domains/cpp/__init__.py_make_phony_error_namer      s3    
}-BCCT
J
JC#6666    c                  F    e Zd ZU dZ ed ed          dd          gZded<   ej	        ej	        ej	        ej	        ej	        ej	        ej	        d	Z
d
ed<   d*dZd+dZed,d            Zed,d            Zd-dZd.dZd/d Zd0 fd"Zd1d#Zd2d$Zd2d%Zd3d(Zd4d)Z xZS )5	CPPObjectz%Description of a C++ language object.template parameterzTemplate Parameters)tparamr   Tlabelnamescan_collapsezlist[Field]doc_field_types)no-index-entryzno-contents-entryzno-typesettingnoindexentrynocontentsentrytparam-line-specsingle-line-parameter-listClassVar[OptionSpec]option_specastr   r   Nonec           
        |j         dk    sJ |j        }|sJ |j        J |j        J |j        J |j        }|sJ |j        d S |j        }|d S |j         dk    rd S |j        dk    rd S |j        }|                    |j        ddd          }|d S |j        	                                }||_
        t          ||j        d d || j        j        |                                 d                    d S )N
enumeratorenumFT)	matchSelfrecurseInAnonsearchInSiblings   )parent	identOrOptemplateParamstemplateArgsdeclarationdocnameline)
objectTypesymbolr   r   r   r   r   directiveTypefind_identifiercloneenumeratorScopedSymbolr   envr   get_source_info)selfr   r   parent_symbolparent_decltarget_symbols
decl_clones           r   _add_enumerator_to_parentz#CPPObject._add_enumerator_to_parent   s\   ~---- +++$,,,"***' F#/ F!V++ F$..F%,))"	 * 
 
 =F'--//
,2
) &"H$%%''*	
 	
 	
 	
 	
 	
r   sigstrsignoder*   c                   g }t          dt          dz             D ]K}	 |                    |          }|                    |           /# t          $ r |t          k     sJ Y Hw xY w|                                 |d         }|sJ t          j        d                              |          s0t          
                    d|||                                            |j                                                                                            d          }d}	|j        j        }
|
!|
j        }|
j        }
||j        d	k    rd
}	n|
!|	sd| j        vry|}| j        j        D ]0}|                    |          r|t/          |          d          } n1|                     |          }| j        d                             d||dd f           || j        j        j        vr| j        j        d         d         }||vr|j        j        ||<   |sJ |d                             |           |dd          D ]3}|s|| j        j        j        vr|d                             |           4| j        j                             |           d S d S )Nr   )versionr   z^[a-zA-Z0-9_]*$zMIndex id generation for C++ object "%s" failed, please report as bug (id=%s).location:FconceptTr   entriessingle cppr   ids)!ranger   get_idappendr   reverserecompilematchloggerwarningget_locationr   get_full_nested_nameget_display_stringlstripr   r   r   optionsconfigcpp_index_common_prefix
startswithlenget_index_text	indexnodestatedocumentr   r   
domaindatar   note_explicit_target)r   r   r   r   r   iid	newest_idnameis_in_conceptr   declstripped_nameprefix
index_textr   s                   r   add_target_and_indexzCPPObject.add_target_and_index   s    q'A+&& 	# 	#A#ZZZ**

2 # # #7{{{{{{# 	F	z,--33I>> 	NN)**,,     z..00CCEELLSQQJm=DA|)++ $ m  	!1!E!E M+=  ??6** $1#f++--$@ME ,,];;JN9%,,.    DJ/333H'.w7E5  !j0dEN!!),,,!""g . . TZ0444EN))"---J44W===== 43s   +A

A$#A$c                    t           N)NotImplementedErrorr   s    r   object_typezCPPObject.object_type%  s    !!r   c                    | j         S r   )r   r   s    r   display_object_typezCPPObject.display_object_type)  s    r   r   c                4    t          d          || j        fz  S )Nz%s (C++ %s))r   r   )r   r   s     r   r   zCPPObject.get_index_text-  s    4)A"BBBr   parserr   c                B    |                     | j        | j                  S r   )parse_declarationr   objtype)r   r   s     r   parse_definitionzCPPObject.parse_definition0  s    ''(8$,GGGr   r,   r   dict[str, Any]c                @    |                     |d| j        |           d S )N
lastIsName)describe_signaturer   )r   r   r   r   s       r   r  zCPPObject.describe_signature3  s&     	wdhHHHHHr   
list[Node]c                P   | j         }|j        j        ;|j        d         d         }||j        _        |                                |j        d<   |j        j        }|j        }||j        dk    rd|                                 d| j	         d| j
        d          }t                              ||                                 	           t                      }|                    |          }||j        _        g S d |j        _        t#                                                      S )
Nr   root_symbolcpp:parent_keyfunctionzFC++ declarations inside functions are not supported. Parent function: z
Directive name: z
Directive arg: r   r   )r   current_documentcpp_parent_symbolr   get_lookup_keyref_contextr   r   r   r   	argumentsr   r   r   r   add_namecpp_last_symbolsuperrun)	r   r   rootr   r   msgr   r   	__class__s	           r   r  zCPPObject.run8  s1   h19>%(7D59C 2040C0C0E0ECO,- ,>#/"{'='K'KS$1$F$F$H$HS S#'9S S?C~a?PS S 
 NN3):):)<)<N===)++D"++D11F39C 0I 04,ww{{}}r   c                   | j         j        j        }| j        j        p| j        j        pd}d| j        vot          |          |cxk    odk    nc |d<   t          ||| j                  }	 | 	                    |          }|
                                 nj# t          $ r]}t                              ||           t                      }|                    |          }	|	| j         j        _        t"          |d }~ww xY w	 |                    || j         j        |                                 d                   }	|	j        J |	j        J | j         j        j        |	_        |	j        |	j        j        J |	|	j        _        |	| j         j        _        nw# t.          $ rj}|j        | j         j        _        t3          d          }
t                              |
|j        j        |j        j        | j        ||d	d
           Y d }~nd }~ww xY w|j        dk    r|                     |           t=          | j                  }d| j        v |d<   |                     |||           |S )Nr   r   multi_line_parameter_listr   r   r   r   )r   r   zRDuplicate C++ declaration, also defined at %s:%s.
Declaration is '.. cpp:%s:: %s'.duplicate_declarationr   )r   typesubtyper   r   ) r   r  r	  r   !cpp_maximum_signature_line_lengthmaximum_signature_line_lengthr   r   r   r   
assert_endr   r   r   r   r  r  
ValueErroradd_declarationr   r   siblingAbovesiblingBelowr   r   r   r   r   r   r   dictr  )r   r   r   r   max_lenr   r   er   r   r  r   s               r   handle_signaturezCPPObject.handle_signature]  s    $ 9 K K9 {8 	 )< )SG''''a'''' 	+,
 "#LLL
	$''//C 	$ 	$ 	$NN1wN/// *++D"++D11F8>DH%5!#	$	"22TX-D4H4H4J4J14M 3  F &...&..."&(";"KF".*7???39#08>DH%55$ 	 	 	 9:DH%53 C NN ( ,  	 	 	 	 	 	 	 		& >\))**3/// t|$$&8DL&H"#g666
s3   -)B 
C>!AC99C>BF 
H!A HHc                r   | j         j        j        }|sJ | j         j        j        | _        | j         j        d         | _        || j         j        _        |                                | j         j        d<   g | j         j        j        |j	        
                    t                    R | j         j        _        d S )Nr  )r   r  r  r	  oldParentSymbolr  oldParentKeyr
  cpp_domain_namer   
_stringifyr   )r   last_symbols     r   before_contentzCPPObject.before_content  s    "h7G#x8J'+x';<L'M6A!31<1K1K1M1M-.5
X&65
!,,S115
 5
!111r   c                    | j         | j        j        _        | j        | j        j        d<   | j        j        j        }|d d         | j        j        _        d S )Nr  )r&  r   r  r	  r'  r  r(  )r   r(  s     r   after_contentzCPPObject.after_content  sN    6:6J!3151B-.(3C4CCRC4H!111r   sig_nodetuple[str, ...]c                    | j         j        j        }t          d |                                j        D                       S )Nc              3  T   K   | ]#}|j                             t                    V  $d S r   )r   r)  r   .0r   s     r   	<genexpr>z4CPPObject._object_hierarchy_parts.<locals>.<genexpr>  sF       
 
 K""3''
 
 
 
 
 
r   )r   r  r  tupler   r   )r   r/  r*  s      r   _object_hierarchy_partsz!CPPObject._object_hierarchy_parts  sL    "h7G 
 
 5577=
 
 
 
 
 	
r   c                   |                     d          sdS | j        }|j                             d          }|j        r|dv rd}nd}|d         ^ }}|j        dk    r,d                    g | j        j        j        ||z   R           S |j        dk    r||z   S |j        d	k    rd                    g |||z             S dS )
N
_toc_partsr   r   >   methodr  ()domain::hideall)	getr   r   add_function_parenthesestoc_object_entries_show_parentsjoinr   r  r(  )r   r/  r   r   parensparentsr   s          r   _toc_entry_namezCPPObject._toc_entry_name  s    ||L)) 	2/%%i00* 	w:P/P/PFFF!,/$1X==99 *:v     1V;;&= 1U::996w6v6777rr   )r   r   r   r   )r   r   r   r   r   r*   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r,   r   r   r   r   r   r   r   r  )r   r   r   r,   r   r   )r   r   )r/  r,   r   r0  )r/  r,   r   r   )__name__
__module____qualname____doc__r    r   r   __annotations__r   flagr   r   r   propertyr   r   r   r   r  r  r$  r+  r.  r7  rF  __classcell__r  s   @r   r   r      s        // 	 !)**2		
 	
 	
$O     %/'_$/"%?&O&0o) )K    1
 1
 1
 1
fA> A> A> A>F " " " X"       X C C C CH H H HI I I I
# # # # # #JA A A AF

 

 

 

I I I I
 
 
 
       r   r   c                      e Zd ZdZdS )CPPTypeObjectr  NrI  rJ  rK  r    r   r   rS  rS            KKKr   rS  c                      e Zd ZdZdS )CPPConceptObjectr   NrT  rU  r   r   rX  rX    s        KKKr   rX  c                      e Zd ZdZdS )CPPMemberObjectmemberNrT  rU  r   r   rZ  rZ    s        KKKr   rZ  c                      e Zd ZdZg ej         ed ed          dd           ed ed          d	d
d           ed ed          dd           ed ed          dd          ZdS )CPPFunctionObjectr  	parameter
Parameters)paramr^  argargumentTr   
exceptionsThrowsexpr)throwsthrow	exception)r   rolenamer   r   retvalzReturn values)retvalsrj  returnvalueReturnsF)returnsr   )r   has_argr   N)	rI  rJ  rK  r   r   r   r    r   r   rU  r   r   r]  r]    s        K		"!L//;		
 	
 	
 	!H++2	
 	
 	
 	!O$$'		
 	
 	
* 	!I,,'		
 	
 	
+OOOr   r]  c                  *    e Zd ZdZedd            ZdS )CPPClassObjectclassr   r   c                &    | j         dv sJ | j         S )N>   rr  struct)r   r   s    r   r   z"CPPClassObject.display_object_type   s      |22222|r   NrG  )rI  rJ  rK  r   rO  r   rU  r   r   rq  rq    s7        K   X  r   rq  c                      e Zd ZdZdS )CPPUnionObjectunionNrT  rU  r   r   rv  rv    s        KKKr   rv  c                      e Zd ZdZdS )CPPEnumObjectr   NrT  rU  r   r   ry  ry    rV  r   ry  c                      e Zd ZdZdS )CPPEnumeratorObjectr   NrT  rU  r   r   r{  r{    s        KKKr   r{  c                  :    e Zd ZU dZdZdZdZdZi Zde	d<   dd
Z
dS )CPPNamespaceObjectz]This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    Fr   r   Tr   r   r   r  c                   | j         j        d         d         }| j        d                                         dv r|}g }nt	          | j        d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t                              ||                                            t                      }t          |d           }Y d }~nd }~ww xY w|                    |j        |j                  }|g}|| j         j        _        || j         j        _        |                                | j         j        d<   g S )Nr   r  r      0NULLnullptrr  r   r  )r   r   r  stripr   r   r   parse_namespace_objectr  r   r   r   r   r   r  
nestedNametemplatePrefixr  r	  cpp_namespace_stackr
  r  )r   r  r   stackr   r   r#  r   s           r   r  zCPPNamespaceObject.run  s_   h)%0?>!""$$(@@@ F"$EE%q!D,=,=,?,?  F/3355!!####" / / /q4+<+<+>+>???-//"4../ !))#.#:LMMFHE6<!38=!5171F1F1H1H-.	s   4(B 
C='AC88C=NrH  )rI  rJ  rK  rL  has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacer   rM  r  rU  r   r   r}  r}    s^           K $(*K****     r   r}  c                  6    e Zd ZU dZdZdZdZi Zded<   dd	Z	d
S )CPPNamespacePushObjectFr   r   Tr   r   r   r  c                   | j         d                                         dv rg S t          | j         d         |                                 | j                  }	 |                                }|                                 nc# t          $ rV}t          	                    ||                                            t                      }t          |d           }Y d }~nd }~ww xY w| j        j        j        }|s| j        j        d         d         }|                    |j        |j                  }| j        j        j                            |           || j        j        _        |                                | j        j        d<   g S )Nr   r  r  r   r   r  r  )r  r  r   r   r   r  r  r   r   r   r   r   r   r  r	  r   r  r  r  r  r   r
  r  )r   r   r   r#  r   
old_parentr   s          r   r  zCPPNamespacePushObject.run=  sv   >!""$$(@@@I!N1(9(9(;(;DK
 
 
	+//11C 	+ 	+ 	+NN1t'8'8':':N;;;)++DtT**CCCCCC	+ X.@
 	C,U3MBJ$$S^S5GHH!5<<VDDD6<!3171F1F1H1H-.	s   (B 
C"ACC"NrH  
rI  rJ  rK  r  r  r  r  r   rM  r  rU  r   r   r  r  6  sR         K $(*K****     r   r  c                  6    e Zd ZU dZdZdZdZi Zded<   d
dZ	d	S )CPPNamespacePopObjectFr   Tr   r   r   r  c                   | j         j        j        }t          |          dk    r/t                              d|                                            n|                                 t          |          dk    r	|d         }n| j         j        d         d         }|| j         j        _	        |
                                | j         j        d<   g S )Nr   z=C++ namespace pop on empty stack. Defaulting to global scope.r   r-  r   r  r  )r   r  r  r   r   r   r   popr   r	  r
  r  )r   r  r   s      r   r  zCPPNamespacePopObject.run[  s    )=u::??NNO**,,     
 IIKKKu::>>2YFFX(/>F6<!3171F1F1H1H-.	r   NrH  r  rU  r   r   r  r  T  sR         K $(*K****     r   r  c                  .     e Zd Z	 	 dd fdZddZ xZS )	AliasNodeNr   r   aliasOptionsdict[str, bool]r   BuildEnvironment | None	parentKeyLookupKey | Noner   r   c                8   t                                                       || _        || _        |  |[|j        j        ;|j        d         d         }||j        _        |                                |j        d<   |j        d         | _	        d S |J || _	        d S )Nr   r  r  )
r  __init__r   r  r  r	  r   r
  r  r  )r   r   r  r   r  r  r  s         r   r  zAliasNode.__init__n  s     	(!?#5=~e,];9=$6484G4G4I4I 01 _-=>DNNN(((&DNNNr   c                R    |                      | j        | j        d | j                  S )N)r   r  )r  r   r  r  r   s    r   copyzAliasNode.copy  s-    ~~Hd'TT^  
 
 	
r   NN)
r   r   r  r  r   r  r  r  r   r   )r   r  )rI  rJ  rK  r  r  rP  rQ  s   @r   r  r  m  s^        
 (,&*' ' ' ' ' ' '*
 
 
 
 
 
 
 
r   r  c                  2    e Zd Zej        dz
  ZddZddZdS )AliasTransformr   r   r   maxdepthint	skip_thisboolalias_optionsr  render_optionsr   r&   r   r  c           	        |dk    rd}n|dk    rd}n|dz  }d}g }|sGt          j        dd          }	 |j        |	           |j                            |	d| j        |           |r|r|}
nXt          j                    }t          j                    }|                    |           ||_        d|d<   d	x|d
<   |d<   d|d<   |}
|j	        D ]I}|j        
|j        j
        dv r|                     ||d|||          }|
                    |           J|s(t          |j                  dk    r |j        |           |S )Nr   Tr   Fr   markNamer   r<  aliasr   desctypezno-index>   functionParamtemplateParamr  r  r  r  r   )r   r,   r   r   r  r   desc_contentdescr   	_childrenr   _render_symbolextendr   children)r   r   r  r  r  r  r   recurser   r   child_containercontentr  s_childchild_nodess                  r   r  zAliasTransform._render_symbol  s    q==GG]]GGMHG 	-b"55GEL!!!M,,TX~    	& '>C"/11}t$$$ (!&X5<<Y$z"2#'Z "&; 4 4&.&15WWW"11%#"/#1% 2    &&{3333 &T]!3!3q!8!8W%%%r   kwargsr   c           
        | j                             t                    D ]L}|j        }|j        }	 t          ||| j                  }|                                \  }}|                                 n8# t          $ r+}t                              ||           d\  }}Y d }~nd }~ww xY w|Wt          j        |d          }	|	                                 |	t          j        ||          z  }	|                    |	           | j        j        j        j        d         }
|
                    |          }|sct                              d|           t                              d|           t                              |
                    d                     |sJ g }|rZt1          |t2                    sJ |}|j        }|j        r|j        j        }ng }|                    ||d	d
d
d
d          \  }}|g }nQt1          |t<                    sJ |}|j        }|                     |d	d
d
d
          }||!                    |           d |D             }tE          |          dk    rt          j        |d          }	|!                    |	           |	                                 |	t          j        ||          z  }	t                              d||           |                    |	           g }ddi}|D ]V}|j#        J | $                    ||j%        d         |j%        d         |j%        ||j                   } |j&        |           W|                    |           Nd S )Nr  r   r  r   r  
Target: %sParentKey: %sr   anyTF)r  templateDeclstyptemplateShorthandr   r   r   r  r   r   c                     g | ]}|j         	|S r   )r   r3  s     r   
<listcomp>z(AliasTransform.apply.<locals>.<listcomp>  s    GGGQQ]-Fq-F-F-Fr   r   z,Can not find C++ declaration for alias '%s'.r   r  norootr  )'r   findallr  r   r  r   r   parse_xref_objectr  r   r   r   r   r,   clear	desc_namereplace_selfr   domains
cpp_domaindatadirect_lookupdebugdump
isinstancer   r  r  	templates	find_namer   r   find_declarationr   r   r   r  r  r  )r   r  noder   
parent_keyr   r   is_shorthandr#  r   r  r   symbolsnsr   template_declsfail_reasonr   r   r   r  ress                         r   applyzAliasTransform.apply  s   M)))44 Y	) Y	)D(CJ/)#T[QQQ$*$<$<$>$>!\!!####" / / /q4000$.!\\\\\\/ {"1#r::8-c3777!!'***"&("2"="B="QK$/$=$=j$I$IM  2\3///_j999[--a00111    $&G &!#|44444}$ (%'%6%@NN%'N'4'>'>#"0&*""&%* (? ( ($ ? G!#~66666y!22&*""& 3   =NN1%%%GG'GGGG7||q  "1#r::G$$$8-c3777BCRV     !!'****&" ! 
& 
&A=444--!%!2:!>"&"3H"=&*&7'5!% .  C !EL%%%%!!%((((sY	) Y	)s   AA55
B*?!B%%B*N)r   r   r  r  r  r  r  r  r  r  r   r&   r   r  )r  r&   r   r   )rI  rJ  rK  r   default_priorityr  r  rU  r   r   r  r    sQ        ):Q>8 8 8 8tZ) Z) Z) Z) Z) Z)r   r  c                  @    e Zd ZU ej        ej        dZded<   ddZdS )	CPPAliasObjectr  r  r   r   r   r  c                T   d| j         v r)| j                             dd          \  | _        | _        nd| j         c| _        | _        t	          j                    }| j        j        |_        | j        |d<   | j        x|d<   |d<   g | _        | j	        
                    dd          d| j	        v d	}|d         r:|d         dk    r.t                              d
|                                            |                                 }|D ],}|                    t!          ||| j                             -|                                  t	          j        dg|                                 R  }|                    |           d| j        j        _        |                                  |gS )zOn purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        r   r   r   r<  r   r  r  r  r  zError in C++ alias declaration. Requested 'noroot' but 'maxdepth' 1. When skipping the root declaration, need 'maxdepth' 0 for infinite or at least 2.r   )r   )r   splitr<  r   r   r  r   r   r   r   r@  r   r   r   get_signaturesr   r  r   r+  r  parse_content_to_nodesr  obj_desc_namer.  )r   r  r  
signaturesr   content_nodes         r   r  zCPPAliasObject.run)  s   
 $)(,	Q(?(?%DK(*DI%DK}
+X-1\9Y$z* "
((Q77$,.
 
 " 	}Z'@A'E'ENNA **,,     ((**
 	E 	ECKK	#}$(CCCDDDD,RP$2M2M2O2OPPPL!!!24!/vr   NrH  )	rI  rJ  rK  r   nonnegative_intrN  r   rM  r  rU  r   r   r  r  #  sU         ./) )K    
& & & & & &r   r  c                      e Zd ZddZdS )CPPXRefRoler   r1   refnoder(   has_explicit_titler  titler   targetr   tuple[str, str]c                   |j                             |j                   |s"t          j        dt          |                    }|d         dk    r,|s|                    d          }|                    d          }|sU|                    d          }|d d         dk    r2|dd          }|                    d          }|dk    r||d	z   d          }||fS )
Nz[anonymous]reftyper  r;  ~r   r=  r-     )	
attributesupdater  r   subr   removesuffixr   rfind)r   r   r  r  r  r  dcolons          r   process_linkzCPPXRefRole.process_linkS  s     	!!#/222! 	F '*=#e**EEE9&& & 1**400((..F! 	0]]3''F RaRyCabb	T**R<<!&1*,,/Ef}r   N)r   r1   r  r(   r  r  r  r   r  r   r   r  )rI  rJ  rK  r  rU  r   r   r  r  R  s(             r   r  c                  (     e Zd Zd fdZd	dZ xZS )
CPPExprRoleasCoder  r   r   c                l    t                                                       |r	d| _        d S d| _        d S )Nzcpp-exprz	cpp-texpr)r  r  
class_type)r   r   r  s     r   r  zCPPExprRole.__init__v  s9     	*(DOOO *DOOOr   'tuple[list[Node], list[system_message]]c                \   | j                             dd          }t          ||                                 | j                  }	 |                                }nj# t          $ r]}t                              d|||                                            t          j
        d||| j        g          }|gg fcY d }~S d }~ww xY w| j        j        j        }|| j        j        d         d         }t          j
        d| j        g          }|                    |d	| j        |           |gg fS )
N
 r  z!Unparseable C++ expression: %r
%sr   r   )classesr  markType)textreplacer   r   r   parse_expressionr   r   r   r   desc_inliner  r   r  r	  r   r  )r   r	  r   r   exr  r   r   s           r   r  zCPPExprRole.run  sT   y  s++!4,,..t{
 
 
	))++CC 		 		 		NN4**,,	     'tTDOCTUUUD62:		 1C  H/6}EM &ut6GHHHw
DHmLLLy"}s   A 
C%AB=7C=C)r   r  r   r   )r   r  )rI  rJ  rK  r  r  rP  rQ  s   @r   r  r  u  sQ        * * * * * *       r   r  c                     e Zd ZdZdZdZ e ed          dddd           e ed          ddd           e ed	          d
dd           e ed          ddd           e ed          dd           e ed          dd           e ed          ddd           e ed          dd           e ed          ddd           e ed          ddddddd          d
Zi de	de	de
d	ededededededededededededeZ e             e             e             e             ed           e             e             e             e             e             e             ed           ed          dZ eddddddd          i dZdDd$ZdEd)ZdFd,ZdGd1ZdHd;ZdId=Z dJd?Z!dKdAZ"dLdCZ#dS )M	CPPDomaina  C++ language domain.

    There are two 'object type' attributes being used::

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    r   zC++rr  rt  
identifierr  rw  r  funcr[  varr   r   r   zfunction parameterr   )
rr  rw  r  r[  r  r   r   r   r  r  zenum-structz
enum-class	namespaceznamespace-pushznamespace-popr  T)
fix_parens)r   F)r  rr  rt  rw  r  r[  r  r  r   r   r   re  texprN)r  r   r   r   r   r   c                "   t           j        rt                              d|           t                              d           t                              | j        d                             d                     t                              d           | j        d         }|                    |           t           j        rt                              d           t                              | j        d                             d                     t                              d           t                              d|           t          | j        d	                                                   D ]\  }}||k    r| j        d	         |= d S )
Nzclear_doc: %sz	before:r  r   z	before endz	after:z
	after endzclear_doc end: %sr   )	r   debug_show_treer   r  r  r  	clear_doclistitems)r   r   r  r   	n_docnames        r   r  zCPPDomain.clear_doc  sJ   ! 	)LL'222LL%%%LL=166q99:::LL(((i.g&&&! 	7LL$$$LL=166q99:::LL'''LL,g666#DIg$6$<$<$>$>?? 	- 	-OD)G##Ig&t,	- 	-r   r   r1   r   nodes.documentc                    t           j        rpt                              d|           t                              | j        d                             d                     t                              d|           d S d S )Nzprocess_doc: %sr  r   zprocess_doc end: %s)r   r  r   r  r  r  )r   r   r   r   s       r   process_doczCPPDomain.process_doc  sp     ! 	9LL*G444LL=166q99:::LL.88888	9 	9r   pnoder-   c                N    |j                             | j        j                   d S r   )r  r  r   r  )r   r  s     r   process_field_xrefzCPPDomain.process_field_xref  s$     455555r   docnamesSet[str]	otherdatar   c                   t           j        rt                              d           t                              d           t                              | j        d                             d                     t                              d           t                              d           t                              |d                             d                     t                              d           | j        d                             |d         || j                   | j        d         }|d                                         D ]\  }}||v r	||vr|||<   t           j        rt                              d	           t                              | j        d                             d                     t                              d
           t                              d           d S d S )Nzmerge_domaindata:z	self:r  r   z		self endz	other:z
	other endr   z	result:z	result endzmerge_domaindata end)	r   r  r   r  r  r  
merge_withr   r  )r   r"  r$  	our_namesr   r   s         r   merge_domaindatazCPPDomain.merge_domaindata
  s   ! 	(LL,---LL###LL=166q99:::LL&&&LL$$$LL=166q99:::LL'''	- ++m$h	
 	
 	
 Ig&	&w/5577 	. 	.MD'(""y((&-IdO! 	1LL%%%LL=166q99:::LL(((LL/00000		1 	1r   fromdocnamebuilderr/   r  r  r  contnoder(   /tuple[nodes.reference, str] | tuple[None, None]c           	     &
   # dv r|dz  }t          |||j                  }	 |                                \  }	}
n# t          $ r}dv rZt          |d d         ||j                  }	 |                                 |}n%# t          $ r}|d d         }|}Y d }~n
d }~ww xY w|}t                              d|||           Y d }~dS d }~ww xY w|                    dd           } j        d	         }|r|                    |          }|sht          	                    d
|           t          	                    d|j                   t          	                    |
                    d                     |sJ n|}|
rt          |	t                    sJ |	}|j        }|j        r|j        j        }ng }|j         ot#          |j                  dk    }|                    ||ddd|          \  }}|,dk    r#|dk    rt)          t+          |                    d }nC|d         }n:t          |	t,                    sJ |	}|j        }|                    |ddd          }||j        <t+          |          }|                    d          s|dk    rt)          |          dS                     d          |j        j        #d"# fd} |            s;t                              d|j        j        |                                |           |j        }|
r<|                                }|                                                    d          }n|                                }|j         }|sJ dk    r`|!                    d          "                                } d}!|                    dd          s|j        dk    r|
rw|j        j#        rdk    r|!dz  }!|j        j#        r dk    r| $                    d           r|!dz  }!dv r/| $                    d!          r|$                    d           r|!dz  }!nx|j        j#        rRdk    r|$                    d          r|!dz  }!nKdk    r*|$                    d          s| %                    d          } n|$                    d          r|!dz  }!|!dk    r| d|!z  z  } |tM          j'        |           z  }tQ          ||||)                                ||          |j        f}"|"S )#N>   r  r  r;  r  z&Unparseable C++ cross-reference: %r
%sr   r  r  r  r  r  r   T)r  r   r   r   r  templateParamInQualifiedr   r  zstd::stdcpp:r   r  c                     dk    rdS                                } | r| v S t                              d d            t          )Nr  TzType is z, declaration type is )objtypes_for_roler   r  AssertionError)objtypesdecl_typr   r  s    r   
check_typez1CPPDomain._resolve_xref_inner.<locals>.check_type  s`    e||t--c22H ,8++LLICIIxIIJJJ  r   zcpp:%s targets a %s (%s).r   refexplicitFr  r  r  z
operator()operator)r   r  )*r   r   r  r   r   r   r@  r  r  r  r  r  r   r  r  r  r   r   r   r  r   r   r   r   r  r   r   removeprefixr   r   r   r   r   r  astextrA  endswithr  r   Textr#   get_newest_id)$r   r   r)  r*  r  r  r  r+  r   r   r  r#  parser2r  e2r  r  r   r  r   r  search_in_siblingsr  r  r   r   txt_namer7  r   full_nested_namedisplay_namer   r  	add_parenr  r6  s$   `   `                              @r   _resolve_xref_innerzCPPDomain._resolve_xref_inner#  s*    /!!dNF!&4
KKK	 & 8 8 : :C 	 	 	o%%*3B3K$sz  --/// BB '   #CRC[FBBBBBB NN962PT     :::::)	* (,xx0@$'G'G
i. 	($/$=$=j$I$IM  2\6222_jo>>>[--a00111     'M #	c<00000B=D  $!#!2!<!#&*k/!Ks4:!7K#0#:#:"&"!3 $; $ $ G[ ,&&"&@@@ $CIIs333 AJc>22222D9D..cTTQU /  A 9-4yyH""7++ +x5/@/@Hc***:v&&=+	! 	! 	! 	! 	! 	! 	! 	! z|| 	NN+(&&((     m 	5 5577+>>@@GGLLLL2244L) ,LLOO**,,E IHH]E22+*j88 +z: 'se||!Q	 
;'6MM!NN<88 * "Q	..!NN:66 /(11,?? / "Q	 z: +%<<L,A,A$,G,G<%NII F]]#/#8#8#>#> A(-(:(:4(@(@'0066 +%NI1}}	))
5)))H))++  "

 
s?   = 
C#C+B?C
B"BCB""#CCnodes.reference | Nonec           	     D    |                      |||||||          d         S )Nr   )rF  )r   r   r)  r*  r  r  r  r+  s           r   resolve_xrefzCPPDomain.resolve_xref  s3     ''gsFD(
 

 	r   !list[tuple[str, nodes.reference]]c           
         t          j                    5  |                     |||d|||          \  }}d d d            n# 1 swxY w Y   |r&|dk    rd|fgS d|                     |          z   |fgS g S )Nr  r  zcpp:templateParamr1  )r   suppress_loggingrF  role_for_objtype)	r   r   r)  r*  r  r  r+  retnoder   s	            r   resolve_any_xrefzCPPDomain.resolve_any_xref  s     %'' 	 	#77['5&$   GW	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	L/)),g677$"7"7"@"@@'JKK	s   ?AA-Iterator[tuple[str, str, str, str, str, int]]c              #    K   | j         d         }|                                D ]}|j        
|j        sJ |                                }t          |                              d          }|                                                    d          }|j        j        }|j        }|j        	                                }|||||dfV  d S )Nr  r   r   )
r  get_all_symbolsr   r   r   r   r   r   r   r>  )	r   r  r   rC  r   dispnamer   r   r   s	            r   get_objectszCPPDomain.get_objects  s      i.!1133 
	E 
	EF!)>!!!%::<<'((//44D'::<<CCCHHH ,7KnG*88::I+w	1DDDDD
	E 
	Er   
str | Nonec                   |                     dd           }|d S |                     dd           }|t          |j                  dk    rd S | j        d         }|                    |          }|                                }| d| S )N	reftargetr  r   r  r=  )r@  r   r  r  r   )r   r  r  r  r  r   parent_names          r   get_full_qualified_namez!CPPDomain.get_full_qualified_name  s    +t,,>4'+xx0@$'G'G
Z_!5!5!:!:4i.#11*==#88::)))))r   )r   r   r   r   )r   r1   r   r   r   r  r   r   )r  r-   r   r   )r"  r#  r$  r   r   r   )r   r1   r)  r   r*  r/   r  r   r  r   r  r-   r+  r(   r   r,  )r   r1   r)  r   r*  r/   r  r   r  r   r  r-   r+  r(   r   rG  )r   r1   r)  r   r*  r/   r  r   r  r-   r+  r(   r   rJ  )r   rP  )r  r(   r   rU  )$rI  rJ  rK  rL  r   r   r   r   object_typesrq  rv  r]  rZ  rS  rX  ry  r{  r}  r  r  r  r   r  r  rolesr   initial_datar  r  r!  r(  rF  rI  rO  rT  rY  rU  r   r   r  r    s       
 
 DE7WhfMM7WlFCCGAAjMM6<HH'!!H++xEE&		<88711Y<<LAA&		6<@@gaaoo|\JJ A"##\8U
 
 !A"##	
 	
 L2 	. 		
 	% 	/ 	 	 	# 	 	} 	m 	) 	'  	0!" 	.#& 	'J, {}}+--t,,,+--{}};==!kmm4(((E*** E  vdD$dD$GG L
- - - -&9 9 9 96 6 6 61 1 1 12s s s sj      (E E E E* * * * * *r   r  appr.   r2   c           	        |                      t                     |                     dg dt          t          h                     |                     dg dt          t          t
          h                     |                     dg dt          t          t
          h                     |                     dd dt          t          t          h                     |                     t                     |                     ddd	t          t          h                     |                     d
dd	t          t          h                     dd}|                     d|           dddddS )Nr   r   )typescpp_id_attributescpp_paren_attributesr  cpp_debug_lookupFr   cpp_debug_show_treer]  r.   r   r   c                    | j         j        t          _        | j         j        t          _        | j         j                            d           d S )NT)r   )r   rb  r   debug_lookuprc  r  r   sort)r]  s    r   
init_stuffzsetup.<locals>.init_stuff)  s>    !j9!$!?
*///=====r   zbuilder-initedbuiltin	   T)r   env_versionparallel_read_safeparallel_write_safe)r]  r.   r   r   )
add_domainr  add_config_value	frozensetr  r6  r  r   add_post_transformr  r  connect)r]  rg  s     r   setuprr    s   NN92BYPTvEVEVWWW,b%y$PU?W?WXXXED%=1I1I     +h((	     >*** +UBi>O>OPPP.rD6ARARSSS> > > >
 KK *--- "#	  r   )r   r   )r]  r.   r   r2   )rL  
__future__r   r   r_  r   typingr   docutilsr   docutils.parsers.rstr   sphinxr   sphinx.directivesr	   sphinx.domainsr
   r   sphinx.domains.cpp._astr   r   r   r   r   sphinx.domains.cpp._idsr   sphinx.domains.cpp._parserr   sphinx.domains.cpp._symbolr   r   sphinx.errorsr   sphinx.localer   r   sphinx.rolesr   sphinx.transformsr   !sphinx.transforms.post_transformsr   sphinx.utilr   sphinx.util.cfamilyr   r   r   sphinx.util.docfieldsr   r    sphinx.util.docutilsr!   r"   sphinx.util.nodesr#   collections.abcr$   r%   r&   r'   docutils.nodesr(   r)   r*   r+   sphinx.addnodesr,   r-   sphinx.applicationr.   sphinx.buildersr/   r0   sphinx.environmentr1   sphinx.util.typingr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   	getLoggerrI  r   r   r   rS  rX  rZ  r]  rq  rv  ry  r{  r}  r  r  r  r  r   r  r  r  r  rr  rU  r   r   <module>r     s
     " " " " " " 				                         + + + + + +       / / / / / / * * * * * * * *              , + + + + + 7 7 7 7 7 7 D D D D D D D D               ! ! ! ! ! ! - - - - - - @ @ @ @ @ @               
 6 5 5 5 5 5 5 5 < < < < < < < < * * * * * * A--------$$$$$$$$IIIIIIIIIIII<<<<<<<<))))))''''''444444333333@@@@@@@@X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xt 
	8	$	$7 7 7 7
t t t t t!.1 t t tn	    I       y       i       	   B    Y       Y       I       )                  F    _   <    O   2
 
 
 
 
 
 
 
8W) W) W) W) W)_ W) W) W)t, , , , ,&s+ , , ,^         (      F# # # # #* # # #Lx* x* x* x* x* x* x* x*v     r   