U
    \Sh:                  	   @  s  d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZ ddlmZ ddlmZ zdd	lmZ W n ek
r   dZY nX ed
ediZdddddZeejejf ZedZe
egef Z e
eeee!eeee	f ee geeej" eej# f f Z$eee
ege	f f Z%e
ej"gef Z&eeeeef Z'eeeee'f f Z(d&dddddddZ)dddddZ*d'ddddddZ+d(ddddd d!Z,d"e,d#fiZ-d$d% Z.dS ))zThe composite types for Sphinx.    )annotationsN)Struct)TracebackType)AnyCallableDict
ForwardRefListTupleTypeVarUnion)nodes)Inliner)	UnionTypezstruct.Structztypes.TracebackTyper   bool)objreturnc                 C  s&   z
| t kW S  tk
r    Y dS X dS )z)Check *obj* is an invalid built-in class.FN)INVALID_BUILTIN_CLASSES	TypeError)r    r   E/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/util/typing.pyis_invalid_builtin_class   s    
r   zdict[str, Any] | Nonezdict[str, Any])r   globalnslocalnsr   c                 C  s   ddl m} zt| ||W S  tk
r<   || di  Y S  tk
rZ   || di  Y S  tk
rx   || di  Y S  tk
r   i  Y S X dS )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__N)sphinx.util.inspectr   typingget_type_hints	NameErrorAttributeErrorr   KeyError)r   r   r   r   r   r   r   r   ?   s    	r   )typr   c                 C  s   t | dd}|dkot| tS )z&Check *typ* is system defined TypeVar.
__module__ r   )getattr
isinstancer   )r"   modnamer   r   r   is_system_TypeVar[   s    r(   fully-qualified-except-typingztype | Nonestr)clsmoder   c              	     sN  ddl m}m} ddlm}  dkr*d}nd}z| dksB| tkrHW dS | tkrVW d	S t| trf| W S || rd
| | j	 dW S || rd
| | j
 d| j	 dW S t| rd
| t|   dW S || rtjdd dkr d
| | j
 d| j	 dW S d| j	 W S ntrt| trt| jdkrbd| jkrbd fdd| jD }d| W S d fdd| jD W S n| j
dkrt| drd fdd| jD }d
| j	 d| dW S d| j	 W S nH|| r| j
dkr| jtkrt| jdkrr| jd tkrrt| jdkrZd fdd| jdd D }d| W S d t| jd   W S n$d fd!d| jD }d"| W S n|| rt| jtjrt| j }n\t| d#dr| j}	| j
dkrd$| j
 d|	 d}nd
| | j
 d|	 d}nt| j }t| d%d}
t| ds:ntd&d | jD rRn| j
dkr| jd'krd fd(d| jdd D }|d)| d*t| jd   d7 }nh| j
dkrt|
d#dd+kr|d,dd-d | jD  7 }n*| jr|d,d fd.d| jD  7 }|W S t| tjrDd/| j
 d| j dW S tjdd d0kr|| tjkr|d/| j
 d| j	 dW S t| d1r| j
dkrd$| j
 d| j dW S d
| | j
 d| j dW S nXt| t rd| j! W S | j
dkrd/| j
 d| j	 dW S d2| | j
 d| j	 dW S W n$ t"t#fk
rH   |$|  Y S X dS )3aw  Convert python class to a reST reference.

    :param mode: Specify a method how annotations will be stringified.

                 'fully-qualified-except-typing'
                     Show the module name and qualified name of the annotation except
                     the "typing" module.
                 'smart'
                     Show the name of the annotation.
    r   ismockismockmodule)inspectsmart~r$   Nz:py:obj:`None`...z:py:class:``.      
   z:py:class:`%s`    | c                 3  s   | ]}|rt | V  qd S Nrestify.0ar,   r   r   	<genexpr>   s      zrestify.<locals>.<genexpr>zOptional[%s]c                 3  s   | ]}t | V  qd S r<   r=   r?   rB   r   r   rC      s     )__builtin__builtins__args__, c                 3  s   | ]}t | V  qd S r<   r=   )r@   argrB   r   r   rC      s     z`\ []r   c                 3  s   | ]}t | V  qd S r<   r=   r?   rB   r   r   rC      s   z8:py:obj:`~typing.Optional`\ [:obj:`~typing.Union`\ [%s]]z :py:obj:`~typing.Optional`\ [%s]c                 3  s   | ]}t | V  qd S r<   r=   r?   rB   r   r   rC      s   z:py:obj:`~typing.Union`\ [%s]_namez:py:class:`~
