o $aI @sbdZddlZddlZddlmZddlmZddlmZmZm Z m Z m Z m Z m Z mZmZmZddlmZddlmZddlmZmZejd krNdd lmZn dd lmZGd d d ZzddlmZWn eyndZYnw edediZeejejfZ e!dZ"ee#ge$fZ%ee#e#e#e&ee e#efe e#ge e ej'e ej(ffZ)e e#ee#geffZ*eej'ge#fZ+e e#e#e#e#fZ,e e#e e#e,ffZ-d,dede de de e#effddZ.dede$fddZ/de ede#fddZ0de ede#fdd Z1de ede#fd!d"Z2d#ede#fd$d%Z3d#ede#fd&d'Z4d#ede#fd(d)Z5ed*d+ee#gefiedS)-z sphinx.util.typing ~~~~~~~~~~~~~~~~~~ The composite types for Sphinx. :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. N)Struct) TracebackType) AnyCallableDict GeneratorListOptionalTupleTypeTypeVarUnion)nodes)Inliner)RemovedInSphinx60Warningdeprecated_alias) ForwardRef) _ForwardRefc@s>eZdZdZd dededdfddZd ed edefd d ZdS)rz#A pseudo ForwardRef class for py36.Targ is_argumentreturnNcCs ||_dSN)r)selfrrr4/usr/lib/python3/dist-packages/sphinx/util/typing.py__init__s zForwardRef.__init__globalnslocalnscCst|j}|||Sr)rr _eval_type)rrr refrrr _evaluate s  zForwardRef._evaluate)T) __name__ __module__ __qualname____doc__rboolrrr#rrrrrsr) UnionTypeF)r z struct.Structztypes.TracebackTypeobjrr rcCsddlm}zt|||WSty||diYSty+||diYSty9||diYStyCiYSw)zReturn a dictionary containing type hints for a function, method, module or class object. This is a simple wrapper of `typing.get_type_hints()` that does not raise an error on runtime. r) safe_getattr__annotations__)sphinx.util.inspectr+typingget_type_hints NameErrorAttributeError TypeErrorKeyError)r*rr r+rrrr/Ms     r/typcCst|dd}|dkot|tS)z&Check *typ* is system defined TypeVar.r%r.)getattr isinstancer )r4modnamerrris_system_TypeVarfs r9clsc Cs|ddlm}z|dus|turWdS|turWdSt|tr!|WS|tvr,dt|WS||rOtj dkrIt |t |t |d|j |jfWSd|jWStr~t|tr~t|jd krrd|jvrrd d d |jD}d |WSd dd |jDWS|j dvrt|drd|jddd |jDfWSd|jWStj dkrt|WSt|WSttfy||YSw))Convert python class to a reST reference.rinspectNz:py:obj:`None`...:py:class:`%s`r :py:class:`%s.%s` | cs|] }|rt|VqdSrrestify.0arrr zrestify.. Optional[%s]cs|]}t|VqdSrrFrHrrrrK) __builtin__builtins__args__z:py:class:`%s`\ [%s], csrNrrFrIrrrrrKrOr) sphinx.utilr=NoneTypeEllipsisr7strINVALID_BUILTIN_CLASSES isNewTypesys version_infoprinttypedirr%r$r)lenrRjoinhasattr _restify_py37 _restify_py36r1r2object_description)r:r=argsrrrrGlsB            rGcCsddlm}||rU|jdkrU|jturUt|jdkrF|jdturFt|jdkr=d dd |jd dD}d |Sd t |jdSd d d |jD}d|S||rt |jt j rgt |j}n"t|dd r|jdkr{d|j|jf}nd|j|jf}nt |j}t|dd }t|ds |Stdd |jDr |S|jdkr|jdkrd dd |jd dD}|d|t |jdf7}|S|jdkrt|dd dkr|dd dd |jD7}|S|jr|dd dd |jD7}|St |t j r d|j|jfSt|dr)|jdkr!d|j|jfSd|j|jfSt |tr4d|jS|jdkrBd|j|jfSd|j|jfS) r;rr<r.rCrScsrNrrFrHrrrrKrOz _restify_py37..Nz8:py:obj:`~typing.Optional`\ [:obj:`~typing.Union`\ [%s]] :py:obj:`~typing.Optional`\ [%s]csrNrrFrHrrrrKrO:py:obj:`~typing.Union`\ [%s]_name:py:class:`~%s.%s`rB __origin__rRcsrNrr9rHrrrrKrOrcsrNrrFrHrrrrKrO \ [[%s], %s]Literal\ [%s]csrNrreprrHrrrrKrOcsrNrrFrHrrrrKrO:py:obj:`~%s.%s`r&r?:py:obj:`%s.%s`)rUr=isgenericaliasr%rmr r`rRrVrarGr7r. _SpecialFormr6rkrballr&r__forward_arg__r$)r:r=rftextoriginrrrrcs\                rccCs.t|dd}|dkr=t|ddr|j}n:t|ddr|j}n0t|ddr(|j}n&t|ddr4t|j}nt|dd}nt|drJd ||jf}nt|}t |t j r}t|d s}|dkrbd |}nd |}|j }|r{d dd|D}|d|S|St |t jr|dkrd |}nd |}|j dust|j dkr|j }n'|jtkr|j }nd dd|j ddD}t|j d}|d||fS|rd dd|D}|d|S|St|dr/|jt jur/|j }|dur-t|dkr|dturt|dkrd dd|ddD}d|Sdt|dSd dd|D}d|SdSt|drK|jdkrCd|j|jfSd|j|jfSt|drg|jdkr_d |j|jfSd!|j|jfSt|d"r|jdkr{d |j|jfSd!|j|jfS|jdkrd |j|fSd!|j|fS)#Nr%r.rkr&ryrmtyping.r5%s.%s__tuple_params__z:py:class:`~typing.%s`r?rScsrNrrFrIprrrrKrOz _restify_py36..rqrhcsrNrrFrTrrrrKrOrgrocsrNrrFrrrrrKrOrCcsrNrrFrrrrrK rOz;:py:obj:`~typing.Optional`\ [:py:obj:`~typing.Union`\ [%s]]rircsrNrrFrrrrrKrOrjz:py:obj:`Union`rlrBrtrur$)r6rkr&ry stringifyrmrsreplacerbr7r. TupleMetarRra GenericMetar`rrGr rVr%r$)r:modulequalnamereftextparams param_strrfresultrrrrds                       rd annotationcCs"ddlm}t|tr|dr|dr|ddS|St|tr3|jdkr*|jSd |j|jgS| |rHt j dkrEd |j|jfS|jS|sNt |S|turTd S|tvr\t|St|d rdn t|d d dkr~t|dd r~t|dr{t |S|jS|turdSt j dkrt|St|S)z!Stringify type annotation object.rr<'rCrgr..r@r}Nonetyping.Annotatedr%NrQr&rRr>r)rUr=r7rX startswithendswithr r%r$rarZr[r\rsrVrYr6rbr&rW_stringify_py37_stringify_py36)rr=rrrr.s@          rcCstt|dd}|dkr.t|ddr|j}n@t|ddr|j}n6t|ddr(|j}n,t|j}n&t|dr;d||jf}nt|drFt|j}ntrPt|trPd }nt |St|d dr8t|j t t fsf |S|d vrt |j d kr|j d turt |j dkrddd|j dd D}d|Sdt|j dSddd|j D}d|S|d krt |j d krd|j vrddd|j D}d|Sddd|j DS|dkrddd|j dd D}t|j d }d|||fS|dkr ddd|j D}d||fSt|d rt|j dStd!d|j Dr'|Sdd"d|j D}d||fS|S)#zstringify() for py37+.r%Nr.rkr&ryr}rmz types.UnionrR)r r rCrgrhrScsrNrrrHrrrrKyrOz"_stringify_py37..Optional[Union[%s]]rMrcsrNrrrHrrrrK~rO Union[%s]rDcsrErrrHrrrrKrLcsrNrrrHrrrrKrOrcsrNrrrHrrrrKrO %s[[%s], %s]rpcsrNrrrrHrrrrKrO%s[%s]rcsrNrrnrHrrrrKrOcsrNrrrHrrrrKrO)r6rkr&ryrrmrbr)r7rsrRlisttupler`rVrarXrrx)rrrrfreturnsrrrrZs^        !   rcCs.t|dd}|dkr=t|ddr|j}n:t|ddr|j}n0t|ddr(|j}n&t|ddr4t|j}nt|dd }nt|drJd ||jf}nt|}t |t j rpt|d sp|j }|rnd d d|D}d||fS|St |t jrd}|j dust|j dkr|j }n&|jtkr|j }nd dd|j ddD}t|j d}d|||fS|durd dd|D}d||fS|St|dr|jt jur|j }|durt|dkr|dturt|dkrd dd|ddD}d|Sdt|dSd dd|D}d|S|S)zstringify() for py36.r%Nr.rkr&ryrmr|r5r}r~rScsrNrrrrrrrKrOz"_stringify_py36..rrhcsrNrrrTrrrrKrOrgrcsrNrrrrrrrKrOrCcsrNrrrrrrrKrOrrMrcsrNrrrrrrrKrOr)r6rkr&ryrrmrsrrbr7r.rrRrarr`rr rV)rrrrrrfrrrrrsb                 rzsphinx.util.typingDirectiveOption)NN)6r'r[r.structrtypesrrrrrrr r r r r docutilsrdocutils.parsers.rst.statesrsphinx.deprecationrrr\rrr) ImportErrorrYText TextElement TextlikeNoder^rVrXr( PathMatcherintNodesystem_message RoleFunction OptionSpec TitleGetter InventoryItem Inventoryr/r9rGrcrdrrrrrrrsZ   0      $+;\,?: