3

T'íc ~ã@s¬dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZddl
mZddlmZmZmZmZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZdd	l m!Z!dd
l"m#Z#ddl"m$Z%ddl&m'Z'dd
l(m)Z)ddl(m*Z+ej,d~kr2ddlm-Z-m.Z.m/Z/n"e0e1j2ƒZ-e0e3j4ƒZ.e0e5j6dƒZ/e'j7e8ƒZ9ej:dej;ƒZ<eedœdd„Z=eedœdd„Z>ddœeeedœdd„Z?eeee3dœdd„Z@eee3efdœd d!„ZAeee3efdœd"d#„ZBeeed$fdœd%d&„ZCeeeed$fdœd'd(„ZDeeedœd)d*„ZEeeFdœd+d,„ZGeeFd-œd.d/„ZHeeFd-œd0d1„ZIeedœd2d3„ZJeeFdœd4d5„ZKdeee3eFd6œd7d8„ZLd€eee3eFd6œd9d:„ZMeeFd-œd;d<„ZNeeFdœd=d>„ZOeeFdœd?d@„ZPeeFdœdAdB„ZQeeFdœdCdD„ZReeFdœdEdF„ZSeeFdœdGdH„ZTeeFdœdIdJ„ZUeeFdœdKdL„ZVeeFdœdMdN„ZWeeFdœdOdP„ZXeeFdœdQdR„ZYeeFdœdSdT„ZZee3eedUœdVdW„Z[ee3dXœdYdZ„Z\ee3eFd[œd\d]„Z]Gd^d_„d_ƒZ^Gd`da„daƒZ_Gdbdc„dcƒZ`Gddde„deee3efƒZaeeFdfœdgdh„ZbdidifeeFeFeejcdjœdkdl„Zddejceeejcdmœdndo„Zed‚ejceFeFeFe3dqœdrds„Zfe3ejcdtœdudv„Zgdƒe#jhe3ejcdxœdydz„Zie[diddfeeeFee3e3d{œd|d}„ZjdS)„z&Helpers for inspecting Python modules.éN)ÚpartialÚ
partialmethod)Ú
import_module)Ú	ParameterÚisclassÚismethodÚismethoddescriptorÚismodule)ÚStringIO)Ú
ModuleType)	ÚAnyÚCallableÚDictÚMappingÚOptionalÚSequenceÚTupleÚTypeÚcast)ÚRemovedInSphinx50Warning)Úast)Úunparse)Úlogging)Ú
ForwardRef)Ú	stringifyéé)ÚClassMethodDescriptorTypeÚMethodDescriptorTypeÚWrapperDescriptorTypeÚfromkeysz at 0x[0-9a-f]{8,16}(?=>))ÚfuncÚreturncCs>tjdtddtj|ƒ}g}d}d}g}f}i}f}i}|j|jk	rP|j|d<xÂ|jjƒD]´}	|	j	}
|	j
}|
tjkr‚|j
|ƒnx|
tjkr°|j
|ƒ|	j|	jk	rú||	jf7}nJ|
tjkrÀ|}n:|
tjkrì|j
|ƒ|	j|	jk	rú|	j||<n|
tjkrú|}|	j|	jk	r\|	j||<q\W|sd}|s(d}tj|||||||ƒS)zPLike inspect.getfullargspec but supports bound methods, and wrapped
    methods.z-sphinx.ext.inspect.getargspec() is deprecatedé)Ú
stacklevelNr")ÚwarningsÚwarnrÚinspectÚ	signatureÚreturn_annotationÚemptyÚ
parametersÚvaluesÚkindÚnamerÚPOSITIONAL_ONLYÚappendÚPOSITIONAL_OR_KEYWORDÚdefaultÚVAR_POSITIONALÚKEYWORD_ONLYÚVAR_KEYWORDÚ
annotationÚFullArgSpec)r!ÚsigÚargsÚvarargsÚvarkwÚ
kwonlyargsÚdefaultsÚannotationsÚ
kwdefaultsÚparamr-r.©rAú5/tmp/pip-build-gk9425m9/sphinx/sphinx/util/inspect.pyÚ
getargspec3sL









