o
    Ni<                     @  sl  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZm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 erxddlmZm Z m!Z! ddl"m#Z# ddlm$Z$ ddl%m&Z& e'e(Z)d>ddZ*d?ddZ+d@d d!Z,dAd#d$Z-dBd'd(Z.d)efdCd.d/Z/G d0d1 d1eZ0	dDdEd6d7Z1	8dFdGd<d=Z2dS )HzImporter utilities for autodoc    )annotationsN)Enum)TYPE_CHECKING
NamedTuple)PycodeError)ismock
undecorate)ModuleAnalyzer)logging)getannotationsgetmrogetslotsisclassisenumclasssafe_getattr
unwrap_all)CallableIteratorMapping)
ModuleType)Any)ObjectMember
enum_class
type[Enum]
attrgetterCallable[[Any, str, Any], Any]enum_class_dictMapping[str, object]returnIterator[tuple[str, type, Any]]c                 #  sR   t  }h dddhtj}tj | dd	d
dfdd}t d fddjD ]0}|tthv r?q5 |di }| D ]\}}	|||	rSqI|| || }
durd|
V  qIq5tj | tdfdd|D E dH  |B }|| M }|tj M }|D ]}|| |s| }
dur|
V  qdS )aC  Find the attributes to document of an enumeration class.

    The output consists of triplets ``(attribute name, defining class, value)``
    where the attribute name can appear more than once during the iteration
    but with different defining class. The order of occurrence is guided by
    the MRO of *enum_class*.
    >   _name__order__value_	_missing__generate_next_value_namevalueobjobjectstrr   boolc                 S  s   t | t tj| u S )z;Check whether *obj* is the same as ``Enum.__dict__[name]``.)r   r   __dict__)r'   r%    r,   O/home/ubuntu/.local/lib/python3.10/site-packages/sphinx/ext/autodoc/importer.pyis_native_api<   s   z(_filter_enum_dict.<locals>.is_native_apir   c                   s   | v r	|| S |  v S Nr,   )r%   r&   )ignore_namesr.   sunder_namesr,   r-   should_ignore@   s   
z(_filter_enum_dict.<locals>.should_ignoredefining_classtypetuple[str, type, Any] | Nonec                   s"    | }|ur| ||fS d S r/   r,   )r%   r3   r&   )r   r   sentinelr,   r-   queryG   s   
z _filter_enum_dict.<locals>.queryr+   Nc                 3  s"    | ]}|vr| V  qd S r/   r,   ).0r%   )r   excluded_membersr7   r,   r-   	<genexpr>_   s    z$_filter_enum_dict.<locals>.<genexpr>)r'   r(   r%   r)   r   r*   )r%   r)   r&   r   r   r*   )r%   r)   r3   r4   r   r5   )	setr(   r+   r   keys__mro__itemsaddfilter)r   r   r   candidate_in_mropublic_namesr2   parentparent_dictr%   r&   itemspecial_namesr,   )r   r   r9   r0   r.   r7   r6   r1   r-   _filter_enum_dict&   sB   




"rG   subjectr   r%   r)   c                 C  sV   z t | r|dr|dsd| j | W S W |S W |S W |S  ty*   Y |S w )zMangle the given name.___)r   
startswithendswith__name__AttributeError)rH   r%   r,   r,   r-   manglen   s   rO   
str | Nonec                 C  s   z8t | r0|ds3d| j }||r||ddW S | jD ]}d|j }||r/ W dS qW |S W |S W |S  tyB   Y |S w )zUnmangle the given name.rI   z_%s__   N)r   rL   rM   rK   replacer=   rN   )rH   r%   prefixclsr,   r,   r-   unmangley   s(   




rU   modnamec              
   C  6   zt | W S  ty } zt|t |d}~ww )zICall importlib.import_module(modname), convert exceptions to ImportError.N)	importlibimport_moduleBaseExceptionImportError	traceback
format_exc)rV   excr,   r,   r-   rY      s   rY   moduler   c              
   C  rW   )zJ
    Call importlib.reload(module), convert exceptions to ImportError
    N)rX   reloadrZ   r[   r\   r]   )r_   r^   r,   r,   r-   _reload_module   s   ra    objpath	list[str]objtypeCallable[[Any, str], Any]c              
     s  |rt d| d| nt d|  zd }d }| }|d u rzVttj t| }tj	
drn fddtjD }z*dt_ttt |D ]	}ttj|  qGW d    n1 s[w   Y  W dt_ndt_w tj|  }t d	| | W n. ty } z"t d
|  |}d| v r| dd\} }	|d|	 n W Y d }~nd }~ww |d u s |}
d }d }|D ]/}|
}t d| t|
|}||
|}
zt d|
 W n ty   t d|