__origin__c                 s  s   | ]}t |V  qd S r<   r(   r?   r   r   r   rC      s     r   c                 3  s   | ]}t | V  qd S r<   r=   r?   rB   r   r   rC      s     z\ [[], Literalz\ [%s]c                 s  s   | ]}t |V  qd S r<   reprr?   r   r   r   rC      s     c                 3  s   | ]}t | V  qd S r<   r=   r?   rB   r   r   rC      s     z
:py:obj:`~)r8      __qualname__z	:py:obj:`)%sphinx.ext.autodoc.mockr.   r/   Zsphinx.utilr0   NoneTypeEllipsisr&   r*   __name__r#   r   r   	isNewTypesysversion_infor   lenrF   joinhasattrZisgenericaliasrL   r   r>   r   _SpecialFormr%   rK   allr   rS   r   __forward_arg__r    r   Zobject_description)r+   r,   r.   r/   r0   Z	modprefixargsZconcatenated_argstextcls_nameoriginr   rB   r   r>   a   s    

 
 
"$ "  r>   )r,   
annotationr   c                  s  ddl m}m} ddlm}  dkr4td d dkrBd}nd	}t| d
d	}t| dd	}t| dd	}|dk}	t| tr| 	dr| 
dr| dd S | S nt| tr|	r dkr|S || d|  S n|| rtjdd dkr|| d|  S |S n| st| S | tkr$dS || r6|| S || rR|| d|  S t| rh|t|   S t| 	drzn8|dkr|rt| drt| S |S n| tkrdS | d}t| dd}
|s|	r|
s dkrd| }|	r dkrd	}nd	}|	rR|
r|
}n8t| dd	}|r0|}n |r<|}nt| jddd	}nF|r^|}n:t| drxt| j }n trt| trd}nt| S t| dd}|rt|ttfsn|d krd! fd"d#|D S |d$kr.d% fd&d#|dd D }t|d  }| d'| d(| d)S |d*kr\d%d+d# |D }| d,| d)S t| 	drzt|d  S td-d# |D r|| S d% fd.d#|D }| | d/| d)S || S )0a  Stringify type annotation object.

    :param annotation: The annotation to stringified.
    :param mode: Specify a method how annotations will be stringified.

                 'fully-qualified-except-typing'
                     Show the module name and qualified name of the annotation except
                     the "typing" module.
                 'smart'
                     Show the name of the annotation.
                 'fully-qualified'
                     Show the module name and qualified name of the annotation.
    r   r-   )rX   >   fully-qualifiedr1   r)   zZ'mode' must be one of 'fully-qualified-except-typing', 'fully-qualified', or 'smart'; got r5   r1   r2   r$   rS   r#   rW   r   'r:   rJ   >   r1   r)   Nr6   r7   Noneztyping.AnnotatedrE   rF   r3   r`   r)   rK   ztyping.rL   types.UnionType>   ri   r   Optionalr;   c                 3  s   | ]}t | V  qd S r<   stringify_annotationr?   rB   r   r   rC   G  s     z'stringify_annotation.<locals>.<genexpr>r   rG   c                 3  s   | ]}t | V  qd S r<   rk   r?   rB   r   r   rC   I  s     z
Callable[[rN   rI   rO   c                 s  s   | ]}t |V  qd S r<   rP   r?   r   r   r   rC   M  s     zLiteral[c                 s  s   | ]}t |V  qd S r<   rM   r?   r   r   r   rC   Q  s     c                 3  s   | ]}t | V  qd S r<   rk   r?   rB   r   r   rC   U  s     [)rT   r.   r/   r   rX   
ValueErrorr%   r&   r*   
startswithendswithr   rY   rZ   rQ   rU   r   r   r]   rV   rl   rL   replacer   listtupler\   r_   )re   r,   r.   r/   rX   Zmodule_prefixZannotation_qualnameZannotation_moduleZannotation_nameZannotation_module_is_typingZannotation_forward_argqualnamerK   annotation_argsra   Zreturnsr   rB   r   rl      s    









  

 
rl   	stringifyz'sphinx.util.typing.stringify_annotationc                 C  sH   | t krtdtd| ddlm} t |  \}}|t| |dd |S )Nzmodule z has no attribute r   )_deprecation_warning)   r   )remove)_DEPRECATED_OBJECTSr    rW   Zsphinx.deprecationrw   )namerw   Zdeprecated_objectcanonical_namer   r   r   __getattr__a  s    r}   )NN)r)   )r)   )/__doc__
__future__r   rY   r   structr   typesr   r   r   r   r   r	   r
   r   r   Zdocutilsr   Zdocutils.parsers.rst.statesr   r   ImportErrorr   r   TextZTextElementZTextlikeNodetyperU   r*   r   ZPathMatcherintNodeZsystem_messageZRoleFunctionZ
OptionSpecZTitleGetterZInventoryItemZ	Inventoryr   r(   r>   rl   rz   r}   r   r   r   r   <module>   s\   (
  	   w  	 