rC)Úobjr"cCs6yt|dƒr|Stj|ƒSWntk
r0|SXdS)z?Get an original object from wrapped object (wrapped functions).Z__sphinx_mock__N)Úhasattrr'ÚunwrapÚ
ValueError)rDrArArBrFis
rF)Ústop)rDrHr"cCsjxd|r||ƒr|St|ƒr"|j}qtj|ƒr>t|dƒr>|j}qt|ƒrN|j}qt|ƒr^|j}q|SqWdS)zx
    Get an original object from wrapped object (unwrapping partials, wrapped
    functions, and other decorators).
    Ú__wrapped__N)	Ú	ispartialr!r'Ú	isroutinerErIÚ
isclassmethodÚ__func__Úisstaticmethod)rDrHrArArBÚ
unwrap_allvsrOcCsHt|ddƒ}|dkrdSt|ttfƒr<tdd„|Dƒƒr<|St|ƒ‚dS)z£Get __all__ attribute of the module as dict.

    Return None if given *obj* does not have __all__.
    Raises ValueError if given *obj* have invalid __all__.
    Ú__all__Ncss|]}t|tƒVqdS)N)Ú
isinstanceÚstr)Ú.0ÚerArArBú	<genexpr>”szgetall.<locals>.<genexpr>)Úsafe_getattrrQÚlistÚtupleÚallrG)rDrPrArArBÚgetallŠs rZcCs"t|ddƒ}t|tƒr|SiSdS)z,Get __annotations__ from given *obj* safely.Ú__annotations__N)rVrQr)rDr[rArArBÚgetannotationsšs
r\cCs"t|ddƒ}t|tƒr|SiSdS)z(Get __globals__ from given *obj* safely.Ú__globals__N)rVrQr)rDr]rArArBÚ
getglobals£s
r^.cCs$t|ddƒ}t|tƒr|StƒSdS)z$Get __mro__ from given *obj* safely.Ú__mro__N)rVrQrX)rDr_rArArBÚgetmro¬s
r`cCsFtj|ƒsdSt|diƒ}|jdƒ}t|tƒr>t|ƒdkr>|SdSdS)z%Get __orig_bases__ from *obj* safely.NÚ__dict__Ú__orig_bases__r)r'rrVÚgetrQrXÚlen)rDrarbrArArBÚgetorigbasesµs

recCsjtj|ƒst‚t|ddƒ}|dkr&dSt|tƒr4|St|tƒrF|diSt|ttfƒrbdd„|DƒSt	‚dS)zÜGet __slots__ attribute of the class as dict.

    Return None if gienv *obj* does not have __slots__.
    Raises TypeError if given *obj* is not a class.
    Raises ValueError if given *obj* have invalid __slots__.
    Ú	__slots__NcSsi|]
}d|“qS)NrA)rSrTrArArBú
<dictcomp>Öszgetslots.<locals>.<dictcomp>)
r'rÚ	TypeErrorrVrQÚdictrRrWrXrG)rDrfrArArBÚgetslotsÄs


rjcCsJtjd
krt|tjƒSt|ddƒ}t|ddƒ}|dkrB|dkrBdSd	SdS)z)Check the if object is a kind of NewType.ré
Ú
__module__NÚ__qualname__ÚtypingzNewType.<locals>.new_typeTF)rrk)ÚsysÚversion_inforQrnZNewTyperV)rDrlrmrArArBÚ	isNewTypeÛs
rq)Úxr"cCstj|ƒot|tjƒS)z(Check if the object is subclass of enum.)r'rÚ
issubclassÚenumÚEnum)rrrArArBÚisenumclassèsrvcCst|tjƒS)z)Check if the object is attribute of enum.)rQrtru)rrrArArBÚisenumattributeísrwcCsxt|ƒr|j}qW|S)zfGet an original object from partial object.

    This returns given object itself if not partial.
    )rJr!)rDrArArBÚ	unpartialòs

rxcCst|ttfƒS)zCheck if the object is partial.)rQrr)rDrArArBrJýsrJ)rDÚclsr.r"cCsrt|tƒrdStj|ƒr0|jdk	r0t|jƒr0dS|rn|rntƒ}x.t|ƒD]"}|jj	||ƒ}||k	rHt
|ƒSqHWdS)z#Check if the object is classmethod.TNF)rQÚclassmethodr'rÚ__self__rÚobjectr`rarcrL)rDryr.ÚplaceholderÚbaseclsÚmethrArArBrLs
rLcCsTt|tƒrdS|rP|rPx8t|d|gƒD]&}|jj|ƒ}|r&t|tƒrHdSdSq&WdS)z$Check if the object is staticmethod.Tr_F)rQÚstaticmethodÚgetattrrarc)rDryr.r~rrArArBrNs

