o uam} @s$dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddl mZddlmZmZmZmZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZdd l m!Z!dd l"m#Z#dd l"m$Z%dd l&m'Z'dd l(m)Z)ddl(m*Z+ej,dkrddlm-Z-m.Z.m/Z/ne0e1j2Z-e0e3j4Z.e0e5j6dZ/ e'7e8Z9e:dej;ZdddededefddZ?dedeee3fd d!Z@dedee3effd"d#ZAdedee3effd$d%ZBdedeed&ffd'd(ZCdedeeed&ffd)d*ZDdedeefd+d,ZEdedeFfd-d.ZGd/edeFfd0d1ZHd/edeFfd2d3ZIdedefd4d5ZJdedeFfd6d7ZKdded8ed9e3deFfd:d;ZLdded8ed9e3deFfdd?ZNdedeFfd@dAZOdedeFfdBdCZPdedeFfdDdEZQdedeFfdFdGZRdedeFfdHdIZSdedeFfdJdKZTdedeFfdLdMZUdedeFfdNdOZVdedeFfdPdQZWdedeFfdRdSZXdedeFfdTdUZYdedeFfdVdWZZded9e3dXedefdYdZZ[d[ede3fd\d]Z\ded^e3deFfd_d`Z]GdadbdbZ^GdcddddZ_GdedfdfZ`Gdgdhdhee3efZadiedeFfdjdkZbddifdiedleFdmeFdnedejcf dodpZdddqejcdredsedejcfdtduZe v vddqejcdweFdxeFde3fdydzZfdpe3dejcfd{d|Zgdd~e#jhde3dejcfddZie[dddfdededeFd8ed9e3de3f ddZjdS)z sphinx.util.inspect ~~~~~~~~~~~~~~~~~~~ Helpers for inspecting Python modules. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)partial partialmethod) import_module) Parameterisclassismethodismethoddescriptorismodule)StringIO) ModuleType) AnyCallableDictMappingOptionalSequenceTupleTypecast)RemovedInSphinx50Warning)ast)unparse)logging) ForwardRef) stringify))ClassMethodDescriptorTypeMethodDescriptorTypeWrapperDescriptorTypefromkeysF)rz at 0x[0-9a-f]{8,16}(?=>)funcreturnc Cs6tjdtddt|}g}d}d}g}d}i}d}i}|j|jur(|j|d<|jD]Z} | j } | j } | t j ur@| | n<| t jurW| | | j| jurV|| jf7}n%| t jur_| }n| t juru| | | j| jurt| j|| <n| t jur|| }| j| jur| j|| <q-|sd}|sd}t|||||||S)zPLike inspect.getfullargspec but supports bound methods, and wrapped methods.z-sphinx.ext.inspect.getargspec() is deprecated stacklevelNr")warningswarnrinspect signaturereturn_annotationempty parametersvalueskindnamerPOSITIONAL_ONLYappendPOSITIONAL_OR_KEYWORDdefaultVAR_POSITIONAL KEYWORD_ONLY VAR_KEYWORD annotation FullArgSpec) r!sigargsvarargsvarkw kwonlyargsdefaults annotations kwdefaultsparamr/r0r&r&5/usr/lib/python3/dist-packages/sphinx/util/inspect.py getargspec;sV                  rDobjcCs4zt|dr |WSt|WSty|YSw)z?Get an original object from wrapped object (wrapped functions).__sphinx_mock__)hasattrr)unwrap ValueErrorrEr&r&rCrHqs   rHstoprLcCsd |r ||r |St|r|j}n t|rt|dr|j}nt|r'|j}n t|r/|j}n|Sq)zx Get an original object from wrapped object (unwrapping partials, wrapped functions, and other decorators). T __wrapped__) ispartialr!r) isroutinerGrM isclassmethod__func__isstaticmethod)rErLr&r&rC unwrap_all~s rScCsDt|dd}|dur dSt|ttfrtdd|Dr|St|)zGet __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|tVqdSN isinstancestr.0er&r&rC szgetall..) safe_getattrrWlisttupleallrI)rErTr&r&rCgetalls  racCt|dd}t|tr |SiS)z,Get __annotations__ from given *obj* safely.__annotations__Nr]rWr)rErcr&r&rCgetannotations  recCrb)z(Get __globals__ from given *obj* safely. __globals__Nrd)rErgr&r&rC getglobalsrfrh.cCs t|dd}t|tr |StS)z$Get __mro__ from given *obj* safely.__mro__N)r]rWr_)rErir&r&rCgetmros  rjcCsBt|sdSt|di}|d}t|trt|dkr|SdS)z%Get __orig_bases__ from *obj* safely.N__dict____orig_bases__r)r)rr]getrWr_len)rErkrlr&r&rC getorigbasess   rocCsft|stt|dd}|durdSt|tr|St|tr#|diSt|ttfr1dd|DSt )zGet __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|]}|dqSrUr&rYr&r&rC szgetslots..) r)r TypeErrorr]rWdictrXr^r_rI)rErpr&r&rCgetslotss    rtcCsFtjdkr t|tjSt|dd}t|dd}|dkr!|dkr!dSdS) z)Check the if object is a kind of NewType.)r __module__N __qualname__typingzNewType..new_typeTF)sys version_inforWrxNewTyper])rErvrwr&r&rC isNewTypes    r|xcCst|o t|tjS)z(Check if the object is subclass of enum.)r)r issubclassenumEnumr}r&r&rC isenumclasssrcCs t|tjS)z)Check if the object is attribute of enum.)rWrrrr&r&rCisenumattributes rcCst|r |j}t|s|S)zfGet an original object from partial object. This returns given object itself if not partial. )rNr!rJr&r&rC unpartialsrcCst|ttfS)zCheck if the object is partial.)rWrrrJr&r&rCrNrNclsr0cCsrt|trdSt|r|jdurt|jrdS|r7|r7t}t|D]}|j ||}||ur6t |Sq#dS)z#Check if the object is classmethod.TNF) rW classmethodr)r__self__robjectrjrkrmrP)rErr0 placeholderbaseclsmethr&r&rCrP s   rPcCsTt|trdS|r(|r(t|d|gD]}|j|}|r't|tr$dSdSqdS)z$Check if the object is staticmethod.TriF)rW staticmethodgetattrrkrm)rErr0rrr&r&rCrRs   rRcCs&dD]}tt||ddrdSqdS)z/Check if the object is some kind of descriptor.)__get____set__ __delete__N__call__TF)rGr])r}itemr&r&rC isdescriptor-s rcCst|ddduS)z)Check if the object is an abstractmethod.__isabstractmethod__FTr]rJr&r&rCisabstractmethod5srcCs$z|jjdkWStyYdSw)z6Check if the object is a function or method in cython.cython_function_or_methodF) __class____name__AttributeErrorrJr&r&rCis_cython_function_or_method:s  rcCst|rdSt|r@t|}t|st|st|rdSt|r$dSt|r+dSt |t t t fr5dSt |jdkr>dSdSdS)z4Check if the object is an attribute like descriptor.TFinstancemethod)r)isdatadescriptorrrH isfunction isbuiltinrrrrWrrrtyper)rE unwrappedr&r&rCisattributedescriptorBs&  rcCs2t|rt|drt|dr|jjdkrdSdS)z/Check if the object is singledispatch function.dispatchregister functoolsTF)r)rrGrrvrJr&r&rCis_singledispatch_functionas  rcCs.z ddlm}t||WStyYdSw)z-Check if the object is singledispatch method.r)singledispatchmethodF)rrrW ImportError)rErr&r&rCis_singledispatch_methodls    rcCtt|S)z Check if the object is function.)r)rrSrJr&r&rCrurrcCr)zCheck if the object is builtin.)r)rrSrJr&r&rCrzrrcCr)z(Check is any kind of function or method.)r)rOrSrJr&r&rCrOrrOcCs:dtdtfdd}t||d}t|drt|rdSdS) z*Check if the object is coroutine-function.rEr"cSs.t|s t|s t|rdSt|drdSdS)z2Check if the object is wrapped coroutine-function.FrMT)rRrPrNrGrJr&r&rCiswrappedcoroutines  z/iscoroutinefunction..iswrappedcoroutinerK__code__TF)r boolrSrGr)iscoroutinefunction)rErr&r&rCrs  rcCst|dr t|r dSdS)z*Check if the object is async-gen function.rTF)rGr)isasyncgenfunctionrJr&r&rCrsrcCs.tjdkrddlm}t||rdSt|tS)z Check if the object is property.)rr)cached_propertyT)ryrzrrrWproperty)rErr&r&rC ispropertys    rcCsRttdr t|tjr dSttdrt|tjrdSttdr't|tjr'dSdS)z$Check if the object is GenericAlias. _GenericAliasT GenericAlias_SpecialGenericAliasF)rGrxrWrtypesrrrJr&r&rCisgenericaliass      rdefargsc Gs|z t||g|RWSty=}z'z |j|WWYd}~Sty'Ynw|r4|dWYd}~St||d}~ww)z;A getattr() that turns all exceptions into AttributeErrors.Nr)r Exceptionrkr)rEr0rexcr&r&rCr]s  r]rc s0ttr%zt}Wn tyYnbwfdd|D}dd|SttrFzt}Wn ty9Yn=wdddd|DSttrgzt}Wn tyZYnwdddd|DSttj rvdj j j fSzt }Wnty}zt|d }~wwtd |}|d d S) zFA repr() implementation that returns text safe to use in reST context.c3s(|]}dt|t|fVqdS)z%s: %sNobject_description)rZkeyrr&rCr\s  z%object_description..z{%s}, cs|]}t|VqdSrUrrZr}r&r&rCr\szfrozenset({%s})csrrUrrr&r&rCr\sz%s.%sN  )rWrssortedrjoinsetrr frozensetrrrrr0reprrImemory_address_resubreplace)r sorted_keysitems sorted_valuessrr&rrCrsH               r attr_namecslzt|}tfdd|D}Wn tyYdSwzt|d}Wn ty-YdSwtt|d|uS)zIf 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|divr|VqdS)rkNr)rZcrr&rCr\s"z*is_builtin_class_method..FrN)rjnext StopIterationr]rrbuiltins)rErmrorr0r&rrCis_builtin_class_methods   rc@sBeZdZdZdeddfddZdedefdd Zdefd d Z dS) DefaultValuezKA simple wrapper for default value of the parameters of overload functions.valuer"NcC ||_dSrUr)selfrr&r&rC__init__ zDefaultValue.__init__othercC |j|kSrUrrrr&r&rC__eq__rzDefaultValue.__eq__cCs|jSrUrrr&r&rC__repr__szDefaultValue.__repr__) rrvrw__doc__rXrrrrrr&r&r&rCrs rc@s>eZdZdZdeddfddZd ddZd edefd d Z dS) TypeAliasForwardRefzPseudo typing class for autodoc_type_aliases. This avoids the error on evaluating the type inside `get_type_hints()`. r0r"NcCrrUr0)rr0r&r&rCr$rzTypeAliasForwardRef.__init__cCsdSrUr&rr&r&rCr'szTypeAliasForwardRef.__call__rcCrrUrrr&r&rCr+rzTypeAliasForwardRef.__eq__)r"N) rrvrwrrXrrr rrr&r&r&rCrs  rc@s@eZdZdZdedeeefddfddZdedefd d ZdS) TypeAliasModulez-Pseudo module class for autodoc_type_aliases.modnamemappingr"NcCs||_||_d|_dSrU)_TypeAliasModule__modname_TypeAliasModule__mapping_TypeAliasModule__module)rrrr&r&rCr2s zTypeAliasModule.__init__r0csdtd|j|g}||jvrt|j|S|dfdd|jD}|r.t||Szt|WStyM|j durEt|j|_ t |j |YSw)N.c i|] \}}|r||qSr& startswithrZkvprefixr&rCrq? z/TypeAliasModule.__getattr__..) rfilterrrrrrrrrr)rr0fullnamenestedr&rrC __getattr__8s      zTypeAliasModule.__getattr__) rrvrwrrXrrr rr&r&r&rCr/src@s<eZdZdZdeeefddfddZdedefdd ZdS) TypeAliasNamespacezPseudo namespace class for autodoc_type_aliases. This enables to look up nested modules and classes like `mod1.mod2.Class`. rr"NcCrrU)_TypeAliasNamespace__mapping)rrr&r&rCrVrzTypeAliasNamespace.__init__rcsJ||jvr t|j|S|dfdd|jD}|r#t||St)Nrcrr&rrrr&rCrq_rz2TypeAliasNamespace.__getitem__..)rrrrKeyError)rrrr&rrC __getitem__Ys  zTypeAliasNamespace.__getitem__) rrvrwrrrXrr rr&r&r&rCrPsrsubjectcCs.t|}|ddkr|dtjkrdSdS)z.evaluate_forwardrefr8c sz7t|tr2t|d}|||}t|tr|||}W|St|tr5t|d}|||}W|SW|SW|SttfyCY|Sw)z$Evaluate unresolved type annotation.T)rWrXr NameErrorrr)r8rrrrr&rCevaluates&     z$evaluate_signature..evaluateNr )r-r+) rrr r^r-r.rr8rr+) r:rrrr-rrBr8r+r&rrCevaluate_signatures  rTshow_annotationshow_return_annotationcCsg}d}|jD]}|j|jkr||jkr|d|j|jkr/||j|jdfvr/|dt}|j|jkrA| d|j n|j|j krP| d|j n| |j |rk|j |j urk| d| t|j |j|j ur|r|j |j ur| dn| d| t|j|||j}q |tjkr|d|jtj us|dus|durd d |St|j}d d ||fS) zYStringify a Signature object. :param show_annotation: Show annotation in result N/*z**z: z = =Fz(%s)rz (%s) -> %s)r-r.r/r1r2r6r3r r5writer0r7r8r,stringify_annotationr4rgetvaluerr+r)r:rrr; last_kindrBargr8r&r&rCstringify_signaturesD             r'cCs2d|d}t|}ttj|jd}t||S)z&Create a Signature object from string.zdef funcz: passr)rparser FunctionDefbodysignature_from_ast)r*codemodulefunctionr&r&rCsignature_from_strs   r/rnoder,c Cs,|j}t|j}g}t|drt|j}|t|j}nd}t|j}tt||D] }|dtj q*t|drmt |jD].\}} ||tj urMtj } n t t |||} t | j |p^tj } |t| jtj| | dq>t |jD]2\}} |||tj urtj } n t t ||||} t | j |ptj } |t| jtj| | dqr|jrt |jj |ptj } |t|jjtj| dt |jD]%\}} t |j||ptj } t | j |ptj } |t| jtj| | dq|jrt |jj |ptj } |t|jjtj| dt |j|ptj } tj|| dS)z*Create a Signature object from AST *node*. posonlyargsr)r4r8r )r+)r;r^r?rGrnr1rangeinsertrr,rr ast_unparser8r2r&r1r3varargr5r> kw_defaultsr6kwargr7returnsr)r) r0r,r;r?paramsr1 positionals_rr&r4r8r+r&r&rCr+'sZ        r+ attrgetterallow_inheritedc Cs>tfdtdtdttfdd}|r<|r.getdoc_internalrQN)r]r r rrXrPrjrkrmrGgetdocrQrNrrr!r)) rEr<r=rr0r?rrr>r&r&rCr@`s@             r@)NN)TT)r)krrrrr)reryrrxr'rrr importlibrrrrrr ior r r r rrrrrrrsphinx.deprecationrsphinx.pycode.astrrr4 sphinx.utilrsphinx.util.typingrrr#rzrrrrrrrXrrsrk getLoggerrloggercompile IGNORECASErrDrHrSrarerhrjrortrr|rrrrNrPrRrrrrrrrrrOrrrrr]rrrrrrrrr*rr'r/r)r+r@r&r&r&rCs    ,           6          ( !  I / 4 9