o $aa @s2dZddlZddlZddlZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZmZddlmZddlmZmZddlmZddlmZdd lmZdd lmZmZm Z dd l!m"Z"dd l#m$Z$dd l%m&Z&m'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2m3Z3ddl4m5Z5ddl4m6Z7ddl8m9Z9ddl:m;Z;ddlZ>m?Z?ddl@mAZAddlBmCZCddlDmEZEmFZFmGZGddlHmIZImJZJe;KeLZMeNdejOZPe2de2de2de2de2d e2d!e2d"d#ZQGd$d%d%e ZRGd&d'd'e ZSdld(eTd)e0d*ejfd+d,ZUdld-eTd)e0d*e efd.d/ZVdld0eTd)e0d*ejWfd1d2ZXd3ed0eTd*dfd4d5ZYGd6d7d7ZZGd8d9d9eZe=Z[Gd:d;d;eZe>Z\Gdd?d?e)eeTeTfZ^Gd@dAdAe^Z_GdBdCdCe_Z`GdDdEdEe^ZaGdFdGdGe^ZbGdHdIdIe^ZcGdJdKdKecZdGdLdMdMecZeGdNdOdOecZfGdPdQdQe^ZgGdRdSdSe^ZhGdTdUdUZiGdVdWdWeAZjGdXdYdYeAZkGdZd[d[e9Zld\e"d]eTd^eTd_ed*df d`daZmGdbdcdce,ZnGdddedee+Zod\e"d)e0dfedged*ef dhdiZpd\e"d*e eTeffdjdkZqdS)mz sphinx.domains.python ~~~~~~~~~~~~~~~~~~~~~ The Python domain. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N) Parameter) AnyDictIterableIteratorList NamedTupleOptionalTupleTypecast)nodes)ElementNode) directives)Inliner)addnodes)desc_signature pending_xrefpending_xref_condition)Sphinx)Builder)RemovedInSphinx50WarningRemovedInSphinx60Warning)ObjectDescription)DomainIndex IndexEntryObjType)BuildEnvironment)___)ast)parse)XRefRole)logging)Field GroupedField TypedField)SphinxDirective)signature_from_str)find_pending_xref_conditionmake_id make_refnode) OptionSpec TextlikeNodea ^ ([\w.]*\.)? # class name(s) (\w+) \s* # thing name (?: \(\s*(.*)\s*\) # optional: arguments (?:\s* -> \s* (.*))? # return annotation )? $ # and nothing more modulekeywordoperatorobject exception statementzbuilt-in function)r0r1r2r3r4r5builtinc@s.eZdZUeed<eed<eed<eed<dS) ObjectEntrydocnamenode_idobjtypealiasedN__name__ __module__ __qualname__str__annotations__boolrCrC7/usr/lib/python3/dist-packages/sphinx/domains/python.pyr7Ds  r7c@s6eZdZUeed<eed<eed<eed<eed<dS) ModuleEntryr8r9synopsisplatform deprecatedNr<rCrCrCrDrEKs  rEtextenvreturncCs|dkrd}nd}|r|jd|jdd}ni}|jjr5|dd}td |d d td |d d g}nt|g}td g|Rd ||d|S)z0Convert a type string to a cross reference node.Noneobjclass py:modulepy:class)rOrP.resolved condition*py) refdomainreftype reftarget) ref_contextgetconfig!python_use_unqualified_type_namessplitrr Textr)rIrJrZkwargs shortname contnodesrCrCrD type_to_xrefSs&      re annotationcsdtjdttffdd |durtjdtddz4t|}|}t|D]$\}}t |t j r8|d ||<q't |t j rK| rKtt||||<q'|WSty]t||gYSw) zParse type annotation.noderKcs|t|tjrtd|jd|jfgSt|tjr3|j}| |j | |j |St|tj rFt t ddt gSt|tjr|jturXt ddgSt|jtrht dt|jgSt|jtrxt dt|jgSt|jtrt dt|jgStt|jgSt|tjr|jSt|tjr|jSt|tjrt ddg}|jr|jD]}| ||t dd|t q|||t dd|St|tjrt fd d |j!DgSt|tj"rt|j#gSt|tj$rW|j}|t dd| |j%|t dd|dd vrUt&|d dd d D]\}}t|tjrSt'dd|||<q?|St|tj(r|jrg}|jD]}| ||t dd|t qg|||St ddt ddg}|St)j*dkrt|tjrt ddgSt|tj+rt|jgSt,)Nz%s.%srrS|z...[,]c3s|]}|VqdSNrC).0eunparserCrD z5_parse_annotation..unparse..Literalztyping.Literal)start()))- isinstancer" Attributer ravalueattrBinOpleftextendoprightBitOrrdesc_sig_spacedesc_sig_punctuationConstantEllipsisrBdesc_sig_keywordreprintdesc_sig_literal_numberr@desc_sig_literal_stringExprrreltsappendpopModulesumbodyNameid Subscriptslice enumerateliteralr sys version_info NameConstant SyntaxError)rgresultelemisubnoderorCrDrpps                      z"_parse_annotation..unparseNz=The env parameter for _parse_annotation becomes required now. stacklevelr)r"ASTrrwarningswarnr ast_parserr{r rrastriprer@r)rfrJtreerrrgrCrorD_parse_annotationns$R  rarglistc Cst|}td|}d}|jD]}|j|jkr,||jkr,|tddtdd7}|j|j krH||j |jdfvrH|tddtdd7}t}|j|j krd|tdd7}|t d|j 7}n!|j|jkr||tdd7}|t d|j 7}n |t d|j 7}|j|jurt|j|}|tdd7}|t7}|tj ddg|R7}|j|jur|j|jur|t7}|tdd7}|t7}n|tdd7}|tjd|jd gd d 7}||7}|j}q|tjkr|tddtdd7}|S) z*Parse a list of arguments using AST parserz(%s)NrS/rWz**:= default_valueF)classessupport_smartquotes)rdesc_parameterlistr* parametersvalueskindPOSITIONAL_ONLYdesc_parameterdesc_sig_operator KEYWORD_ONLYPOSITIONAL_OR_KEYWORDVAR_POSITIONAL desc_sig_namename VAR_KEYWORDrfemptyrrrdefaultr inliner)rrJparamssig last_kindparamrgchildrenrCrCrD_parse_arglistsL           rsignodec Cst}|g}z|dD]}|}d}}|dr:|t|d|d7<|dd}|ds|drP||dd}|ds?|drp|d sp|d7}|dd}|drp|d rZ|dr|d7}|dd}|dsu|r|dt d d t ||7<|r|t|d|d7<|d8}|s|r||d8}|sq t |dkrt Wnt yt}|t ||7}||7}YdSw||7}dS) z"Parse" a list of arguments separated by commas. Arguments can have "optional" annotations given by enclosing them in brackets. Currently, this will split at any comma, even if it's inside a string literal (e.g. default argument value). rjrrirRruNrkz[]rS) rrr`r startswithr desc_optionalrendswithrrlen IndexError)rr paramliststackargument ends_open ends_closerCrCrD_pseudo_parse_arglists\         rcseZdZejddddfdedededeedede de d ed effd d Z ejddddfdedededeedede de d ed e efd dZ ZS) PyXrefMixinNrolenamedomaintarget innernodecontnoderJinlinerlocationrKc  s8tj||||||ddd} d| d<|jd| d<|jd| d<|dre|d|dd} | d <| d kr?|dd} n | d krJ|d d } t| tj D]} t | | j | j | <| S| St | t r|jjr| j} | |d d }|d |}td d |ddtd d g| Rddig}| || S)N)rrT refspecificrOrP)rQ~rrur[rQrrRrSrTrUrVrW)super make_xrefr\r]rr`listtraverser raparentindexr{rr^r_rclearrr)selfrrrrrrJrrrprefixrIrgrrctextnoderd __class__rCrDr9s6     zPyXrefMixin.make_xrefc  Csd} t| } t| |} t|o||k} d} g}td| D]0}| r)t|}| s0| |r;| |p8|||n| | |||||||||dvrPd} q |S)Nz8(\s*[\[\]\(\),](?:\s*or\s)?\s*|\s+or\s+|\s*\|\s*|\.\.\.)FrsT) recompiler`rBastextfilterr ramatchrr)rrrrrrrJrrdelims delims_re sub_targetssplit_contnode in_literalresults sub_targetrCrCrD make_xrefsZs$    zPyXrefMixin.make_xrefs)r=r>r?r emphasisr@r r/rrrrrr __classcell__rCrCrrDr8sB"rcTeZdZejddddfdedededeedede de d ed effd d Z Z S) PyFieldNrrrrrrJrrrKc .|dkr |dkr d}t||||||||SNrNrLrMrr rrrrrrrJrrrrCrDrw zPyField.make_xref r=r>r?r rr@r r/rrrrrrCrCrrDrv"rc@s eZdZdS)PyGroupedFieldN)r=r>r?rCrCrCrDrsrcr) PyTypedFieldNrrrrrrJrrrKc rrrrrrCrDrrzPyTypedField.make_xrefrrCrCrrDrrrc @s:eZdZUdZejejejejejdZee d<e de ddddd d e d e d d ddd d e de dddd de de ddddede dddddgZdZdedeejfdd Zdefd!d"Zded#edeeeffd$d%Zd&ed'eeefdefd(d)Zd*eeefded#edd+fd,d-Zd2d.d/Zd2d0d1Zd+S)3PyObjectz Description of a general Python object. :cvar allow_nesting: Class is an object that allows for nested namespaces :vartype allow_nesting: bool )noindex noindexentryr0 canonicalrf option_spec parameter Parameters)rr argrr1kwargkwparamrN) paramtypetypeT)labelnames typerolename typenames can_collapsevariable Variables)varivarcvar)vartype exceptionsRaisesexc)raisesraiser4except)rrrr returnvalueReturnsF)returnsrK)rhas_argr returntypez Return type)rtype)rr'r bodyrolenamerrKcCsgS)zTMay return a prefix to put before the object name in the signature. rCrrrCrCrDget_signature_prefixzPyObject.get_signature_prefixcCdS)zqMay return true if an empty argument list is to be generated even if the document contains none. FrCrrCrCrD needs_arglistr-zPyObject.needs_arglistrc Cst|}|dur t|\}}}}|jd|jjd}|jjd} | rYd} |rG|| ks7|| drG||} |t | d d}n$|rR| d||} n| d|} nd} |rg| d} ||} nd} |} ||d<| |d <| |d <| |} | rt | turtd | t|t| dt| 7}n|tjt| dg| R7}|r|t||7}n|r| r|jjjr|d} |t| | 7}|t||7}|r z |t||j7}Wn9tyt||Yn,ty }ztj d |||d t||WYd}~nd}~ww|!r|t"7}|r,t#||j}|tj$|dg|R7}|jd}|rF|td|dt%t|7}| |fS)aJTransform a Python signature into RST nodes. Return (fully qualified name of the thing, classname if any). If inside a class, the current class name is handled intelligently: * it is stripped from the displayed name if present * it is added to the full name (return value) if not present Nr0rOrPFrQTrSrNfullnamezPython directive method get_signature_prefix() returning a string is deprecated. It must now return a list of nodes. Return value was '{}'.z could not parse arglist (%r): %srrf )& py_sig_rer ValueErrorgroupsoptionsr]rJr\rrlstriprstripr,rr@rrformatrrdesc_annotationr ra desc_addnamer^add_module_names desc_namerrrNotImplementedErrorloggerwarningr0rr desc_returnsr)rrrmrrrretannmodname classname add_moduler1 sig_prefixnodetextr rannorCrCrDhandle_signatures              zPyObject.handle_signaturerErcCstd)z2Return the text for the index entry of the object.z!must be implemented in subclasses)r?)rrErrCrCrDget_index_text!szPyObject.get_index_textname_clsNc Cs|jd|jjd}|r|dnd|d}t|j|jjd|}|d|||kr;||jjjvr;|d||jj |t t |j d}|j ||j||d|jd }|rh|j ||j|d |d d |jvr|||} | r|jd d| |ddfdSdSdS)Nr0rOrQrSridsrXr2r T)r;rr entriessingle)r7r]rJr\r,statedocumentrrNnote_explicit_targetr PythonDomain get_domain note_objectr:rL indexnode) rrMrrrEr1r9rcanonical_name indextextrCrCrDadd_target_and_index%s(   zPyObject.add_target_and_indexcCsd}|jr|jd\}}|jr|}n|r|d}|r1||jjd<|jr1|jjdg}||d|jvrS|jjdg}||jjd|jd|jjd<dSdS) aHandle object nesting before content :py:class:`PyObject` represents Python language constructs. For constructs that are nestable, such as a Python classes, this method will build up a stack of the nesting hierarchy so that it can be later de-nested correctly, in :py:meth:`after_content`. For constructs that aren't nestable, the stack is bypassed, and instead only the most recent object is tracked. This object prefix name will be removed with :py:meth:`after_content`. NrRrQrP py:classesr0 py:modulesrO) r allow_nestingrrJr\ setdefaultrr7r])rrr1 name_prefixrmodulesrCrCrDbefore_content@s"     zPyObject.before_contentcCs|jjdg}|jrz|Wn tyYnwt|dkr%|dnd|jjd<d|jvrM|jjdg}|rD||jjd<dS|jjddSdS) a^Handle object de-nesting after content If this class is a nestable object, removing the last nested class prefix ends further nesting in the object. If this class is not a nestable object, the list of classes should not be altered as we didn't affect the nesting levels in :py:meth:`before_content`. r[rrRNrPr0r\rO)rJr\r^r]rrrr7)rrr`rCrCrD after_contentas     zPyObject.after_content)rKN)r=r>r?__doc__rflag unchangedr r.rArr rr&rdoc_field_typesr]r@rr rr,rBr0rr rKrLrZrarbrCrCrCrDrsR      ] !rcseZdZUdZejZeed<e de j ide de ejfddZdefdd Zd ee e fde d edd ffd d Zde d ee e fde fddZZS) PyFunctionzDescription of a function.r asyncrrKcCs"d|jvrtddtgSgS)NrhrS)r7rrrr+rCrCrDr,s  zPyFunction.get_signature_prefixcCr.)NTrCr/rCrCrDr0zPyFunction.needs_arglistrMrNc st|||d|jvrS|jd|jjd}|dd}|\}}|rr?rcrr copyr.rAupdaterrdr@rr rr,rBr0r rrZrLrrCrCrrDrg{s &rgcZeZdZdZdeeffdd Zdedede eefffdd Z de fd d Z Z S) PyDecoratorFunctionzDescription of a decorator.rKcd|_tS)Nz py:functionrrrunr/rrCrDrus zPyDecoratorFunction.runrrc&t||}|dtdd|SNr@rrKinsertrr<rrrretrrCrDrKz$PyDecoratorFunction.handle_signaturecCr.NFrCr/rCrCrDr0riz!PyDecoratorFunction.needs_arglistr=r>r?rcrrrur@rr rKrBr0rrCrCrrDrrs "rrc|eZdZUdZejZeed<e e j e j dde de dee e fffdd Zd e d ee e fde fd d ZZS) PyVariablezDescription of a variable.r rr}rrrKc t||\}}|jd}|r+t||j}|tj|dtddt g|R7}|jd}|rJ|t|dt tddt t |7}||fSNrrSrr}r rrKr7r]rrJrr;rrr rarrrr1rtyp annotationsr}rrCrDrKs&       zPyVariable.handle_signaturerErMcCs(|\}}|rtd||fStd|S)N%s (in module %s)z%s (built-in variable))r )rrErMrrmrCrCrDrLs zPyVariable.get_index_textr=r>r?rcrr ror.rArprrer@rr rKrLrrCrCrrDrs "&rc@sneZdZUdZejZeed<e de j idZ de deejfddZd e d ee e fde fd d Zd S) PyClasslikezO Description of a class-like object (classes, interfaces, exceptions). r finalTrrKcCs@d|jvrtdtt|jtgSt|jtgS)Nr)r7r rarrr:r+rCrCrDr,s z PyClasslike.get_signature_prefixrErMcCsH|jdkr|std|dStd|d|fS|jdkr"|dSdS)NrNz%s (built-in class)rz%s (class in %s)r4rS)r:r rnrCrCrDrLs  zPyClasslike.get_index_textN)r=r>r?rcrr ror.rArprrdr]r@rr rr,r rLrCrCrCrDrs "rc @seZdZUdZejZeed<e e j e j e j e j e j e j dde fddZ dedeejfdd Zd ed eeefdefd d ZdS)PyMethodzDescription of a method.r )abstractmethodrh classmethodrproperty staticmethodrKcCsd|jvrdSdS)NrFT)r7r/rCrCrDr0s zPyMethod.needs_arglistrcCsg}d|jvr|td|td|jvr*|td|td|jvr>|td|td|jvrR|td|td|jvrf|td|td|jvrz|td|t|S) Nrrabstractrhrrrstaticr7rr rarrrrrrCrCrDr,s(      zPyMethod.get_signature_prefixrErMcCs|\}}z|dd\}}|r|jjjrd||g}Wnty5|r/td||fYSd|YSwd|jvrCtd||fSd|jvrPtd||fSd |jvr]td ||fStd ||fS) NrQrurjz%s()rz%s() (%s class method)r%s (%s property)rz%s() (%s static method)z%s() (%s method))rsplitrJr^r=joinr5r r7)rrErMrrmclsnamemethnamerCrCrDrLs$     zPyMethod.get_index_textN)r=r>r?rcrr ror.rArprrdrBr0r@rr rr,r rLrCrCrCrDrs  "rc>eZdZUdZejZeed<de e ffdd Z Z S) PyClassMethodzDescription of a classmethod.r rKcd|_d|jd<tS)N py:methodTrrr7rrur/rrCrDru9  zPyClassMethod.run r=r>r?rcrr ror.rArrrurrCrCrrDr4 rcr)PyStaticMethodzDescription of a staticmethod.r rKcr)NrTrrr/rrCrDruErzPyStaticMethod.runrrCrCrrDr@rrcrq) PyDecoratorMethodz!Description of a decoratormethod.rKcrs)Nrrtr/rrCrDruOs zPyDecoratorMethod.runrrcrvrwryr{rrCrDrKSr}z"PyDecoratorMethod.handle_signaturecCr.r~rCr/rCrCrDr0XrizPyDecoratorMethod.needs_arglistrrCrCrrDrLs "rcr) PyAttributeDescription of an attribute.r rrrrKc rrrrrrCrDrKes&       zPyAttribute.handle_signaturerErMcCx|\}}z|dd\}}|r|jjjrd||g}Wnty3|r/td||fYS|YSwtd||fS)NrQrurz%s (%s attribute)rrJr^r=rr5r rrErMrrmrattrnamerCrCrDrLz zPyAttribute.get_index_textrrCrCrrDr\s "&rcseZdZdZejZeej ej ej dde de de e e fffdd Zde deejfdd Zd e d e e e fde fd d ZZS) PyPropertyr)rrrrrrKcs^t||\}}|jd}|r+t||j}|tj|dtddt g|R7}||fS)NrrSr) rrKr7r]rrJrr;rr)rrrr1rrrrrCrDrKs     zPyProperty.handle_signaturecCsvg}d|jvr|td|td|jvr*|td|t|td|t|S)NrrrrNrrrrCrCrDr,s  zPyProperty.get_signature_prefixrErMcCr)NrQrurrrrrCrCrDrLrzPyProperty.get_index_text)r=r>r?rcrr rorprrdrer@rr rKrr rr,rLrrCrCrrDrs " & rcsDeZdZdZdededeeefffdd ZdefddZ Z S) PyDecoratorMixinz) Mixin for decorator directives. rrrKcsf|jjD]}|jdkrtjd|tddn qtjdtddt||}|dt dd|S)NDirectiveAdapterzEPyDecoratorMixin is deprecated. Please check the implementation of %srrzPyDecoratorMixin is deprecatedrrx) r__mro__r=rrrrrKrzrr<)rrrrmr|rrCrDrKs  z!PyDecoratorMixin.handle_signaturecCr.r~rCr/rCrCrDr0rizPyDecoratorMixin.needs_arglist) r=r>r?rcr@rr rKrBr0rrCrCrrDrs"rc@sheZdZUdZdZdZdZdZddddej ej dZ e e d <d e efd d Zd ed efddZdS)PyModulez8 Directive to mark description of a new module. FrurcC|SrlrCxrCrCrDzPyModule.cCrrlrCrrCrCrDrr)rGrFrrHr rKc Cs*tt|jd}|jd}d|jv}||jjd<g}|st|j|j j d|}t j dd|gdd}| |||}||krO||j j jvrO|d ||j j |||||jd d|jd dd |jv|j|d||d ||dtd|f}tjd||ddfgd} || |S)NrXrrrOr0rST)rNismodrNrFrGrHr2z%s; %srk)rO)r rTrJrU argumentsrr7r\r,rQrRr rset_source_info make_old_idrNrrS note_moduler]rVrlrr) rrrErr|r9r old_node_idrYinoderCrCrDrus2        z PyModule.runrcCsd|S)zGenerate old styled node_id. Old styled node_id is incompatible with docutils' node_id. It can contain dots and hyphens. .. note:: Old styled node_id was mainly used until Sphinx-3.0. z module-%srC)rrrCrCrDrszPyModule.make_old_idN)r=r>r?rc has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespacerrdr r.rArrrur@rrCrCrCrDrs $rc@s@eZdZUdZdZdZdZdZiZe e d<de e fddZ d S) PyCurrentModulez This directive is just to tell Sphinx that we're documenting stuff in module foo, but links to module foo won't lead here. Frurr rKcCs:|jd}|dkr|jjddgS||jjd<gS)NrrLrO)rrrJr\r)rrErCrCrDrus  zPyCurrentModule.runN)r=r>r?rcrrrrr r.rArrrurCrCrCrDrs  rc@s6eZdZdedededededeeeff ddZd S) PyXRefRolerJrefnodehas_explicit_titletitlerrKcCs|jd|d<|jd|d<|s;|d}|d}|dddkr;|dd}|d}|dkr;||dd}|dddkrM|dd}d|d <||fS) NrOrPrQrrrurRTr)r\r]r8rfind)rrJrrrrdotrCrCrD process_link(s     zPyXRefRole.process_linkN) r=r>r?rrrBr@r rrCrCrCrDr's  rapprr:contentcCsx|dkrdS|D]1}t|tjr9tttj|}|D]}ttj|d}|dks1| dr8| |nqqdS)z+Filter ``:meta:`` field from its docstring.rXNrmetazmeta ) r{r field_listr rfield field_bodyrrrremove)rrr:rrgfieldsr field_namerCrCrDfilter_meta_fields>s  rc @sTeZdZdZdZedZedZd dee de e e e e e fe ffdd ZdS) PythonModuleIndexz< Index subclass to provide the Python module index. modindexzPython Module Indexr`NdocnamesrKc Csi}|jjjd}t|tdd}t|jjdddd}d}d }|D]\}\}} } } } |r4||vr4q$|D]} || rI|t| d}| }nq6d}|sS|d}}||d  g}| d d }||kr||kr|r|d }t |d d |d |d|d|d|d|d <n||s| t ||d dddddd }n|d 7}d }| rt dnd}| t ||||| | || |}q$t|||k}t|}||fS)Nmodindex_common_prefixT)keyreverser`cSs |dS)Nr)lowerrrCrCrDr^s z,PythonModuleIndex.generate..)rrSrrQrRrurry Deprecated)rrJr^sortedrdataitemsrr^rr`rrr )rrrignoresr` prev_modname num_toplevelsrEr8r9rF platformsrHignorestrippedrOpackagelastsubtype qualifiercollapsesorted_contentrCrCrDgenerateVsV     zPythonModuleIndex.generaterl)r=r>r?rcrr localnamercrr@r rrrBrrCrCrCrDrMs rc@seZdZUdZdZdZeedddeedddeeddd deed d ddeed d deed d deedd deedddeeddddeedddd Ze e efe d<e e eeeeeeeeeeed Zeeeddeeeeddeed ZiidZe e e e eeffe d<egZe de e e!ffddZ" !dNd"e d#e d$e d%e#d&edd!f d'd(Z$e de e e%ffd)d*Z&d"e d$e d+e d,e d-e#dd!f d.d/Z'd0e dd!fd1d2Z(d3e)e d4e dd!fd5d6Z* 7dOd8e+d9e d:e d"e d;e dZ-d8e+d?e d@e.d;e dAe dBe/dCe0de1e0fdDdEZ2d8e+d?e d@e.dAe dBe/dCe0de)ee e0ffdFdGZ3d@e.d?e d"e dCe4de0f dHdIZ5de6ee e e e e e,ffdJdKZ7dBe0de1e fdLdMZ8d!S)PrTzPython language domain.rXPythonfunctionfuncrMrrNr r4methodmethz class methodz static method attributer~r_propr0mod) rrrNr4rrrrrr0 object_types) rrrNr4rrrrrr0 currentmodule decoratordecoratormethodT) fix_parens) rr rrNconstr~rrrM)objectsr` initial_datarKcC|jdiS)Nrrr^r/rCrCrDrzPythonDomain.objectsFNrr:r9r;rcCsj||jvr'|j|}|jr|durn|jdur|rdStjtd||j|dt|jj||||j|<dS)zQNote a python object for cross reference. .. versionadded:: 2.1 FNzWduplicate object description of %s, other instance in %s, use :noindex: for one of themr2)rr;r@rAr!r8r7rJ)rrr:r9r;rotherrCrCrDrVs   zPythonDomain.note_objectcCr)Nr`rr/rCrCrDr`rzPythonDomain.modulesrFrGrHcCst|jj|||||j|<dS)zQNote a python module for cross reference. .. versionadded:: 2.1 N)rErJr8r`)rrr9rFrGrHrCrCrDrs zPythonDomain.note_moduler8cCsXt|jD] \}}|j|kr|j|=qt|jD] \}}|j|kr)|j|=qdSrl)rrrr8r`)rr8r1rMrErrCrCrD clear_docs  zPythonDomain.clear_docr otherdatacCsX|dD]\}}|j|vr||j|<q|dD]\}}|j|vr)||j|<qdS)Nrr`)rr8rr`)rrrr1rMrErrCrCrDmerge_domaindatas    zPythonDomain.merge_domaindatarrJrErFr searchmodec s|dddkr|dd}|sgSg}d}|dkr|dur$tjn|dur|rJ|rJ|d|d|} | jvrJj| jvrJ| }|s|rj|d|jvrjj|d|jvrj|d|}nn|jvrzj|jvrz|}n^d|fddjD}nM|jvr|}nE|dkrgS|r|d|jvr|d|}n-|r|d|jvr|d|}n|r|r|d|d|jvr|d|d|}|dur||j|f|S) zFind a Python object for "name", perhaps using the given module and/or classname. Returns a list of (name, object entry) tuples. rNz()rurQcs4g|]}|rj|jvr|j|fqSrC)rrr:)rmonameobjtypes searchnamerrCrD "s  z)PythonDomain.find_obj..r)rrobjtypes_for_rolerr:r) rrJrErFrrrmatchesnewnamer1rCrrDfind_objsL    zPythonDomain.find_obj fromdocnamebuilderrrgrcCs6|d}|d} |drdnd} |||| ||| } | s-|dkr-|||| |d| } | s=|dkr=|||| |d| } | sAdSt| dkrld d | D} t| dkrW| } ntjtd |d d d| Ddd|d| d\} }|ddkr|||| |St |d}|r|j }n|g}t |||d|d|| S)NrOrPrrurr~rrcSsg|] }|djs|qS)ru)r;)rmrCrCrCrDr Psz-PythonDomain.resolve_xref..z5more than one target found for cross-reference %r: %sz, css|]}|dVqdS)rNrC)rmrrCrCrDrqUrrz,PythonDomain.resolve_xref..refpython)rrrrr0rT) r]hasattrrrr@rAr!r_make_module_refnoder+rr-)rrJrrrrrgrrErrr  canonicalsrrMrrrCrCrD resolve_xref7s8           zPythonDomain.resolve_xrefc Cs|d}|d}g} |||||dd} | D]?\} } | ddkr0| d|||| |fqt|d} | r;| j}n|g}| d|| dt||| d | d|| fq| S) NrOrPrurr0zpy:modrTzpy:r)r]rrrr+rrole_for_objtyper-)rrJrrrrgrrErrr rrMrrrCrCrDresolve_any_xreffs*     zPythonDomain.resolve_any_xrefcCsb|j|}|}|jr|d|j7}|jr|td7}|jr&|d|jd7}t|||j|j||S)Nz: z (deprecated)z (rx)r`rFrHr rGr-r8r9)rrrrrr0rrCrCrDrs  z!PythonDomain._make_module_refnodeccs|jD]\}}||d|j|jdfVq|jD]%\}}|jdkr@|jr4|||j|j|jdfVq|||j|j|jdfVqdS)Nr0rrRru)r`rr8r9rr:r;)rrErrefnamerMrCrCrD get_objectss zPythonDomain.get_objectscCs@|d}|d}|d}|durdSdtd|||gS)NrOrPr[rQ)r]rr)rrgrErrrCrCrDget_full_qualified_names   z$PythonDomain.get_full_qualified_name)FN)r)9r=r>r?rcrrrr rrr@rArgrrrrrrrrrrrrrrrolesrr rrindicesrr7rrBrVrEr`rrrrrrrrrrr rrrrrrrrCrCrCrDrTs  "     8 /  " rTrgrcCsdtdtfdd}|ddkrdS|dd vr"|d d kr"|S|dd vr?|d }ttt|dr9|S||r?|SdS) z1Do not emit nitpicky warnings for built-in types.srKcSs$|dr |ddd}|tjvS)Nztyping.rQru)rr`typing__all__)rrCrCrDistypings  z"builtin_resolver..istypingrYrXNrZ)rNrMr[rL)rNr )r@rBr]inspectisclassgetattrbuiltins)rrJrgrr"r[rCrCrDbuiltin_resolvers r'cCsL|d|t|ddd|dt|jdtddd d d d d S) Nzsphinx.directivesr_FrJzobject-description-transformzmissing-referencei)priorityr6ryT)version env_versionparallel_read_safeparallel_write_safe)setup_extension add_domainrTadd_config_valueconnectrr')rrCrCrDsetups   r1rl)rrcr&r#rrr rrrrrrrrr r r r docutilsr docutils.nodesrrdocutils.parsers.rstrdocutils.parsers.rst.statesrsphinxrsphinx.addnodesrrrsphinx.applicationrsphinx.buildersrsphinx.deprecationrrsphinx.directivesrsphinx.domainsrrrrsphinx.environmentr sphinx.localer r!sphinx.pycode.astr"r#r sphinx.rolesr$ sphinx.utilr%sphinx.util.docfieldsr&r'r(sphinx.util.docutilsr)sphinx.util.inspectr*sphinx.util.nodesr+r,r-sphinx.util.typingr.r/ getLoggerr=r@rVERBOSEr4rlr7rEr@rerrrrrrrrrrgrrrrrrrrrrrrrrrrrTr'r1rCrCrCrDs  0                 e23>  h&%?  -3?H