f Y nw |}q||||
gW S  ttfyX } zbt|tr|r|}|r	d|d|| f }nd| d| }t|trB|j\}}t|tr'|d7 }n#t|tr;|jr;|d|jd  7 }n|d| 7 }n|dt  7 }t | t||d }~ww )Nz[autodoc] from %s import %s.z[autodoc] import %sSPHINX_AUTODOC_RELOAD_MODULESc                   s   g | ]}| vr|qS r,   r,   )r8   moriginal_module_namesr,   r-   
<listcomp>   s    z!import_object.<locals>.<listcomp>TFz[autodoc] import %s => %rz[autodoc] import %s => failedrQ   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copy	frozensetsysmodulesrY   osenvirongettypingr   
contextlibsuppressr[   KeyErrorra   rsplitinsertrO   	TypeErrorrN   
isinstanceargs
SystemExitr\   r]   )rV   rc   re   r   r_   exc_on_importingnew_modulesri   r^   r%   r'   rC   object_nameattrnamemangled_nameerrmsgreal_exctraceback_msgr,   rj   r-   import_object   s   







r   c                   @  s&   e Zd ZU ded< ded< ded< dS )	Attributer)   r%   r*   directly_definedr   r&   N)rM   
__module____qualname____annotations__r,   r,   r,   r-   r      s   
 r   r   analyzerModuleAnalyzer | Nonedict[str, Attribute]c              	   C  s  ddl m} || di }i }t| r/t| ||D ]\}}}	t|| }
r.t|
|| u |	||
< qzt| }|rIddl m} |D ]
}t|d|||< q>W n tt	fyU   Y nw t
| D ])}z|| |}	||v }t| |}
|
ry|
|vryt|
||	||
< W qZ ty   Y qZw t| D ]}t|D ]}t||}
|
r|
|vrt|
|| u |||
< qq|rd|}| D ]\}}||kr||vrt|d|||< q|S )z,Get members and attributes of target object.r   )INSTANCEATTRr+   	SLOTSATTRTrg   )sphinx.ext.autodocr   r   rG   rU   r   r   r   r~   
ValueErrordirrN   r   r   rp   find_attr_docs)rH   rc   r   r   r   obj_dictmembersr%   r3   r&   	unmangledsubject___slots__r   r   rT   	namespacensr,   r,   r-   get_object_members   sV   



r   Tinherit_docstringsr*   dict[str, ObjectMember]c              	   C  s  ddl m}m} || di }i }t| r0t| ||D ]\}}	}
t|	| }r/|||
|	d||< qz!t| }|rPddl m} | D ]\}}|||| |d||< qAW n t	t
fy\   Y nw t| D ]:}z/|| |}
t|
rqt|
}
t| |}|r||vr||v r|||
| d||< n|||
||< W qa ty   Y qaw zt| D ]}zt|d}t|d}t|}|  W n ty   d	}d	}Y n ty   d	}Y nw t|D ]/}t||}|r||vr|r||f|jv rd
|j||f }nd	}|||||d||< q|rU|j D ]H\\}}}||kr+||vr+||||d
|d||< q||krS|rSt|| |rS|| jsS|| krK|sKqd
||| _qqW |S  tyc   Y |S w )z+Get members and attributes of target class.r   )r   r   r+   )class_r   )r   	docstringr   r   N
)r   r   r   r   rG   rU   r   r   r>   r~   r   r   r   r   rN   r   r   r	   
for_moduleanalyzer   r   	attr_docsrp   r   r   )rH   rc   r   r   r   r   r   r   r%   r3   r&   r   r   r   r   rT   rV   qualnamer   r   r,   r,   r-   get_class_members:  s   






-r   )r   r   r   r   r   r   r   r   )rH   r   r%   r)   r   r)   )rH   r   r%   r)   r   rP   )rV   r)   r   r   )r_   r   r   r   )
rV   r)   rc   rd   re   r)   r   rf   r   r   r/   )
rH   r   rc   rd   r   r   r   r   r   r   )T)
rH   r   rc   r   r   r   r   r*   r   r   )3__doc__
__future__r   ry   rX   ru   rs   r\   rx   enumr   r   r   sphinx.errorsr   sphinx.ext.autodoc.mockr   r   sphinx.pycoder	   sphinx.utilr
   sphinx.util.inspectr   r   r   r   r   r   r   collections.abcr   r   r   typesr   r   r   r   	getLoggerrM   rn   rG   rO   rU   rY   ra   r   r   r   r   r,   r,   r,   r-   <module>   sD    $



H



U
>