rNcCs&x dD]}tt||dƒƒrdSqWdS)z/Check if the object is some kind of descriptor.Ú__get__Ú__set__Ú
__delete__NTF)r‚rƒr„)ÚcallablerV)rrÚitemrArArBÚisdescriptor%s
r‡cCst|ddƒdkS)z)Check if the object is an abstractmethod.Ú__isabstractmethod__FT)rV)rDrArArBÚisabstractmethod-sr‰cCs&y|jjdkStk
r dSXdS)z6Check if the object is a function or method in cython.Zcython_function_or_methodFN)Ú	__class__Ú__name__ÚAttributeError)rDrArArBÚis_cython_function_or_method2srcCsŠtj|ƒrdSt|ƒr‚t|ƒ}t|ƒs8t|ƒs8tj|ƒr<dSt|ƒrHdStj|ƒrVdSt	|t
ttfƒrjdSt
|ƒjdkr|dSdSndSdS)z4Check if the object is an attribute like descriptor.TFZinstancemethodN)r'Úisdatadescriptorr‡rFÚ
isfunctionÚ	isbuiltinrrrrQrrrÚtyper‹)rDZ	unwrappedrArArBÚisattributedescriptor:s$

r’cCs6tj|ƒr.t|dƒr.t|dƒr.|jjdkr.dSdSdS)z/Check if the object is singledispatch function.ÚdispatchÚregisterÚ	functoolsTFN)r'rrEr“rl)rDrArArBÚis_singledispatch_functionYs


r–cCs0yddlm}t||ƒStk
r*dSXdS)z-Check if the object is singledispatch method.r)ÚsingledispatchmethodFN)r•r—rQÚImportError)rDr—rArArBÚis_singledispatch_methodds

r™cCstjt|ƒƒS)z Check if the object is function.)r'rrO)rDrArArBrmsrcCstjt|ƒƒS)zCheck if the object is builtin.)r'rrO)rDrArArBrrsrcCstjt|ƒƒS)z(Check is any kind of function or method.)r'rKrO)rDrArArBrKwsrKcCs<ttdœdd„}t||d}t|dƒr4tj|ƒr4dSdSdS)	z*Check if the object is coroutine-function.)rDr"cSs2t|ƒst|ƒst|ƒrdSt|dƒr*dSdSdS)z2Check if the object is wrapped coroutine-function.FrITN)rNrLrJrE)rDrArArBÚiswrappedcoroutine~s

z/iscoroutinefunction.<locals>.iswrappedcoroutine)rHÚ__code__TFN)rÚboolrOrEr'Úiscoroutinefunction)rDršrArArBr|s
rcCs t|dƒrtj|ƒrdSdSdS)z*Check if the object is async-gen function.r›TFN)rEr'Úisasyncgenfunction)rDrArArBrž’sržcCs.tjdkr$ddlm}t||ƒr$dSt|tƒS)z Check if the object is property.rér)Úcached_propertyT)rrŸ)rorpr•r rQÚproperty)rDr rArArBÚ
ispropertyœs


r¢cCsVttdƒrt|tjƒrdSttdƒr4t|tjƒr4dSttdƒrNt|tjƒrNdSdSdS)z$Check if the object is GenericAlias.Ú
_GenericAliasTÚGenericAliasÚ_SpecialGenericAliasFN)rErnrQr£Útypesr¤r¥)rDrArArBÚisgenericalias¦s


r§)rDr.Údefargsr"cGsnyt||f|žŽStk
rh}z<y
|j|Stk
r@YnX|rN|dSt|ƒ|‚WYdd}~XnXdS)z;A getattr() that turns all exceptions into AttributeErrors.rN)rÚ	ExceptionrarŒ)rDr.r¨ÚexcrArArBrVµs
rV)r|r"csHtˆtƒrNytˆƒ}Wntk
r*YqøX‡fdd„|Dƒ}ddj|ƒSnªtˆtƒr”ytˆƒ}Wntk
rxYqøXddjdd„|DƒƒSndtˆtƒrÚytˆƒ}Wntk
r¾YqøXddjdd„|DƒƒSntˆtj	ƒrødˆj
jˆjfSyt
ˆƒ}Wn*tk
r.}zt|‚WYd	d	}~XnXtjd
|ƒ}|jddƒS)
zFA repr() implementation that returns text safe to use in reST context.c3s&|]}dt|ƒtˆ|ƒfVqdS)z%s: %sN)Úobject_description)rSÚkey)r|rArBrUÓsz%object_description.<locals>.<genexpr>z{%s}z, css|]}t|ƒVqdS)N)r«)rSrrrArArBrUÝszfrozenset({%s})css|]}t|ƒVqdS)N)r«)rSrrrArArBrUäsz%s.%sNÚÚ
ú )rQriÚsortedr©ÚjoinÚsetrhÚ	frozensetrtrurŠr‹r.ÚreprrGÚmemory_address_reÚsubÚreplace)r|Zsorted_keysÚitemsZ
sorted_valuesÚsrªrA)r|rBr«Ës:



