U
    \Shk,                     @  sB  d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZmZmZ erdd	lmZ eeZd
dddddZd
dddddZ d*ddd
dddZ!dedfdddddd
dddZ"G dd de
Z#d+d
ddd d!d"d#d$Z$d,d
dddd&d'd(d)Z%dS )-zImporter utilities for autodoc    )annotationsN)TYPE_CHECKINGAnyCallable
NamedTuple)ismock
undecorate)ModuleAnalyzerPycodeError)logging)getannotationsgetmrogetslotsisclassisenumclasssafe_getattr)ObjectMemberr   str)subjectnamereturnc                 C  sL   z2t | r0|dr0|ds0d| j | W S W n tk
rF   Y nX |S )zMangle the given name.___)r   
startswithendswith__name__AttributeError)r   r    r   N/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/ext/autodoc/importer.pymangle   s    r   z
str | Nonec                 C  s|   zbt | r`|ds`d| j }||r8||ddW S | jD ] }d|j }||r> W dS q>W n tk
rv   Y nX |S )zUnmangle the given name.r   z_%s__   N)r   r   r   r   replace__mro__r   )r   r   prefixclsr   r   r   unmangle'   s    




r%   Fbool)modnamewarningiserrorr   c                 C  s   z^t  L t jdtd t| & t| W  5 Q R  W  5 Q R  W S Q R X W 5 Q R X W n2 tk
r } zt	|t
 |W 5 d}~X Y nX dS )zR
    Call importlib.import_module(modname), convert exceptions to ImportError
    ignore)categoryN)warningscatch_warningsfilterwarningsImportWarningr   Zskip_warningiserror	importlibimport_moduleBaseExceptionImportError	traceback
format_exc)r'   r(   excr   r   r   r0   :   s    
8r0    z	list[str]zCallable[[Any, str], Any])r'   objpathobjtype
attrgetterr(   r   c              
   C  s4  |rt d| d| nt d|  zd }d }t|}|d krzt| |d}t d| | W q: tk
r } z<t d|  |}d| kr| dd\} }|d| n W 5 d }~X Y q:X q:|}	d }
d }|D ]b}|	}
t d	| t|	|}||	|}	zt d
|	 W n$ t	k
r*   t d
|	f Y nX |}q||
||	gW S  t
tfk
r. } zt|t
rl|rl|}|rd|d|| f }nd| d| }t|tr|j\}}t|tr|d7 }n4t|tr|jr|d|jd  7 }n|d| 7 }n|dt  7 }t | t||W 5 d }~X Y nX d S )Nz[autodoc] from %s import %s.z[autodoc] import %s)r(   z[autodoc] import %s => %rz[autodoc] import %s => failedr    r   z[autodoc] getattr(_, %r)z[autodoc] => %rz.autodoc: failed to import %s %r from module %rzautodoc: failed to import  zJ; the module executes module level statement and it might call sys.exit().z(; the following exception was raised:
%s)loggerdebugjoinlistr0   r2   rsplitinsertr   	TypeErrorr   
isinstanceargs
SystemExitr3   r4   )r'   r7   r8   r9   r(   moduleZexc_on_importingr5   r   objparentZobject_nameattrnameZmangled_nameerrmsgZreal_excZtraceback_msgr   r   r   import_objectI   sd    




rK   c                   @  s&   e Zd ZU ded< ded< ded< dS )	Attributer   r   r&   directly_definedr   valueN)r   
__module____qualname____annotations__r   r   r   r   rL      s   
rL   r   zModuleAnalyzer | Nonezdict[str, Attribute])r   r7   r9   analyzerr   c              	   C  s  ddl m} || di }i }t| r| j D ] \}}||kr.t|d|||< q.| jd }	|D ](}||	jkr^t| |}t|d|||< q^z6t	| }
|
rddl m
} |
D ]}t|d|||< qW n ttfk
r   Y nX t| D ]`}z@|| |}||k}t| |}|r"||kr"t|||||< W q tk
r>   Y qY qX qtt| D ]H\}}t|D ]4}t||}|r^||kr^t||dk|||< q^qN|rd|}| D ].\}}||kr||krt|d|||< q|S )z,Get members and attributes of target object.r   )INSTANCEATTR__dict__Tr    	SLOTSATTRr:   )sphinx.ext.autodocrS   r   __members__itemsrL   r"   rT   r   r   rV   rB   
ValueErrordirr%   r   	enumerater   r   r>   Zfind_attr_docs)r   r7   r9   rR   rS   obj_dictmembersr   rN   
superclass	__slots__rV   rM   ir$   	namespacensr   r   r   get_object_members   sP    






rd   Tzdict[str, ObjectMember])r   r7   r9   inherit_docstringsr   c              	   C  s   ddl m}m} || di }i }t| r| j D ]"\}}	||kr2|||	| d||< q2| jd }
|D ]*}||
jkrdt| |}	|||	| d||< qdzBt	| }|rddl m
} | D ]\}}|||| |d||< qW n ttfk
r   Y nX t| D ]}zf|| |}	t|	rt|	}	t| |}|r\||kr\||krN|||	| d||< n|||	||< W q tk
rx   Y qY qX qzt| D ]v}z*t|d}t|d	}t|}|  W n6 tk
r   d
}d
}Y n tk
r   d
}Y nX t|D ]d}t||}|r||kr|rB||f|jkrBd|j||f }nd
}|||||d||< q|r|j D ]\\}}}||kr||kr||||d|d||< nP||krn|rnt|| |rn|| jsn|| kr|sqnd||| _qnqW n tk
r   Y nX |S )z+Get members and attributes of target class.r   )rS   r   rT   )class_r    rU   )rf   	docstringrO   rP   N
)rW   rS   r   r   rX   rY   r"   rT   r   r   rV   rB   rZ   r[   r   r   r%   r   r   r	   Z
for_moduleZanalyzer
   r   Z	attr_docsr>   rC   rg   )r   r7   r9   re   rS   r   r]   r^   r   rN   r_   r`   rV   rg   Z	unmangledr$   r'   qualnamerR   rc   r   r   r   get_class_members   s    











rj   )F)N)T)&__doc__
__future__r   r/   r3   r+   typingr   r   r   r   Zsphinx.ext.autodoc.mockr   r   Zsphinx.pycoder	   r
   Zsphinx.utilr   Zsphinx.util.inspectr   r   r   r   r   r   rW   r   	getLoggerr   r<   r   r%   r0   rK   rL   rd   rj   r   r   r   r   <module>   s0    	
I
 B 