a
    1a-                     @   s  d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZ ddl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e Z!ee"e"d	d
dZ#ee"e
e" d	ddZ$d"e"e%edddZ&dedfe"ee" e"eee"gef e%edddZ'eeee"ef  dddZ(G dd de	Z)d#eee" eeee"e)f dddZ*eee" eee"df dd d!Z+dS )$z
    sphinx.ext.autodoc.importer
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Importer utilities for autodoc

    :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)AnyCallableDictList
NamedTupleOptionalTuple)RemovedInSphinx50Warning)ismock
undecorate)ModuleAnalyzerPycodeError)logging)getannotationsgetmrogetslotsisclassisenumclasssafe_getattr)subjectnamereturnc                 C   sH   z0t | r.|dr.|ds.d| j|f W S W n tyB   Y n0 |S )zMangle the given name.__z_%s%s)r   
startswithendswith__name__AttributeError)r   r    r   :lib/python3.9/site-packages/sphinx/ext/autodoc/importer.pymangle    s    r   c                 C   sz   zbt | r`|ds`d| j }||r8||ddW S | jD ] }d|j }||r> W dS q>W n tyt   Y n0 |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)modnamewarningiserrorr   c              
   C   s   zt  d t jdtd t| * t| W  d   W  d   W S 1 sV0    Y  W d   n1 st0    Y  W n4 ty } zt	|t
 |W Y d}~n
d}~0 0 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   r/   >   s    
Zr/    )r&   objpathobjtype
attrgetterr'   r   c              
   C   s2  |rt d| d| nt d|  zd }d }t|}|d u rzt| |d}t d| | W q: ty } zDt d|  |}d| v r| dd\} }|d| n W Y d }~q:d }~0 0 q:|}	d }
d }|D ]`}|	}
t d	| t|	|}||	|}	zt d
|	 W n" t	y*   t d
|	f Y n0 |}q||
||	gW S  t
tfy, } zt|t
rj|rj|}|rd|d|| f }nd|| f }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 Y d }~n
d }~0 0 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 %s %rzJ; the module executes module level statement and it might call sys.exit().z(; the following exception was raised:
%s)loggerdebugjoinlistr/   r1   rsplitinsertr   	TypeErrorr   
isinstanceargs
SystemExitr2   r3   )r&   r6   r7   r8   r'   moduleZexc_on_importingr4   r   objparentZobject_nameattrnameZmangled_nameerrmsgZreal_excZtraceback_msgr   r   r   import_objectM   sd    




rI   )rD   r   c              	   C   s   ddl m} tdt i }t| D ]8}zt| |d}||f||< W q$ tyZ   Y q$Y q$0 q$t| D ]}||vrf||f||< qft	t
| S )zGet members of target module.r   INSTANCEATTRz?sphinx.ext.autodoc.importer.get_module_members() is deprecated.N)sphinx.ext.autodocrK   r*   warnr	   dirr   r   r   sortedr=   values)rD   rK   membersr   valuer   r   r   get_module_members   s    rS   c                   @   s&   e Zd ZU eed< eed< eed< dS )	Attributer   directly_definedrR   N)r   
__module____qualname__str__annotations__boolr   r   r   r   r   rT      s   
rT   )r   r6   r8   analyzerr   c              	   C   s  ddl m} || di }i }t| r| j D ] \}}||vr.t|d|||< q.| jd }	|D ](}||	jvr^t| |}t|d|||< q^z6t	| }
|
rddl m
} |
D ]}t|d|||< qW n ttfy   Y n0 t| D ]^}z@|| |}||v }t| |}|r ||vr t|||||< W q ty:   Y qY q0 qtt| D ]H\}}t|D ]4}t||}|rZ||vrZt||dk|||< qZqJ|rd|}| D ].\}}||kr||vrt|d|||< q|S )z,Get members and attributes of target object.r   rJ   __dict__Tr    	SLOTSATTRr9   )rL   rK   r   __members__itemsrT   r"   r\   r   r   r^   r@   
ValueErrorrN   r%   r   	enumerater   r   r<   Zfind_attr_docs)r   r6   r8   r[   rK   obj_dictrQ   r   rR   
superclass	__slots__r^   rU   ir$   	namespacensr   r   r   get_object_members   sP    






ri   ObjectMember)r   r6   r8   r   c              	   C   s  ddl m}m} || di }i }t| r| j D ]"\}}||vr2|||| d||< q2| jd }	|D ]*}||	jvrdt| |}|||| d||< qdzBt	| }
|
rddl m
} |
 D ]\}}|||| |d||< qW n ttfy   Y n0 t| D ]}zf|| |}t|rt|}t| |}|rZ||vrZ||v rL|||| d||< n|||||< W q tyt   Y qY q0 qz0t| D ] }z*t|d}t|d	}t|}|  W n2 ty   d
}d
}Y n ty   d
}Y n0 t|D ]d}t||}|r||vr|r:||f|jv r:d|j||f }nd
}|||||d||< q|r|j D ]<\\}}}||krf||vrf||||d|d||< qfqW n ty   Y n0 |S )z+Get members and attributes of target class.r   )rK   rj   r\   )class_r    r]   )rk   	docstringrV   rW   N
)rL   rK   rj   r   r_   r`   r"   r\   r   r   r^   r@   ra   rN   r
   r   r%   r   r   r   Z
for_moduleZanalyzer   r   Z	attr_docsr<   )r   r6   r8   rK   rj   rc   rQ   r   rR   rd   re   r^   rl   Z	unmangledr$   r&   qualnamer[   rh   r   r   r   get_class_members   s    











ro   )F)N),__doc__r.   r2   r*   typingr   r   r   r   r   r   r   Zsphinx.deprecationr	   Zsphinx.ext.autodoc.mockr
   r   Zsphinx.pycoder   r   Zsphinx.utilr   Zsphinx.util.inspectr   r   r   r   r   r   Typerj   Z	getLoggerr   r:   rX   r   r%   rZ   r/   rI   rS   rT   ri   ro   r   r   r   r   <module>   s:   
$ 	
I =