r«)rDÚ	attr_namer"csly"t|ƒ}t‡fdd„|Dƒƒ}Wntk
r6dSXyt|dƒ}Wntk
rZdSXtt|dƒ|kS)zÿIf attr_name is implemented at builtin class, return True.

        >>> is_builtin_class_method(int, '__init__')
        True

    Why this function needed? CPython implements int.__init__ by Descriptor
    but PyPy implements it by pure Python code.
    c3s"|]}ˆt|diƒkr|VqdS)raN)rV)rSÚc)rºrArBrUþsz*is_builtin_class_method.<locals>.<genexpr>Fr‹N)r`ÚnextÚ
StopIterationrVrŒrÚbuiltins)rDrºÚmroryr.rA)rºrBÚis_builtin_class_methodós	rÀc@s>eZdZdZeddœdd„Zeedœdd„Zed	œd
d„Z	dS)ÚDefaultValuezKA simple wrapper for default value of the parameters of overload functions.N)Úvaluer"cCs
||_dS)N)rÂ)ÚselfrÂrArArBÚ__init__
szDefaultValue.__init__)Úotherr"cCs
|j|kS)N)rÂ)rÃrÅrArArBÚ__eq__szDefaultValue.__eq__)r"cCs|jS)N)rÂ)rÃrArArBÚ__repr__szDefaultValue.__repr__)
r‹rlrmÚ__doc__rRrÄr|rœrÆrÇrArArArBrÁ
srÁc@s>eZdZdZeddœdd„Zddœdd„Zeed	œd
d„Z	dS)ÚTypeAliasForwardRefzPseudo typing class for autodoc_type_aliases.

    This avoids the error on evaluating the type inside `get_type_hints()`.
    N)r.r"cCs
||_dS)N)r.)rÃr.rArArBrÄszTypeAliasForwardRef.__init__)r"cCsdS)NrA)rÃrArArBÚ__call__szTypeAliasForwardRef.__call__)rÅr"cCs
|j|kS)N)r.)rÃrÅrArArBrÆ#szTypeAliasForwardRef.__eq__)
r‹rlrmrÈrRrÄrÊrrœrÆrArArArBrÉsrÉc@s:eZdZdZeeeefddœdd„Zeedœdd„ZdS)	ÚTypeAliasModulez-Pseudo module class for autodoc_type_aliases.N)ÚmodnameÚmappingr"cCs||_||_d|_dS)N)Ú_TypeAliasModule__modnameÚ_TypeAliasModule__mappingÚ_TypeAliasModule__module)rÃrÌrÍrArArBrÄ*szTypeAliasModule.__init__)r.r"csœdjtd|j|gƒƒ}||jkr.t|j|ƒS|d‰‡fdd„|jjƒDƒ}|r\t||ƒSyt|ƒStk
r–|j	dkrŠt|jƒ|_	t
|j	|ƒSXdS)NÚ.cs i|]\}}|jˆƒr||“qSrA)Ú
startswith)rSÚkÚv)ÚprefixrArBrg7sz/TypeAliasModule.__getattr__.<locals>.<dictcomp>)r±ÚfilterrÎrÏrÉr¸rËrr˜rÐr)rÃr.ÚfullnameÚnestedrA)rÕrBÚ__getattr__0s


zTypeAliasModule.__getattr__)	r‹rlrmrÈrRrrÄrrÙrArArArBrË'srËc@s8eZdZdZeeefddœdd„Zeedœdd„ZdS)	ÚTypeAliasNamespacez…Pseudo namespace class for autodoc_type_aliases.

    This enables to look up nested modules and classes like `mod1.mod2.Class`.
    N)rÍr"cCs
||_dS)N)Ú_TypeAliasNamespace__mapping)rÃrÍrArArBrÄNszTypeAliasNamespace.__init__)r¬r"csN||jkrt|j|ƒS|d‰‡fdd„|jjƒDƒ}|rFt||ƒSt‚dS)NrÑcs i|]\}}|jˆƒr||“qSrA)rÒ)rSrÓrÔ)rÕrArBrgWsz2TypeAliasNamespace.__getitem__.<locals>.<dictcomp>)rÛrÉr¸rËÚKeyError)rÃr¬rØrA)rÕrBÚ__getitem__Qs

zTypeAliasNamespace.__getitem__)	r‹rlrmrÈrrRrÄrrÝrArArArBrÚHsrÚ)Úsubjectr"cCs.t|ƒ}|jdƒdkr*|jdƒtjkr*dSdS)z<Check the function should be unwrapped on getting signature.r‹Ú
contextlibÚ__file__TF)r^rcrßrà)rÞr]rArArBÚ_should_unwrap_s
ráF)rÞÚbound_methodÚfollow_wrappedÚtype_aliasesr"cCs|dkrd}ntjdtddy^y&t|ƒr6tj|ƒ}ntj||d}Wntk
rdtj|ƒ}YnXt|jj	ƒƒ}|j
}Wn,tk
r¨t|dƒr¢g}t
j}n‚YnXy’t|ƒ}tj|d|ƒ}xHt|ƒD]<\}	}
|
j|krÌ||
j}t|tƒrø|j}|
j|d||	<qÌWd	|kr:t|d	tƒr2|d	j}n|d	}Wntk
rRYnX|r€tj|ƒrhnt|ƒd
kr€|jd
ƒtj||ddS)
z¸Return a Signature object for the given *subject*.

    :param bound_method: Specify *subject* is a bound method or not
    :param follow_wrapped: Same as ``inspect.signature()``.
    NTzLThe follow_wrapped argument of sphinx.util.inspect.signature() is deprecatedr#)r$)rãÚ_partialmethod)r6r"rF)r)Ú__validate_parameters__)r%r&rrár'r(rGrWr+r,r)Ú
IndexErrorrErr*rÚrnZget_type_hintsÚ	enumerater.rQrÉr·r©rrdÚpopÚ	Signature)rÞrârãrär(r+r)Úlocalnsr>Úir@r6rArArBr(jsP







r()r8Úglobalnsrër"c	s°ttttdœdd„‰ttttdœ‡fdd„}|dkr8i}|dkrD|}t|jjƒƒ}x8t|ƒD],\}}|jr\||j||ƒ}|j|d||<q\W|j	}|r¢||||ƒ}|j||d	S)
z;Evaluate unresolved type annotations in a signature object.)Úrefrírër"cSs*tjdkr|j||tƒƒS|j||ƒSdS)zEvaluate a forward reference.ré	N)rrï)rorpZ	_evaluater³)rîrírërArArBÚevaluate_forwardref¶s
z/evaluate_signature.<locals>.evaluate_forwardref)r6rírër"cszy\t|tƒrZt|dƒ}ˆ|||ƒ}t|tƒr:ˆ|||ƒ}n t|tƒrZt|dƒ}ˆ|||ƒ}Wnttfk
rtYnX|S)z$Evaluate unresolved type annotation.T)rQrRrÚ	NameErrorrh)r6rírërî)rðrArBÚevaluate½s




z$evaluate_signature.<locals>.evaluateN)r6)r+r))
rrrrWr+r,rèr6r·r))	r8rírëròr+rìr@r6r)rA)rðrBÚevaluate_signature³sróT)r8Úshow_annotationÚshow_return_annotationÚunqualified_typehintsr"c
Cs´|r
d}nd}g}d}x2|jjƒD]"}|j|jkrJ||jkrJ|jdƒ|j|jkrr||j|jdfkrr|jdƒtƒ}|j|jkr–|j	d|j
ƒn*|j|jkr´|j	d|j
ƒn|j	|j
ƒ|rì|j|j
k	rì|j	dƒ|j	t|j|ƒƒ|j|j
k	r4|r|j|j
k	r|j	dƒn
|j	d	ƒ|j	t|jƒƒ|j|jƒƒ|j}q$W|tjkrb|jdƒ|jtj
ks„|d
ks„|d
kr’ddj|ƒSt|j|ƒ}	d
dj|ƒ|	fSdS)aNStringify a Signature object.

    :param show_annotation: If enabled, show annotations on the signature
    :param show_return_annotation: If enabled, show annotation of the return value
    :param unqualified_typehints: If enabled, show annotations as unqualified
                                  (ex. io.StringIO -> StringIO)
    Zsmartzfully-qualifiedNú/Ú*z**z: z = ú=Fz(%s)z, z
(%s) -> %s)r+r,r-r/r0r4r1r
r3Úwriter.r5r6r*Ústringify_annotationr2r«Úgetvaluerr)r±)
r8rôrõröÚmoder9Z	last_kindr@Úargr6rArArBÚstringify_signatureâsH








rÿ)r(r"cCs2d|d}tj|ƒ}ttj|jdƒ}t||ƒS)z&Create a Signature object from string.zdef funcz: passr)rÚparserÚFunctionDefÚbodyÚsignature_from_ast)r(ÚcodeÚmoduleÚfunctionrArArBÚsignature_from_strs
rr­)Únoderr"c
CsL|j}t|jƒ}g}t|dƒr8t|jƒ}|t|jƒ}nd}t|jƒ}x$tt|ƒ|ƒD]}|jdtj	ƒqVWt|dƒrâxjt
|jƒD]\\}}	||tj	kr tj	}
ntt|||ƒƒ}
t|	j
|ƒpÂtj	}|jt|	jtj|
|dƒq‚Wxvt
|jƒD]h\}}	|||tj	krtj	}
ntt||||ƒƒ}
t|	j
|ƒp:tj	}|jt|	jtj|
|dƒqîW|jr’t|jj
|ƒpvtj	}|jt|jjtj|dƒx^t
|jƒD]P\}}	t|j||ƒp¼tj	}
t|	j
|ƒpÐtj	}|jt|	jtj|
|dƒqžW|jr*t|jj
|ƒptj	}|jt|jjtj|dƒt|j|ƒp<tj	}tj||dS)z*Create a Signature object from AST *node*.Úposonlyargsr)r2r6)r6)r))r9rWr=rErdr	ÚrangeÚinsertrr*rèrÁÚast_unparser6r0rþr/r1Úvarargr3r<Úkw_defaultsr4Úkwargr5Zreturnsr'rê)
rrr9r=Úparamsr	ÚpositionalsÚ_rìrþr2r6r)rArArBr(sP






r)rDÚ
attrgetterÚallow_inheritedryr.r"c	CsNtfttttdœdd„}|rv|rvt|||ƒrvxFt|ƒD]:}|jj|ƒ}|r8t	|dƒr8t
|jƒ}|dk	sn|r8|Sq8W||ƒ}t|ƒrœ||j
jkrœt
|jƒS|dko¦|rJ|o°|r6x6t|ƒD]*}t||dƒ}|dk	r¾||ƒ}|dk	r¾Pq¾W|dkr6x>t|ƒD]2}t||dƒ}|dk	rtj
|ƒ}|dk	rPqW|dkrJtj
|ƒ}|S)zÊGet the docstring for the object.

    This tries to obtain the docstring for some kind of objects additionally:

    * partial functions
    * inherited docstring
    * inherited decorated methods
    )rDrr"cSs"||ddƒ}t|tƒr|SdSdS)NrÈ)rQrR)rDrÚdocrArArBÚgetdoc_internalks
zgetdoc.<locals>.getdoc_internalrMN)rVrr
rrRrLr`rarcrEÚgetdocrMrJrŠrÈr!r')	rDrrryr.rr~rrrArArBras:









r)rr)NN)NN)NN)TTF)r­)krÈr¾rßrtr'Úreror¦rnr%r•rrÚ	importlibrrrrrr	Úior
rrr
rrrrrrrZsphinx.deprecationrZsphinx.pycode.astrrrZsphinx.utilrZsphinx.util.typingrrrûrprrrr‘r|rÄrRr±riraÚ	getLoggerr‹ÚloggerÚcompileÚ
IGNORECASErµrCrFrOrZr\r^r`rerjrœrqrvrwrxrJrLrNr‡r‰rr’r–r™rrrKrržr¢r§rVr«rÀrÁrÉrËrÚrárêr(rórÿrrrrrArArArBÚ<module>s˜,


6
			
	

(
!H
.;	9