U
    \Sh                 
   @  sP  d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZ ddlm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mZ ddl 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m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 e	rRddl:m;Z; ddl<m=Z= e+>e?Z@eAeAjBZCeDdejEZFeDdZGdddddZHG dd dZIG dd dZJeI ZKeJ ZLeM ZNeM ZOeM ZPdddd d!ZQdd"dd#d$ZRdd%dd&d'ZSdd(dd)d*ZTdd(dd+d,ZUeM ZVdddd-d.ZWdd/dd0d1ZXd2d3d4d5d6ZYdzd7d7d(d8d9d:d;ZZd{d=d>d/d/d8d?d@dAZ[G dBdC dCe\Z]G dDdE dEe^Z_eee_ eee`e
f  f ZaG dFdG dGZbG dHdI dIebZcG dJdK dKebZdG dLdM dMebZeG dNdO dOZfG dPdQ dQefZgG dRdS dSefedZhG dTdU dUehZidVgZjdWgZkG dXdY dYefedZlG dZd[ d[elZmG d\d] d]ZnG d^d_ d_enZoG d`da daenZpG dbdc dceoepedZqG ddde deefeeZrG dfdg dgenZsG dhdi dienZtG djdk dkenZuG dldm dmenZvG dndo doeoeteuevesegee	ZwG dpdq dqegeeZxdrdd=dddsdtduZydrdvdwdxdyZzdS )|a  Extension to create automatic documentation from code docstrings.

Automatically insert docstrings for functions, classes or whole modules into
the doctree, thus avoiding duplication between docstrings and documentation
for those who like elaborate docstrings.
    )annotationsN)	Parameter	Signature)	TYPE_CHECKINGAnyCallableIteratorListSequenceTupleTypeVarUnion)
StringList)Sphinx)ENUMConfig)BuildEnvironment)get_class_membersimport_moduleimport_object)ismockmock
undecorate)___)ModuleAnalyzerPycodeError)inspectlogging)prepare_docstringseparate_metadata)evaluate_signaturegetdocobject_descriptionsafe_getattrstringify_signature)
OptionSpecget_type_hintsrestifystringify_annotation)
ModuleType)DocumenterBridgea  ^ ([\w.]+::)?            # explicit module name
          ([\w.]+\.)?            # module and/or class name(s)
          (\w+)  \s*             # thing name
          (?: \[\s*(.*)\s*])?    # optional: type parameters list
          (?: \((.*)\)           # optional: arguments
           (?:\s* -> \s* (.*))?  #           return annotation
          )? $                   # and nothing more
          z	^__\S+__$r   )xreturnc                 C  s   | S N )r,   r/   r/   N/root/rtd-docs/venv/lib/python3.8/site-packages/sphinx/ext/autodoc/__init__.pyidentityH   s    r1   c                   @  s0   e Zd ZdZdddddZddddd	Zd
S )_Allz;A special value for :*-members: that matches to any member.r   boolitemr-   c                 C  s   dS NTr/   selfr5   r/   r/   r0   __contains__O   s    z_All.__contains__Nonec                 C  s   d S r.   r/   r7   r/   r/   r0   appendR   s    z_All.appendN)__name__
__module____qualname____doc__r9   r;   r/   r/   r/   r0   r2   L   s   r2   c                   @  s    e Zd ZdZdddddZdS )_EmptyzGA special value for :exclude-members: that never matches to any member.r   r3   r4   c                 C  s   dS NFr/   r7   r/   r/   r0   r9   Y   s    z_Empty.__contains__N)r<   r=   r>   r?   r9   r/   r/   r/   r0   r@   V   s   r@   zobject | list[str])argr-   c                 C  s0   | dkrt S | dkrdS dd | dD S dS )z8Used to convert the :members: option to auto directives.r6   FNc                 S  s   g | ]}|  r|  qS r/   strip.0r,   r/   r/   r0   
<listcomp>k   s      z"members_option.<locals>.<listcomp>,)ALLsplitrB   r/   r/   r0   members_optiond   s
    rL   zobject | set[str]c                 C  s    | dkrt S dd | dD S )z-Used to convert the :exclude-members: option.r6   c                 S  s   h | ]}|  r|  qS r/   rC   rE   r/   r/   r0   	<setcomp>r   s      z)exclude_members_option.<locals>.<setcomp>rH   )EMPTYrJ   rK   r/   r/   r0   exclude_members_optionn   s    rO   zset[str]c                 C  s0   | dkrdhS | r&dd |  dD S t S dS )zBUsed to convert the :inherited-members: option to auto directives.r6   objectc                 S  s   h | ]}|  qS r/   rC   rE   r/   r/   r0   rM   z   s     z+inherited_members_option.<locals>.<setcomp>rH   N)rJ   setrK   r/   r/   r0   inherited_members_optionu   s
    rR   
str | Nonec                 C  s,   | dkrdS | dkr| S t td|  dS )z=Used to convert the :member-order: option to auto directives.r6   N)alphabeticalbysource	groupwisez)invalid value for member-order option: %s
ValueErrorr   rK   r/   r/   r0   member_order_option   s
    rY   c                 C  s    | dkr| S t td|  dS )zDUsed to convert the :class-doc-from: option to autoclass directives.)bothclassinitz+invalid value for class-doc-from option: %sNrW   rK   r/   r/   r0   class_doc_from_option   s    r]   c                 C  s   | dkrt S | S d S )Nr6   )SUPPRESSrK   r/   r/   r0   annotation_option   s    r_   r3   c                 C  s   dS )znUsed to convert flag options to auto directives.  (Instead of
    directives.flag(), which returns None).
    Tr/   rK   r/   r/   r0   bool_option   s    r`   dictr:   )optionsr-   c                 C  sd   |  dtkrdS | dg }dD ]<}|| kr"| | tdfkr"| | D ]}||krF|| qFq"dS )zWMerge :private-members: and :special-members: options to the
    :members: option.
    membersN>   special-membersprivate-members)getrI   
setdefaultr;   )rb   rc   keymemberr/   r/   r0   merge_members_option   s    rj   intr   )prepostwhatr-   c                   s&   dddddddd fdd}|S )	a  Return a listener that removes the first *pre* and last *post*
    lines of every docstring.  If *what* is a sequence of strings,
    only docstrings of a type in *what* will be processed.

    Use like this (e.g. in the ``setup()`` function of :file:`conf.py`)::

       from sphinx.ext.autodoc import cut_lines
       app.connect('autodoc-process-docstring', cut_lines(4, what=['module']))

    This can (and should) be used in place of :confval:`automodule_skip_lines`.
    r   strr   	list[str]r:   appwhat_nameobjrb   linesr-   c                   sZ   r|krd S |d =  r@|r4|d s4| d |  d = |rV|d rV|d d S )N )popr;   )rr   rs   rt   ru   rb   rv   rm   rl   rn   r/   r0   process   s    

zcut_lines.<locals>.processr/   )rl   rm   rn   r{   r/   rz   r0   	cut_lines   s    "r|   Fro   zSequence[str] | None)markerrn   	keepemptyexcluder-   c                   s2   t | dddddddd fdd}|S )	an  Return a listener that either keeps, or if *exclude* is True excludes,
    lines between lines that match the *marker* regular expression.  If no line
    matches, the resulting docstring would be empty, so no change will be made
    unless *keepempty* is true.

    If *what* is a sequence of strings, only docstrings of a type in *what* will
    be processed.
    r   ro   r   rp   r:   rq   c                   s   r|krd S d}  }|d d  }t |D ]L\}	}
|rP||	|  |d7 }|
r.| }|r.||	|  |d7 }q.|ss||d d < |r|d r|d d S )Nr      rw   rx   )	enumeratery   matchr;   )rr   rs   rt   ru   rb   rv   ZdeleteddeleteZ
orig_linesiliner   r~   Z	marker_rern   r/   r0   r{      s$    

zbetween.<locals>.process)recompile)r}   rn   r~   r   r{   r/   r   r0   between   s    
$r   c                      s6   e Zd ZdZd d fddZddddd	Z  ZS )
Optionsz>A dict/attribute hybrid that returns None on nonexisting keys.r-   c                   s   t t  S r.   )r   supercopyr8   	__class__r/   r0   r      s    zOptions.copyro   r   )rt   r-   c                 C  s.   z| | dd W S  tk
r(   Y d S X d S )Nr   -)replaceKeyError)r8   rt   r/   r/   r0   __getattr__   s    zOptions.__getattr__)r<   r=   r>   r?   r   r   __classcell__r/   r/   r   r0   r      s   r   c                      sF   e Zd ZdZddddd fddZdddd	dd
ddddZ  ZS )ObjectMembera}  A member of object.

    This is used for the result of `Documenter.get_module_members()` to
    represent each member of the object.

    .. Note::

       An instance of this class behaves as a tuple of (name, object)
       for compatibility to old Sphinx.  The behavior will be dropped
       in the future.  Therefore extensions should not use the tuple
       interface.
    ro   r   )rt   ru   kwargsr-   c                   s   t  | ||fS r.   )r   __new__)clsrt   ru   r   r   r/   r0   r     s    zObjectMember.__new__NFrS   r3   r:   )rt   ru   	docstringclass_skippedr-   c                 C  s"   || _ || _|| _|| _|| _d S r.   )r<   rP   r   r   r   )r8   rt   ru   r   r   r   r/   r/   r0   __init__  s
    zObjectMember.__init__)NNF)r<   r=   r>   r?   r   r   r   r/   r/   r   r0   r     s       r   c                   @  s  e Zd ZU dZdZdZdZdZdZde	iZ
ded< d	d
d	d	dddZed	d
dd	ddddZd]dd
d
ddddZeddddZd
d
dddddZd
d	d
d	d d!d"d#Zddd$d%Zd^ddd'd(d)Zd
dd*d+Zddd,d-Zd	d.d/d0d1Zd
dd2d3Zd	d.d/d4d5Zd	d
d/d6d7Zd
dd8d9d:Zd;dd<d=Zd>d?d@dAdBZd
ddCdDZdEddFdGdHZ ddIdJdKdLZ!dMddNdOdPdQZ"d_dddRdSdTZ#dUd
dUdVdWdXZ$d`dEd.ddddZd[d\Z%dYS )a
Documenterae  
    A Documenter knows how to autodocument a single object type.  When
    registered with the AutoDirective, it will be used to document objects
    of that type when needed by autodoc.

    Its *objtype* attribute selects what auto directive it is assigned to
    (the directive name is 'auto' + objtype), and what directive it generates
    by default, though that can be overridden by an attribute called
    *directivetype*.

    A Documenter has an *option_spec* that works like a docutils directive's;
    in fact, it will be used to parse an auto directive's options that matches
    the Documenter.
    rP      r   Tnoindexr&   option_specr   ro   )ru   rt   defargsr-   c                 G  s   t | jj||f| S )z5getattr() override for types such as Zope interfaces.)autodoc_attrgetterenvrr   )r8   ru   rt   r   r/   r/   r0   get_attrC  s    zDocumenter.get_attrr3   ri   
membernameisattrparentr-   c                 C  s   t ddS )z?Called to see if a member can be documented by this Documenter.!must be implemented in subclassesNNotImplementedErrorr   ri   r   r   r   r/   r/   r0   can_document_memberG  s    zDocumenter.can_document_memberrx   r+   r:   )	directivert   indentr-   c                 C  sl   || _ |jj| _|j| _|j| _|| _|| _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d S r.   )r   r   configZgenoptrb   rt   r   modnamemoduleobjpathfullnameargsretannrP   object_namer   analyzer)r8   r   rt   r   r/   r/   r0   r   M  s     
zDocumenter.__init__zdict[str, type[Documenter]]r   c                 C  s   | j jjjS )z%Returns registered Documenter classes)r   rr   registrydocumentersr   r/   r/   r0   r   f  s    zDocumenter.documentersrk   )r   sourcelinenor-   c                 G  s@   |  r&| jjj| j| |f|  n| jjjd|f|  dS )z0Append one line of generated reST to the output.rx   N)rD   r   resultr;   r   )r8   r   r   r   r/   r/   r0   add_linek  s    zDocumenter.add_linetuple[str, list[str]]r   parentspathbaser-   c                 C  s   t ddS )a@  Resolve the module and name of the object to document given by the
        arguments and the current module/class.

        Must return a pair of the module name and a chain of attributes; for
        example, it would return ``('zipfile', ['ZipFile', 'open'])`` for the
        ``zipfile.ZipFile.open`` method.
        r   Nr   r8   r   r   r   r   r/   r/   r0   resolve_namer  s    	zDocumenter.resolve_namec           
   	   C  s   z$t | j}| \}}}}}}W n4 tk
rX   tjtd| j| jf dd Y dS X |dk	r|dd }|r|	d
dng }	nd}g }	t| jj | ||	||\| _| _W 5 Q R X | jsdS || _|| _| jpd| jrdd| j nd | _d	S )
zDetermine what module to import and what attribute to document.

        Returns True and sets *self.modname*, *self.objpath*, *self.fullname*,
        *self.args* and *self.retann* if parsing and resolving was successful.
        z!invalid signature for auto%s (%r)autodoctypeFN.rx   T)py_ext_sig_rer   rt   groupsAttributeErrorloggerwarningr   objtyperstriprJ   r   r   autodoc_mock_importsr   r   r   r   r   joinr   )
r8   matchedZexplicit_modnamer   r   tp_listr   r   r   r   r/   r/   r0   
parse_name}  s.    	"zDocumenter.parse_nameF
raiseerrorr-   c                 C  s   t | jj zXt| j| j| j| j| jjd}|\| _	| _
| _| _t| jrXt| j| _W W 5 Q R  dS  tk
r } z:|r~ tj|jd ddd | j  W Y W 5 Q R  dS d}~X Y nX W 5 Q R X dS )	zImport the object given by *self.modname* and *self.objpath* and set
        it as *self.object*.

        Returns True if successful, False if an error occurred.
        
attrgetterZwarningiserrorTr   r   r   r   subtypeFN)r   r   r   r   r   r   r   r   autodoc_warningiserrorr   r   r   rP   r   r   ImportErrorr   r   r   r   note_rereadr8   r   retexcr/   r/   r0   r     s     

zDocumenter.import_objectc                 C  s   |  | jddp| jS )zGet the real module name of an object to document.

        It can differ from the name of the module through which the object was
        imported.
        r=   N)r   rP   r   r   r/   r/   r0   get_real_modname  s    zDocumenter.get_real_modnamec                 C  s<   | j jrdS t| j}| |dd}|r8|| jkr8dS dS )z`Check if *self.object* is really defined in the module given by
        *self.modname*.
        Tr=   NF)rb   Zimported_membersr   Z	unpartialrP   r   r   )r8   subjectr   r/   r/   r0   check_module  s    zDocumenter.check_modulerS   r   r-   c                 K  s   dS )z}Format the argument signature of *self.object*.

        Should return None if the object does not have a signature.
        Nr/   r8   r   r/   r/   r0   format_args  s    zDocumenter.format_argsc                 C  s   d | jp| jS )zFormat the name of *self.object*.

        This normally should be something that can be parsed by the generated
        directive, but doesn't need to be (Sphinx will display it unparsed
        then).
        r   )r   r   r   r   r/   r/   r0   format_name  s    	zDocumenter.format_namec                 K  s0   |r(z| j f |W S  tk
r&   Y nX |   S r.   )r   	TypeErrorr   r/   r/   r0   _call_format_args  s    zDocumenter._call_format_argsc              
   K  s   | j dk	rd| j  }| j}n|z<d}| jf |}|rVtd|}|rV|d}|d}W n> tk
r } z tjt	d| j
|dd d}W 5 d}~X Y nX | jjd	| j| j
| j| j||}|r|\}}|dk	r||rd
| nd S dS dS )zFormat the signature (arguments and return annotation) of the object.

        Let the user process it via the ``autodoc-process-signature`` event.
        Nz(%s)z^(\(.*\))\s+->\s+(.*)$r      z+error while formatting arguments for %s: %sr   r   autodoc-process-signaturez -> %srx   )r   r   r   r   r   group	Exceptionr   r   r   r   r   eventsemit_firstresultr   rP   rb   )r8   r   r   r   r   r   r   r/   r/   r0   format_signature  s>    



  
    zDocumenter.format_signaturesigr-   c           	      C  s   t | dd}t | d| j}|  }|  }d| d| d}t|dD ]4\}}| | | | | |dkrJd	t| }qJ| jj	r| d
| | j
r| d| j | dS )z>Add the directive header and options to the generated content.domainpydirectivetypez.. :z:: 
r    z   :noindex:z   :module: %sN)getattrr   r   get_sourcenamer   rJ   r   lenrb   r   r   r   )	r8   r   r   r   rt   
sourcenameprefixr   Zsig_liner/   r/   r0   add_directive_header  s    zDocumenter.add_directive_headerlist[list[str]] | Nonec                 C  s>   t | j| j| jj| j| j}|r:| jjj	j
j}t||gS g S )zDecode and return lines of the docstring(s) for the object.

        When it returns None, autodoc-process-docstring will not be called for this
        object.
        )r"   rP   r   r   autodoc_inherit_docstringsr   r   r   statedocumentsettings	tab_widthr   r8   r   r  r/   r/   r0   get_doc#  s     zDocumenter.get_doclist[list[str]]zIterator[str])
docstringsr-   c              	   c  sZ   |D ]P}| j jrJ| j jd| j| j| j| j| |rJ|d dkrJ|d |E dH  qdS )z7Let the user process the docstrings before adding them.autodoc-process-docstringrw   rx   N)r   rr   emitr   r   rP   rb   r;   )r8   r  Zdocstringlinesr/   r/   r0   process_doc0  s    
   
zDocumenter.process_docc                 C  sb   t | jdd r8t | jdd r8| jj d| jj }n| j}| jrV| jj d| S d| S d S )Nr=   r>   r   z:docstring of zdocstring of %s)r   r$   rP   r=   r>   r   r   srcname)r8   r   r/   r/   r0   r   ?  s    zDocumenter.get_sourcenameStringList | Nonemore_contentr-   c           
      C  s   d}|   }| jr| j }| jrd| jdd | jd f}||krd}t|| g}t| |D ]\}}| ||| qh|r| 	 }|dkrn4|s|
g  t| |D ]\}}| ||| q|rt|j|jD ]\}}	| ||	d |	d  qdS )z>Add content from docstrings, attribute documentation and user.Tr   Nrw   Fr   r   )r   r   find_attr_docsr   r   listr   r  r   r	  r;   zipdataitems)
r8   r  r   r   	attr_docsrh   r  r   r   srcr/   r/   r0   add_contentM  s,    

zDocumenter.add_contenttuple[bool, ObjectMembers]want_allr-   c                 C  s   t ddS )a+  Return `(members_check_module, members)` where `members` is a
        list of `(membername, member)` pairs of the members of *self.object*.

        If *want_all* is True, return all members.  Else, only return those
        members given by *self.options.members* (which may also be None).
        r   Nr   )r8   r  r/   r/   r0   get_object_memberst  s    zDocumenter.get_object_membersObjectMemberszlist[tuple[str, Any, bool]])rc   r  r-   c                   s"  dddd fdd}g }d  j} jr8 j }ni }|D ]}zz|\}}	|	tkpd||f|k}
t|	 j jj j	|}t
|tsd} |	d	d}|r |d
d}||krd}t
|tr|jr|j}t|\}}t|}d|krd}nd|krd}n
|d}d}t|	r(||f|kr(nH jjrH| jjkrHd}n(|rt|r jjr| jjkr|d
krd}n |||rd}n|p jj}nd}n||f|kr|r|r jjdkrd}n| jjk}nd}n|rB|rB|s jjr< jjdkrd}n|||r.d}n| jjk}nd}n. jjtkrb|||rbd}n|pn jj}t
|tr|jrd} jjr jjd j||	|  j}|dk	r| }W nD t k
r } z$t!j"t#d j$||	|dd d}W 5 d}~X Y nX |r@|%||	|
f q@|S )a  Filter the given member list.

        Members are skipped if

        - they are private (except if given explicitly or the private-members
          option is set)
        - they are special methods (except if given explicitly or the
          special-members option is set)
        - they are undocumented (except if the undoc-members option is set)

        The user can override the skipping decision by connecting to the
        ``autodoc-skip-member`` event.
        ro   r   r3   )rt   ru   r-   c                   s    j jpt }t jr jjD ]`}|j|kr@| jkr@ dS | |jkrP dS |  	|di krh dS t
|tr"|j|kr" dS q"dS )NTF__annotations__)rb   inherited_membersrQ   r   isclassrP   __mro__r<   __dict__r   
isinstancer   r   )rt   ru   r!  r   r   r/   r0   is_filtered_inherited_member  s    
z?Documenter.filter_members.<locals>.is_filtered_inherited_memberr   Nr   r?   privateTpublicFr   autodoc-skip-memberz`autodoc: failed to determine %s.%s (%r) to be documented, the following exception was raised:
%sr   r   )&r   r   r   r  INSTANCEATTRr"   r   r   r  rP   r%  ro   r   r   r    r3   
startswithr   rb   Zexclude_membersspecial_member_rer   special_membersZundoc_membersZprivate_membersrc   rI   r   r   rr   r   r   r   r   r   r   rt   r;   )r8   rc   r  r&  r   	namespacer  ru   r   ri   r   docr   Zcls_docmetadataZhas_docZ	isprivateZkeepZ	skip_userr   r/   r   r0   filter_members}  s    
 







    


    zDocumenter.filter_membersall_membersr-   c           
        s:  j jjd< jr&jd jjd< |p<jjp<jjtk}|\}}g }	||D ]|\  fddj
 D }|sq\|jdd d j d	 d
jg  }|d j|j}|| f q\jjpjj}	||	}|D ]"\} |jdj|o  d qdjjd< djjd< dS )zGenerate reST for member documentation.

        If *all_members* is True, document all members, else those given by
        *self.options.members*.
        autodoc:moduler   autodoc:classc                   s    g | ]}|  r|qS r/   )r   rF   r   r   ri   Zmnamer8   r/   r0   rG   '  s    z/Documenter.document_members.<locals>.<listcomp>c                 S  s   | j S r.   )priority)r   r/   r/   r0   <lambda>-      z-Documenter.document_members.<locals>.<lambda>rh   ::r   rw   T)r3  real_modnamer   N)r   r   	temp_datar   rb   r!  rc   rI   r  r1  r   valuessortr   r   r   r;   member_orderr   autodoc_member_ordersort_membersgenerater=  )
r8   r3  r  Zmembers_check_modulerc   ZmemberdocumentersclassesZ
full_mname
documenterrA  r/   r7  r0   document_members  s8    
 
zDocumenter.document_memberslist[tuple[Documenter, bool]]r   orderr-   c                   sf   |dkr|j dd d nH|dkrR| jrb| jj ddd fd	d
}|j |d n|j dd d |S )zSort the given member list.rV   c                 S  s   | d j | d jfS Nr   )rA  rt   er/   r/   r0   r9  E  r:  z)Documenter.sort_members.<locals>.<lambda>r;  rU   tuple[Documenter, bool]rk   entryr-   c                   s$   | d j dd } |t S Nr   r<  r   )rt   rJ   rf   r   )rP  r   tagorderr/   r0   keyfuncM  s    z(Documenter.sort_members.<locals>.keyfuncc                 S  s
   | d j S rK  rt   rL  r/   r/   r0   r9  R  r:  )r@  r   rS  r8   r   rJ  rT  r/   rR  r0   rC  @  s    zDocumenter.sort_membersNr  r=  r   r3  r-   c              
   C  s   |   s$tjtd| j dd dS |  s0dS |  }|p>|| _zt	| j| _
| j
  W nZ tk
r } z<td| d| _
t| jdr| jjr| jj| jj W 5 d}~X Y nX | jj| j
j | j|krzt	|}| jj|j W n tk
r   Y nX t|  pg g }t| jrJ|sJtjtd| jdd |r^|  s^dS |  }	| d|	 z|  }
W nB tk
r } z"tjtd	| j|dd W Y dS d}~X Y nX | |
 | d|	 |  j | j!7  _ | "| | #| dS )
a  Generate reST for the object given by *self.name*, and possibly for
        its members.

        If *more_content* is given, include that content. If *real_modname* is
        given, use that module name to find attribute docs. If *check_module* is
        True, only generate if the object is defined in the module name it is
        imported from. If *all_members* is True, document all members.
        zdon't know which module to import for autodocumenting %r (try placing a "module" or "currentmodule" directive in the document, or giving an explicit module name)r   r   Nz$[autodoc] module analyzer failed: %s__file__zA mocked object is detected: %rrx   z+error while formatting signature for %s: %s)$r   r   r   r   rt   r   r   r=  r   
for_moduler   r  r   debughasattrr   rX  r   Zrecord_dependenciesaddr  sumr	  r   rP   r   r   r   r   r   r   r  r   content_indentr  rG  )r8   r  r=  r   r3  Zguess_modnamer   r   r  r   r   r/   r/   r0   rD  V  sh    
$

 

  

zDocumenter.generate)rx   )F)F)NNFF)&r<   r=   r>   r?   r   r^  r8  rA  Ztitles_allowedr`   r   r   r   classmethodr   r   propertyr   r   r   r   r   r   r   r   r   r   r   r  r	  r  r   r  r  r1  rG  rC  rD  r/   r/   r/   r0   r   $  sP   
 %#'	 -    r   c                      s  e Zd ZU dZdZdZdZeeee	ee
e
eeeeeeeedZded< dd	d
 fddZdd	d fddZeddddddddZddddddddZdd fddZd/ddd fdd Zdd	d!d"d#Zd$dd%d&Zdd'd(d)d*Zd+dd+d, fd-d.Z  ZS )0ModuleDocumenterz6
    Specialized Documenter subclass for modules.
    r   rx   r   )rc   undoc-membersr   inherited-membersshow-inheritancesynopsisplatform
deprecatedmember-orderexclude-membersre   rd   zimported-memberszignore-module-allno-valuer&   r   r   r:   r   r-   c                   s    t  j|  t| j d | _d S r.   )r   r   rj   rb   __all__r8   r   r   r/   r0   r     s    
zModuleDocumenter.__init__r  r  c                   s^   | j }|  j | j7  _ t d  || _ |rZt|j|jD ]\}}| ||d |d  q:d S )Nr   r   )r   _extra_indentr   r  r  r  r  r   )r8   r  Z
old_indentr   r  r   r/   r0   r    s    zModuleDocumenter.add_contentro   r3   r   c                 C  s   dS rA   r/   r   r/   r/   r0   r     s    z$ModuleDocumenter.can_document_memberr   r   c                 C  s*   |d k	rt jtddd |p d| g fS )Nz*"::" in automodule name doesn't make senser   r   rx   )r   r   r   r   r/   r/   r0   r     s
    
zModuleDocumenter.resolve_namer   c                   s2   t   }| js| jr.tjtd| j dd |S )Nz@signature arguments or return annotation given for automodule %sr   r   )r   r   r   r   r   r   r   r   )r8   r   r   r/   r0   r     s    

zModuleDocumenter.parse_nameFr   c              
     sp   t  |}z| jjs$t| j| _W nD tk
rj } z&t	j
td|jd | jf dd W 5 d }~X Y nX |S )NzN__all__ should be a list of strings, not %r (in module %s) -- ignoring __all__r   r   r   )r   r   rb   Zignore_module_allr   ZgetallrP   rl  rX   r   r   r   r   r   r   r   r/   r0   r     s    
zModuleDocumenter.import_objectr   c                 C  sd   t | | |  }| jjr0| d| jj | | jjrL| d| jj | | jjr`| d| d S )Nz   :synopsis: z   :platform: z   :deprecated:)r   r  r   rb   re  r   rf  rg  r8   r   r   r/   r/   r0   r    s    z%ModuleDocumenter.add_directive_headerzdict[str, ObjectMember]c              	   C  s   | j r| j j}ni }i }t| jD ]h}zJt| j|d}t|rFt|}|d|fg }t||d	|d||< W q" t
k
r   Y q"Y q"X q"t| jD ]4}||kr|d|fg }t|td	|d||< q|S )zGet members of target module.Nrx   r   )r   )r   r  dirrP   r$   r   r   rf   r   r   r   r   getannotationsr*  )r8   r  rc   rt   valuer   r/   r/   r0   get_module_members
  s(    
z#ModuleDocumenter.get_module_membersr  r  c                 C  s   |   }|rX| jd kr&dt| fS | D ]}|j| jkr.d|_q.dt| fS n^| jjpbg }g }|D ]@}||kr|||  qlt	j
tdt| jdd|f dd qld|fS d S )NTFzHmissing attribute mentioned in :members: option: module %s, attribute %sr<   z???r   r   )rs  rl  r  r?  r<   r   rb   rc   r;   r   r   r   r$   rP   )r8   r  rc   ri   Z
memberlistr   rt   r/   r/   r0   r  %  s&    

z#ModuleDocumenter.get_object_membersrH  rI  c                   sT   |dkrB j rB|jdd d ddd fdd	}|j|d |S t ||S d S )
NrU   c                 S  s
   | d j S rK  rU  rL  r/   r/   r0   r9  C  r:  z/ModuleDocumenter.sort_members.<locals>.<lambda>r;  rN  rk   rO  c                   s>   | d j dd } jr0| jkr0 j|S t jS d S rQ  )rt   rJ   rl  indexr   )rP  rt   r   r/   r0   rT  F  s    z.ModuleDocumenter.sort_members.<locals>.keyfunc)rl  r@  r   rC  rV  r   r   r0   rC  ?  s    zModuleDocumenter.sort_members)F)r<   r=   r>   r?   r   r^  rn  rL   r`   rR   r1   rY   rO   r   r   r   r  r_  r   r   r   r   r  rs  r  rC  r   r/   r/   r   r0   ra    s>   
       	ra  c                   @  s&   e Zd ZdZddddddddZdS )	ModuleLevelDocumenterzo
    Specialized Documenter subclass for objects on module level (functions,
    classes, data/constants).
    ro   r   r   r   c                 C  sF   |d kr8|r| d}n | jjd}|s8| jjd}|||g fS )Nr   r4  	py:module)r   r   r>  rf   ref_contextr   r/   r/   r0   r   X  s    z"ModuleLevelDocumenter.resolve_nameNr<   r=   r>   r?   r   r/   r/   r/   r0   ru  S  s   ru  c                   @  s&   e Zd ZdZddddddddZdS )	ClassLevelDocumenterz_
    Specialized Documenter subclass for objects on class level (methods,
    attributes).
    ro   r   r   r   c                 C  s   |d kr|r| d}n8d }| jjd}|d kr@| jjd}|d krPd g fS |d\}}}|g}|sx| jjd}|s| jjd}|||g fS )Nr   r5  zpy:classr4  rv  )r   r   r>  rf   rw  
rpartition)r8   r   r   r   r   Zmod_clssepr   r/   r/   r0   r   m  s     z!ClassLevelDocumenter.resolve_nameNrx  r/   r/   r/   r0   ry  h  s   ry  c                      sb   e Zd ZU dZdZded< dZded< ddd	d
Zdd fddZddd fddZ	  Z
S )DocstringSignatureMixinz
    Mixin for FunctionDocumenter and MethodDocumenter to provide the
    feature of reading the signature from the docstring.
    Nr
  _new_docstringsrp   _signaturesztuple[str | None, str | None]r   c                 C  sV  | j d g}t| trD|d t| jdrD|dd | jjD  |  }|d krXdS |d d  | _	g | _
d }t|D ]\}}t|D ]\}}|s qF|dr|d }t|}|s qF| \}	}
}}}}||kr qF| jjjjj}td||d	 d  || j	|< |d kr,||f}q| j
d
| d|  q|rx qRqx|S )Nrw   r   r#  c                 s  s   | ]}|j V  qd S r.   )r<   r6  r/   r/   r0   	<genexpr>  s     z:DocstringSignatureMixin._find_signature.<locals>.<genexpr>)NN\r   r   (z) -> )r   r%  ClassDocumenterr;   r[  rP   extendr#  r	  r}  r~  r   endswithr   r   r   r   r   r  r  r  r  r   r   )r8   Zvalid_namesr  r   r   Zdoclinesjr   r   Zexmodr   r   r   r   r   r  r/   r/   r0   _find_signature  sB    






z'DocstringSignatureMixin._find_signaturec                   s   | j d k	r| j S t  S r.   )r}  r   r	  r   r   r/   r0   r	    s    
zDocstringSignatureMixin.get_docr   ro   r   c                   s\   | j d kr.| jjr.|  }|d k	r.|\| _ | _t jf |}| jrTd|g| j S |S d S )Nr   )	r   r   autodoc_docstring_signaturer  r   r   r   r~  r   )r8   r   r   r   r   r/   r0   r     s    z(DocstringSignatureMixin.format_signature)r<   r=   r>   r?   r}  r   r~  r  r	  r   r   r/   r/   r   r0   r|    s   
3r|  c                      s(   e Zd ZdZddd fddZ  ZS )DocstringStripSignatureMixinzz
    Mixin for AttributeDocumenter to provide the
    feature of stripping any function signature from the docstring.
    r   ro   r   c                   s:   | j d kr,| jjr,|  }|d k	r,|\}| _t jf |S r.   )r   r   r  r  r   r   r   )r8   r   r   _argsr   r/   r0   r     s    
z-DocstringStripSignatureMixin.format_signature)r<   r=   r>   r?   r   r   r/   r/   r   r0   r    s   r  c                      s   e Zd ZdZdZdZedddddddd	Zdd
dddZd"dddddZ	ddd fddZ
ddd fddZddddddZddddd d!Z  ZS )#FunctionDocumenterz8
    Specialized Documenter subclass for functions.
    function   r   ro   r3   r   c                 C  s(   t |p&t |p&t |o&t|tS r.   )r   
isfunction	isbuiltin	isroutiner%  ra  r   r/   r/   r0   r     s    z&FunctionDocumenter.can_document_memberrS   r   c              
   K  s   | j jdkr|dd | j jdkr0|dd z8| jjd| jd tj	| j| j j
d}t|f|}W nR tk
r } zttd	| j| W Y d S d }~X Y n tk
r   d
}Y nX | j jr|dd}|S )Nnonedescriptionshow_annotationFshortunqualified_typehintsT autodoc-before-process-signaturetype_aliases-Failed to get a function signature for %s: %srx   r  \\)r   autodoc_typehintsrg   autodoc_typehints_formatr   rr   r  rP   r   	signatureautodoc_type_aliasesr%   r   r   r   r   r   rX   strip_signature_backslashr   )r8   r   r   r   r   r/   r/   r0   r     s&    
 
zFunctionDocumenter.format_argsFr:   r2  c                 C  s   d S r.   r/   r8   r3  r/   r/   r0   rG    s    z#FunctionDocumenter.document_membersr   c                   s<   |   }t | t| js,t| jr8| d| d S )N
   :async:)r   r   r  r   iscoroutinefunctionrP   isasyncgenfunctionr   ro  r   r/   r0   r    s    z'FunctionDocumenter.add_directive_headerc                   sJ  | j jdkr|dd g }| jrHd| j| jjkrH| j jdkrHd}nd}t j	f |}|
| t| jr| jj D ]J\}}|tkrq|| ||}|r|t| jd}||_d g|_|
|	  q||r@tj| j| j jd}	t| jd	i }
| jjd| jD ]8}| |	|}t||
| j j}t|f|}|
| qd
|S )Nr  r  Tr   r  Frx   r  __globals__r   )r   r  rg   r   r   r   	overloadsr  r   r   r;   r   Zis_singledispatch_functionrP   r   r  annotate_to_first_argumentr  r   r  r  r$   rf   merge_default_valuer!   r%   )r8   r   sigs
overloadedr   typfuncZdispatchfuncrF  actualr  overloadr   r/   r0   r     sF    

z#FunctionDocumenter.format_signaturer   r  r  r-   c                 C  sZ   t |j }t|D ]6\}}|j|j}|r|jdkr|j|jd||< q|j|dS zGMerge default values of actual implementation to the overload variants.z...)default
parametersr  r  r?  r   rf   rt   r  r   r8   r  r  r  r   paramZactual_paramr/   r/   r0   r  C  s    z&FunctionDocumenter.merge_default_valuer   r   Callable | Noner  r  r-   c              
   C  s   zt j|| jjd}W nP tk
rR } zttd| j| W Y dS d}~X Y n t	k
rf   Y dS X t
|jdkrzdS dd }t|j }|d jtjkr|d j|d|d< z|j|d|_|W S  ttfk
r   Y dS X |S )	?Annotate type hint to the first argument of function if needed.r  r  Nr   c                   S  s   d S r.   r/   r/   r/   r/   r0   dummy[  s    z<FunctionDocumenter.annotate_to_first_argument.<locals>.dummy
annotationr  r   r  r   r  r   r   r   r   r   rX   r   r  r  r?  r  r   emptyr   __signature__r   r8   r  r  r   r   r  paramsr/   r/   r0   r  M  s,    
 z-FunctionDocumenter.annotate_to_first_argument)F)r<   r=   r>   r?   r   rA  r_  r   r   rG  r  r   r  r  r   r/   r/   r   r0   r    s   )
r  c                      s0   e Zd ZdZdZdZddd fddZ  ZS )DecoratorDocumenterzB
    Specialized Documenter subclass for decorator functions.
    	decoratorrw   r   r   c                   s"   t  jf |}d|kr|S d S d S )NrH   )r   r   )r8   r   r   r   r/   r0   r   t  s    zDecoratorDocumenter.format_args)r<   r=   r>   r?   r   r8  r   r   r/   r/   r   r0   r  k  s   r  zenum.EnumMeta.__call__ztyping.Generic.__new__c                      s  e Zd ZU dZdZdZeeeeee	e
eeed
Zded< dZdZd	ed
< dZded< d	dd fddZed	ddd	ddddZdBddd fddZddddZd	dddd Zd!d fd"d#Zd	dd fd$d%Zd&dd'd(Zddd)d*Zddd+ fd,d-Zdd.d/d0d1Zd2dd3d4Zd5dd6d7Zd8dd9 fd:d;ZdCddd< fd=d>Z dDd8ddddd? fd@dAZ!  Z"S )Er  z6
    Specialized Documenter subclass for classes.
    r[      )
rc   rb  r   rc  rd  rh  ri  re   rd   class-doc-fromr&   r      Nr   _signature_classro   _signature_method_namer:   rk  c                   sj   t  j|  | jjdkr\| j | _| jjd kr@ddg| jd< n| jjd | jjd t| j d S )N	separatedr   r   rd   )	r   r   r   autodoc_class_signaturerb   r   r-  r;   rj   rm  r   r/   r0   r     s    zClassDocumenter.__init__r3   r   c                 C  s"   t |tp |o t|p t |tS r.   )r%  r   r   	isNewTyper   r   r/   r/   r0   r     s    
z#ClassDocumenter.can_document_memberFr   c                   s   t  |}|rt| jdr2| jd | jjk| _nd| _t| jsPt	| jt
rt| jd| j}|| jkr| j|r| jt|d  dd}|| j | _|| _|S )Nr<   rw   Tr=   r   )r   r   r[  rP   r   r<   doc_as_attrr   r  r%  r   r   r   r+  r   rD   rJ   )r8   r   r   r   basesr   r/   r0   r     s    zClassDocumenter.import_objectz/tuple[Any | None, str | None, Signature | None]r   c                   s  t  jst jtrdS dddd fdd}t jdrZt jjtrZd d  jjfS |t jd}|d k	r|j	 d	|j
 tkrd }|d k	r jjd
|d z&t j|d jjd}t jd|fW S  tk
r   Y nX | jd}|d k	r|j	 d	|j
 tkrd }|d k	rj jjd
|d z"t j|d jjd} jd|fW S  tk
rh   Y nX | jd}|d k	r̈ jjd
|d z"t j|d jjd} jd|fW S  tk
r   Y nX  jjd
 jd z"t j jd jjd}d d |fW S  tk
r   Y nX dS )N)NNNr   ro   )ru   attrr-   c                   s:   t | |rdS  | |d}t |s6t |s6dS |S )zF Get the `attr` function or method from `obj`, if it is user-defined. N)r   Zis_builtin_class_methodr   ismethodr  )ru   r  r   r/   r0   #get_user_defined_function_or_method  s    zKClassDocumenter._get_signature.<locals>.get_user_defined_function_or_methodr  __call__r   r  TZbound_methodr  r   r   F)r   r  rP   r%  r   r[  r  r   r   r=   r>   _METACLASS_CALL_BLACKLISTr   rr   r  r  r   r  rX   _CLASS_NEW_BLACKLIST)r8   r  callr   newr\   r/   r   r0   _get_signature  sh    



zClassDocumenter._get_signaturerS   r   c              
   K  s   | j jdkr|dd | j jdkr0|dd z|  \| _| _}W n< tk
r } zt	t
d| j| W Y d S d }~X Y nX |d krd S t|fddi|S )	Nr  r  Fr  r  Tz0Failed to get a constructor signature for %s: %sZshow_return_annotation)r   r  rg   r  r  r  r  r   r   r   r   r   r%   )r8   r   r   r   r/   r/   r0   r     s    
 zClassDocumenter.format_argsztuple[str, str]c                   sR   t   }|d k	r|d d f}t| jD ]$\}}|dr(|d d | j|< q(|S )Nr   z -> Nonei)r   r  r   r~  r  )r8   r   r   r   r   r/   r0   r  ,  s    

zClassDocumenter._find_signaturec           	        s   | j r
dS | jjdkrdS | jjdkr2|dd t  }g }|  }|r| jjdkrt	| j
| jd }t	|di }|D ]P}t||| jj}t|j }|j|dd  tjd	}t|f|}|| qxn
|| d
|S )Nrx   r  r  r  Tr  r  r   )r  return_annotationr   )r  r   r  r  rg   r   r   get_overloaded_signaturesr  r$   r  r  r!   r  r  r  r?  r   r   r  r%   r;   r   )	r8   r   r   r  r  methodr  r  r  r   r/   r0   r   :  s0    

z ClassDocumenter.format_signaturezlist[Signature]c              	   C  s   | j r| jr| j jD ]v}z\t|j}|  d|j| jg}||j	kr^|j	
|g W   S ||jkrrg W   S W q tk
r   Y qX qg S )Nr   )r  r  r#  r   rY  r=   analyzer   r>   r  rf   rS  r   )r8   r   r   qualnamer/   r/   r0   r  Z  s    

z)ClassDocumenter.get_overloaded_signaturesc                 C  sb   t | jd| j}t | jdd }|d kr4t | jdd }|rDd|krDd }|rZ|rZd||gS d S d S )Nr=   r>   r<   z<locals>r   )r$   rP   r   r   )r8   Z__modname__r>   r/   r/   r0   get_canonical_fullnamek  s    z&ClassDocumenter.get_canonical_fullnamer   c                   sn  |   }| jrd| _t | t| js8t| jt	r<d S | j
rbd| j| j
jkrb| d| |  }| jst| js|r| j|kr| d| | | jsj| jjrjt| jrt| jj}n*t| jdrt| jjrt| jj}ng }| jjd| j| j| j| | jjdkr*dd	 |D }nd
d	 |D }|   }| d| | dtdd|  | d S )N	attributer   
   :final:z   :canonical: %s	__bases__autodoc-process-basesr  c                 S  s   g | ]}t |d qS )smartr(   r6  r/   r/   r0   rG     s     z8ClassDocumenter.add_directive_header.<locals>.<listcomp>c                 S  s   g | ]}t |qS r/   r  r6  r/   r/   r0   rG     s     rx   r   z	Bases: %s, )r   r  r   r   r  r   r  rP   r%  r   r   r   r   finalsr   r  r   rb   Zshow_inheritanceZgetorigbasesr  __orig_bases__r[  r   r  r   r   r  r   r  r   )r8   r   r   Zcanonical_fullnamer  Zbase_classesr   r/   r0   r  y  sB    
   z$ClassDocumenter.add_directive_headerr  r  c                   s   t  j j j jj}|sz jjs,dg fS g } jjD ]8}||krT|||  q8t	j
td| jf dd q8d|fS  jjrdt| fS d fdd| D fS d S )NFz!missing attribute %s in object %sr   r   c                   s   g | ]}|j  jkr|qS r/   )r   rP   )rF   mr   r/   r0   rG     s      z6ClassDocumenter.get_object_members.<locals>.<listcomp>)r   rP   r   r   r   r  rb   rc   r;   r   r   r   r   r!  r  r?  )r8   r  rc   selectedrt   r/   r   r0   r    s&    
z"ClassDocumenter.get_object_membersr  c              	     sz  t | jtr| jjtjkrg S tjd d dk rt| jsLt | jtr| j	d
d}| j}tt|D ]}d|d t||  }|t|| d  | }zPt|}|  d|d f}t|j|g }|r|| _|| _|gW   S W qp tk
r   Y qpX qp| jr.|  }|r*g S d S t| dd }	|	d k	rH|	S | jd| jj}
g }t| j| j}|r||| |
dkrZ| | jd	d }t|| j| jj| jd	}|d k	r|tj jks|	 tj jkrd }|s8| | jd
d }t|| j| jj| jd
}|d k	r8|tj!jks4|	 tj!jkr8d }|rZ|
dkrP|g}n
|| | j"j#j$j%j&  fdd|D S )Nr   )   
   r   rx   rw   r}  r  )rZ   r\   r   r   r\   c                   s   g | ]}t | qS r/   )r   )rF   r   r  r/   r0   rG     s     z+ClassDocumenter.get_doc.<locals>.<listcomp>)'r%  rP   r   r?   sysversion_infor   r  r   rD   rJ   r   ranger   r   r   rY  r  r  r  rf   r   r  get_variable_commentr   rb   r   autoclass_contentr"   r   r;   r  r   r   r   r  r  r  r  )r8   partsZorig_objpathr   Znew_modnameZnew_objpathr   rh   commentrv   Zclassdoc_fromr  Zattrdocstringr   Zinitdocstringr   r/   r  r0   r	    s    



 

 



zClassDocumenter.get_doclist[str] | Nonec                 C  sj   zNdd | jf}| jr&t| j}nt|  }|  t|j	
|g W S  tk
rd   Y d S X d S )Nrx   r   )r   r   r  r   rY  r   r   r  r  r  rf   r   )r8   rh   r   r/   r/   r0   r     s    z$ClassDocumenter.get_variable_commentr  r  c                   s  t | jrL| jjdkr(t| jjd}nt| jj}ttd| dgdd}t	| jt
r$t| jjg}| jjD ]0}| jjdkr|t|d qp|t| qp| jjr| jjdkrt| jjd}nt| jj}|d|  | jjr|d | jjr|d ttd	d
| dgdd}| jrp| j|  krpzt| j| _| j  W n tk
rn   Y nX | jr|  sz@| jjdkrt| jd}n
t| j}ttd| gdd}W n tk
r   Y nX t | d S )Nr  r  alias of %srx   )r   zbound=\ zcovariant=Truezcontravariant=Truezalias of TypeVar(%s)r  ) r   r  rP   r   r  r(   __supertype__r   r   r%  r   reprr<   __constraints__r;   r)   	__bound____covariant____contravariant__r   r  r   r   r   rY  r   r  r   r  r   r   r  )r8   r  Z	supertypeattrs
constraintboundaliasr   r/   r0   r    sN    



zClassDocumenter.add_contentr2  c                   s   | j r
d S t | d S r.   )r  r   rG  r  r   r/   r0   rG  >  s    z ClassDocumenter.document_membersrW  c                   s   t  j|||dS )N)r  r   r3  )r   rD  )r8   r  r=  r   r3  r   r/   r0   rD  C  s    zClassDocumenter.generate)F)F)NNFF)#r<   r=   r>   r?   r   rA  rL   r`   rR   rY   rO   r]   r   r   r8  r  r  r   r_  r   r   r  r   r  r   r  r  r  r  r	  r  r  rG  rD  r   r/   r/   r   r0   r    sL   
    R *I2    r  c                   @  s<   e Zd ZdZdZdZejd Zeddddddd	d
Z	dS )ExceptionDocumenterz>
    Specialized ClassDocumenter subclass for exceptions.
    	exceptionr     r   ro   r3   r   c                 C  s   t |tot|tS r.   )r%  r   
issubclassBaseExceptionr   r/   r/   r0   r   ^  s    z'ExceptionDocumenter.can_document_memberN)
r<   r=   r>   r?   r   rA  r  r8  r_  r   r/   r/   r/   r0   r  T  s   
r  c                   @  s   e Zd ZU dZded< dZded< dZded< dZded	< dZded
< dZ	ded< ddddZ
ddddZdddddZdS )DataDocumenterMixinBaseNr   r   r   r   ro   r   r   r   rP   rp   r   r3   r   c                 C  s   dS )z,Check directive header should be suppressed.Fr/   r   r/   r/   r0    should_suppress_directive_headerm  s    z8DataDocumenterMixinBase.should_suppress_directive_headerc                 C  s   dS )z*Check :value: header should be suppressed.Fr/   r   r/   r/   r0   should_suppress_value_headerq  s    z4DataDocumenterMixinBase.should_suppress_value_headerr   r:   r  c                 C  s   dS )z4Update docstring, for example with TypeVar variance.Nr/   r8   r  r/   r/   r0   update_contentu  s    z&DataDocumenterMixinBase.update_content)r<   r=   r>   r   r   r   r   r   rP   r   r  r  r  r/   r/   r/   r0   r  d  s   
r  c                      s:   e Zd ZdZdd fddZddd fd	d
Z  ZS )GenericAliasMixinzt
    Mixin for DataDocumenter and AttributeDocumenter to provide the feature for
    supporting GenericAliases.
    r3   r   c                   s   t | jpt  S r.   )r   isgenericaliasrP   r   r  r   r   r/   r0   r    s    z2GenericAliasMixin.should_suppress_directive_headerr   r:   r  c                   s`   t | jrP| jjdkr&t| jd}n
t| j}|td| d |dd t 	| d S )Nr  r  r  rx   )
r   r	  rP   r   r  r(   r;   r   r   r  )r8   r  r  r   r/   r0   r    s    
z GenericAliasMixin.update_content)r<   r=   r>   r?   r  r  r   r/   r/   r   r0   r  z  s   r  c                      sN   e Zd ZdZdddd fddZdd fdd	Zd
d fddZ  ZS ) UninitializedGlobalVariableMixinz
    Mixin for DataDocumenter to provide the feature for supporting uninitialized
    (type annotation only) global variables.
    Fr3   r   c                   s   zt  jddW S  tk
r } zzlt| jjV t| j| jj}t	|d | jj
}| jd |krt| _|| _W 5 Q R  W W Y VdS W 5 Q R X W n tk
r   Y nX |r tj|jd ddd | j  W Y dS d }~X Y nX d S )	NTr   rw   r   r   r   r   F)r   r   r   r   r   r   r   r   r   r'   r  r   UNINITIALIZED_ATTRrP   r   r   r   r   r   r   )r8   r   r   r   r   r   r/   r0   r     s(    $
z.UninitializedGlobalVariableMixin.import_objectr   c                   s   | j tkpt  S r.   rP   r  r   r  r   r   r/   r0   r    s    
z=UninitializedGlobalVariableMixin.should_suppress_value_headerr  c                   s   | j tkrg S t  S d S r.   rP   r  r   r	  r   r   r/   r0   r	    s    
z(UninitializedGlobalVariableMixin.get_doc)Fr<   r=   r>   r?   r   r  r	  r   r/   r/   r   r0   r
    s   r
  c                      s   e Zd ZU dZdZdZdZeej	Z	de
d< ee	d< ee	d< ed	d
dd	ddddZd	ddddZd-ddd fddZdd fddZd
dd fddZd.dddddZd
dd d!Zd
d"d#d$d%Zd&d fd'd(Zd)dd* fd+d,Z  ZS )/DataDocumenterz9
    Specialized Documenter subclass for data items.
    r  (   ir&   r   r  rj  r   ro   r3   r   c                 C  s   t |to|S r.   )r%  ra  r   r/   r/   r0   r     s    z"DataDocumenter.can_document_memberr:   r   r-   c                 C  sv   t t|}||_zHt| j}|  |j	 D ]$\\}}}|dkr4||kr4|||< q4W n t
k
rp   Y nX dS )9Update __annotations__ to support type_comment and so on.rx   N)ra   r   rq  r   r   rY  r   r  r   r  r   )r8   r   r   r   	classnameattrnamer  r/   r/   r0   update_annotations  s    z!DataDocumenter.update_annotationsFr   c                   s"   t  |}| jr| | j |S r.   )r   r   r   r  r8   r   r   r   r/   r0   r     s    zDataDocumenter.import_objectr   c                   s>   t   rdS |  }tdt|g \}}d|kr:dS dS NTr   z
hide-valueFr   r  r	  r    r   r]  r8   r/  r   r0  r   r/   r0   r    s    
z+DataDocumenter.should_suppress_value_headerr   c                   s  t  | |  }| jjtks(|  r*n| jjrH| d| jj | n| jj	dkrt
| jd | jj}| jd |kr| jjdkrt|| jd d}nt|| jd d}| d| | z:| jjs|  st| jrnt| j}| d| | W n tk
r   Y nX d S 	Nz   :annotation: %sr  rw   r  r  fully-qualified-except-typing
   :type: z   :value: r   r  r   rb   r  r^   r  r   r   r  r'   r   r  r   r  r)   rf   Zno_valuer  r   rP   r#   rX   r8   r   r   r   objreprr   r/   r0   r    s<    
z#DataDocumenter.add_directive_headerr2  c                 C  s   d S r.   r/   r  r/   r/   r0   rG  
  s    zDataDocumenter.document_membersc                 C  s    |  | jp| jdd }|p| jS Nr=   r   r   rP   r   r8   r=  r/   r/   r0   r     s    zDataDocumenter.get_real_modnamer  )r  r-   c                 C  sT   z:t | j}|  d|f}||jkr8t|j| W S W n tk
rN   Y nX d S )Nrx   )r   rY  r   r  r  r  r   )r8   r  r   rh   r/   r/   r0   get_module_comment  s    
z!DataDocumenter.get_module_commentr  c                   s(   |  | jd }|r|gS t  S d S )Nrw   )r$  r   r   r	  )r8   r  r   r/   r0   r	    s    zDataDocumenter.get_docr  r  c                   s*   d | _ |st }| | t | d S r.   r   r   r  r   r  r  r   r/   r0   r  %  s
    
zDataDocumenter.add_content)F)F)r<   r=   r>   r?   r   rA  r8  ra   ru  r   r   r_   r`   r_  r   r  r   r  r  rG  r   r$  r	  r  r   r/   r/   r   r0   r    s$   
 r  c                      s   e Zd ZdZdZdZdZdZeddddddd	d
Z	d*ddd fddZ
dddddZddd fddZd+dddddZddd fddZddddddZd d!d"d#d$d%Zd&d' fd(d)Z  ZS ),MethodDocumenterzQ
    Specialized Documenter subclass for methods (normal, static and class).
    r  2   r   r   ro   r3   r   c                 C  s   t |ot|t S r.   )r   r  r%  ra  r   r/   r/   r0   r   :  s    z$MethodDocumenter.can_document_memberFr   c                   s`   t  |}|s|S | jj| j}|d kr2| j}t|sPtj	|| j| jdr\| j
d | _
|S )Nr   rt   r   )r   r   r   r$  rf   r   rP   r   isclassmethodisstaticmethodrA  )r8   r   r   ru   r   r/   r0   r   ?  s    
zMethodDocumenter.import_objectrS   r   c              
   K  s:  | j jdkr|dd | j jdkr0|dd z| jtjkrN| jtkrNd}nxtj| j| j| j	dr| j
jd	| jd tj| jd| j jd
}n*| j
jd	| jd tj| jd| j jd
}t|f|}W nV tk
r } zttd| j| W Y d S d }~X Y n tk
r   d}Y nX | j jr6|dd}|S )Nr  r  Fr  r  Tz()r(  r  r  +Failed to get a method signature for %s: %srx   r  r  )r   r  rg   r  rP   r   r   r   r*  r   r   rr   r  r  r  r%   r   r   r   r   r   rX   r  r   )r8   r   r   r   r   r/   r/   r0   r   P  s8    


 

zMethodDocumenter.format_argsr:   r   c                   s   t  | |  }| jj| j| j}t	|r>| 
d| t|sRt|r^| 
d| t|rt| 
d| tj|| j| jdr| 
d| | jrd| j| jjkr| 
d| d S )N   :abstractmethod:r     :classmethod:r(  z   :staticmethod:r   r  )r   r  r   r   r$  rf   r   rP   r   isabstractmethodr   r  r  r)  r*  r   r   r   r  )r8   r   r   ru   r   r/   r0   r  s  s    

z%MethodDocumenter.add_directive_headerr2  c                 C  s   d S r.   r/   r  r/   r/   r0   rG    s    z!MethodDocumenter.document_membersc                   s  | j jdkr|dd g }| jrHd| j| jjkrH| j jdkrHd}nd}t j	f |}|
| | jj| jd }t|r|jj D ]R\}}|tkrq| ||}|rt| jd}	| j|	_||	_d g|	_|
|		  q|rtj| j| j| jd	rtj| jd| j jd
}
ntj| jd| j jd
}
t| jdi }| jjd| jD ]r}| |
|}t||| j j}tj| j| j| jd	st|j  }|j!|dd  d}t"|f|}|
| qRd|S )Nr  r  Tr   r  Frw   rx   r(  r  r  r   r  r   )#r   r  rg   r   r   r   r  r  r   r   r;   r   r$  rf   r   Zis_singledispatch_method
dispatcherr   r  rP   r  r&  r   r*  r   r  r  r$   r  r!   r  r  r?  r   r%   )r8   r   r  r  r   methr  r  ZdispatchmethrF  r  r  r  r  r   r/   r0   r     s\    




z!MethodDocumenter.format_signaturer   r  c                 C  sZ   t |j }t|D ]6\}}|j|j}|r|jdkr|j|jd||< q|j|dS r  r  r  r/   r/   r0   r    s    z$MethodDocumenter.merge_default_valuer   r   r  r  c              
   C  s   zt j|| jjd}W nP tk
rR } zttd| j| W Y dS d}~X Y n t	k
rf   Y dS X t
|jdkrzdS dd }t|j }|d jtjkr|d j|d|d< z|j|d|_|W S  ttfk
r   Y dS X |S )	r  r  r+  Nr   c                   S  s   d S r.   r/   r/   r/   r/   r0   r    s    z:MethodDocumenter.annotate_to_first_argument.<locals>.dummyr  r  r  r  r/   r/   r0   r    s,    
 z+MethodDocumenter.annotate_to_first_argumentr  r   c                   s  | j d k	r| j S | jd dkrt| j| j| jj| j| j}|d k	rb|tj	j
ks^| tj	j
krbd }|r| jjjjj}t||dgS g S n| jd dkrt| j| j| jj| j| j}|d k	r|tjj
ks| tjj
krd }| r| jjjjj}t||dgS g S n
t  S d S )Nrw   r   )tabsizer   )r}  r   r"   rP   r   r   r  r   r   r   r?   rD   r   r  r  r  r  r   r   r   r	  r  r   r/   r0   r	    sF    

 

 
zMethodDocumenter.get_doc)F)F)r<   r=   r>   r?   r   r   rA  r8  r_  r   r   r   r  rG  r   r  r  r	  r   r/   r/   r   r0   r&  1  s   #4
r&  c                      sN   e Zd ZdZdddd fddZdd fdd	Zd
d fddZ  ZS )NonDataDescriptorMixina  
    Mixin for AttributeDocumenter to provide the feature for supporting non
    data-descriptors.

    .. note:: This mix-in must be inherited after other mix-ins.  Otherwise, docstring
              and :value: header will be suppressed unexpectedly.
    Fr3   r   c                   s.   t  |}|r$t| js$d| _nd| _|S )NTF)r   r   r   isattributedescriptorrP   non_data_descriptorr  r   r/   r0   r   	  s
    z$NonDataDescriptorMixin.import_objectr   c                   s   t | dd pt  S Nr4  F)r   r   r  r   r   r/   r0   r  	  s    z3NonDataDescriptorMixin.should_suppress_value_headerr  c                   s   t | ddrd S t  S d S r5  )r   r   r	  r   r   r/   r0   r	  	  s    zNonDataDescriptorMixin.get_doc)Fr  r/   r/   r   r0   r2  	  s   	r2  c                      s\   e Zd ZdZddddZdddd fdd	Zdd fd
dZdd fddZ  ZS )
SlotsMixinzX
    Mixin for AttributeDocumenter to provide the feature for supporting __slots__.
    r3   r   c              	   C  sD   z$t | j}t|o"| jd |kW S  ttfk
r>   Y dS X dS )z/Check the subject is an attribute in __slots__.rw   FN)r   getslotsr   r3   r   rX   r   )r8   	__slots__r/   r/   r0   isslotsattribute*	  s
    zSlotsMixin.isslotsattributeFr   c                   s   t  |}|  rt| _|S r.   )r   r   r9  	SLOTSATTRrP   r  r   r/   r0   r   2	  s    zSlotsMixin.import_objectc                   s   | j tkrdS t  S d S r6   )rP   r:  r   r  r   r   r/   r0   r  9	  s    
z'SlotsMixin.should_suppress_value_headerr  c              
     s   | j tkrzDt| j}|rF|| jd rFt|| jd  }|gW S g W S W q tk
r } z(t	j
td| jj|fdd g  W Y S d }~X Y qX n
t  S d S )Nrw   z'Invalid __slots__ found on %s. Ignored.r   r   )rP   r:  r   r7  r   rf   r   r   rX   r   r   r   r>   r   r	  )r8   r8  r   r   r   r/   r0   r	  ?	  s    



 zSlotsMixin.get_doc)F)	r<   r=   r>   r?   r9  r   r  r	  r   r/   r/   r   r0   r6  %	  s
   r6  c                      st   e Zd ZdZe ZdddddZdddddZdddd
 fddZdd fddZ	dd fddZ
  ZS )RuntimeInstanceAttributeMixina1  
    Mixin for AttributeDocumenter to provide the feature for supporting runtime
    instance attributes (that are defined in __init__() methods with doc-comments).

    Example:

        class Foo:
            def __init__(self):
                self.attr = None  #: This is a target of this mix-in.
    r   r3   r  c                 C  s(   |  || jd rdS | |r$dS dS )z8Check the subject is an attribute defined in __init__().rw   TF)get_attribute_commentr   +is_runtime_instance_attribute_not_commented)r8   r   r/   r/   r0   is_runtime_instance_attribute^	  s
    
z;RuntimeInstanceAttributeMixin.is_runtime_instance_attributec              
   C  s   t |D ]x}zZt|d}t|d}t|}|  |rf| jrfd|| jd g}||jkrfW  dS W q
 t	t
fk
r   Y q
X q
dS )zHCheck the subject is an attribute defined in __init__() without comment.r=   r>   r   rw   TN)r   getmror$   r   rY  r  r   r   rS  r   r   )r8   r   r   r   r  r   rh   r/   r/   r0   r=  g	  s    




zIRuntimeInstanceAttributeMixin.is_runtime_instance_attribute_not_commentedFr   c                   s   zt  jddW S  tk
r } zzvt| jj` t| j| jdd d| j| jj	d}|d }| 
|r| j| _|| _W 5 Q R  W W Y VdS W 5 Q R X W n tk
r   Y nX |r tj|jd d	d
d | j  W Y dS d}~X Y nX dS )z`Check the existence of runtime instance attribute after failing to import the
        attribute.Tr  Nrw   r[   r   r  r   r   r   r   F)r   r   r   r   r   r   r   r   r   r   r>  RUNTIME_INSTANCE_ATTRIBUTErP   r   r   r   r   r   r   r8   r   r   r   r   r   r/   r0   r   y	  s*    
$
z+RuntimeInstanceAttributeMixin.import_objectr   c                   s   | j | jkpt  S r.   )rP   r@  r   r  r   r   r/   r0   r  	  s    z:RuntimeInstanceAttributeMixin.should_suppress_value_headerr  c                   s*   | j | jkr| | jrd S t  S d S r.   )rP   r@  r=  r   r   r	  r   r   r/   r0   r	  	  s
    
z%RuntimeInstanceAttributeMixin.get_doc)F)r<   r=   r>   r?   rP   r@  r>  r=  r   r  r	  r   r/   r/   r   r0   r;  P	  s   	r;  c                      s^   e Zd ZdZdddddZdddd fd	d
Zdd fddZdd fddZ  ZS )#UninitializedInstanceAttributeMixinz
    Mixin for AttributeDocumenter to provide the feature for supporting uninitialized
    instance attributes (PEP-526 styled, annotation only attributes).

    Example:

        class Foo:
            attr: int  #: This is a target of this mix-in.
    r   r3   r  c                 C  s   t |d| jj}| jd |kS )z2Check the subject is an annotation only attribute.Nrw   )r'   r   r  r   )r8   r   r   r/   r/   r0   #is_uninitialized_instance_attribute	  s    zGUninitializedInstanceAttributeMixin.is_uninitialized_instance_attributeFr   c                   s   zt  jddW S  tk
r } zzRt| j| jdd d| j| jjd}|d }| |rrt	| _
|| _W W Y LdS W n tk
r   Y nX |r tj|jd d	d
d | j  W Y dS d}~X Y nX dS )eCheck the exisitence of uninitialized instance attribute when failed to import
        the attribute.Tr  Nrw   r[   r   r  r   r   r   r   F)r   r   r   r   r   r   r   r   rC  r  rP   r   r   r   r   r   r   rA  r   r/   r0   r   	  s(    

z1UninitializedInstanceAttributeMixin.import_objectr   c                   s   | j tkpt  S r.   r  r   r   r/   r0   r  	  s    
z@UninitializedInstanceAttributeMixin.should_suppress_value_headerr  c                   s   | j tkrd S t  S d S r.   r  r   r   r/   r0   r	  	  s    
z+UninitializedInstanceAttributeMixin.get_doc)F)	r<   r=   r>   r?   rC  r   r  r	  r   r/   r/   r   r0   rB  	  s
   
rB  c                      s  e Zd ZU dZdZdZeejZde	d< e
ed< eed< dZed	d
dddZed	dd
d	d
dddZd0d
ddddZd	ddddZd1d
d
d fddZddddZd
d fd d!Zddd" fd#d$Zd	dd%d&d'd(Zd)d fd*d+Zd,dd- fd.d/Z  ZS )2AttributeDocumenterz9
    Specialized Documenter subclass for attributes.
    r  <   r&   r   r  rj  r  r   r3   )ru   r-   c                 C  s   t | pt | pt | S r.   )r   r  r  r  )ru   r/   r/   r0   is_function_or_method	  s    z)AttributeDocumenter.is_function_or_methodro   r   c                 C  s8   t |trdS t|rdS t|s4t |ts4dS dS )NFT)r%  ra  r   r3  r  r   r   r/   r/   r0   r   	  s    

z'AttributeDocumenter.can_document_memberFr:   r2  c                 C  s   d S r.   r/   r  r/   r/   r0   rG  	  s    z$AttributeDocumenter.document_membersr  c           
   
   C  s   zt t|}||_t|D ]x}zZt|d}t|d}t|}|  |j	
 D ]$\\}}}	||krV||krV|	||< qVW q  ttfk
r   Y q X q W n ttfk
r   Y nX dS )r  r=   r>   N)ra   r   rq  r   r?  r$   r   rY  r  r   r  r   r   r   )
r8   r   r   r   r   r  r   r  r  r  r/   r/   r0   r  	  s     


z&AttributeDocumenter.update_annotationsr   c                   s8   t  |}t| jr"| jj| _| jr4| | j |S r.   )r   r   r   ZisenumattributerP   rr  r   r  r  r   r/   r0   r   

  s    
z!AttributeDocumenter.import_objectr   c                 C  s    |  | jp| jdd }|p| jS r!  r"  r#  r/   r/   r0   r   
  s    z$AttributeDocumenter.get_real_modnamec                   sB   t   rdS |  }|r>tdt|g \}}d|kr>dS dS r  r  r  r   r/   r0   r  
  s    
z0AttributeDocumenter.should_suppress_value_headerr   c                   s  t  | |  }| jjtks(|  r*n| jjrH| d| jj | n| jj	dkrt
| jd | jj}| jd |kr| jjdkrt|| jd d}nt|| jd d}| d| | z:| jjs|  st| jrnt| j}| d| | W n tk
r   Y nX d S r  r  r  r   r/   r0   r  #
  s8    
z(AttributeDocumenter.add_directive_headerr  )r   r  r-   c              
   C  s   t |D ]x}zZt|d}t|d}t|}|  |rf| jrf||f}||jkrft|j| W   S W q
 t	t
fk
r   Y q
X q
d S )Nr=   r>   )r   r?  r$   r   rY  r  r   r  r  r   r   )r8   r   r  r   r   r  r   rh   r/   r/   r0   r<  B
  s    




z)AttributeDocumenter.get_attribute_commentr  c                   sL   |  | j| jd }|r|gS z| jj}d| j_t  W S || j_X d S )Nrw   F)r<  r   r   r   r  r   r	  )r8   r  origr   r/   r0   r	  S
  s    zAttributeDocumenter.get_docr  r  c                   s.   d | _ |d krt }| | t | d S r.   r%  r  r   r/   r0   r  c
  s
    
zAttributeDocumenter.add_content)F)F)r<   r=   r>   r?   r   rA  ra   ru  r   r   r_   r`   r8  staticmethodrG  r_  r   rG  r  r   r   r  r  r<  r	  r  r   r/   r/   r   r0   rE  	  s(   

	rE  c                      s   e Zd ZdZdZdZejd Zeddddddd	d
Z	dddd fddZ
ddd fddZd dddddZddddZddd fddZdd Z  ZS )!PropertyDocumenterz9
    Specialized Documenter subclass for properties.
    r`  rF  r   r   ro   r3   r   c                 C  sP   t |trHt|rdS t|jdi }||}t |toDt|jS ndS d S )NTr$  F)	r%  r  r   
ispropertyr$   rP   rf   r_  __func__)r   ri   r   r   r   r$  ru   r/   r/   r0   r   x
  s    


z&PropertyDocumenter.can_document_memberFr   c                   sp   t  |}|rft| jsft| jdi }|| jd }t	|t
rbt|jrb|j| _d| _dS dS d| _|S )rD  r$  rw   TF)r   r   r   rK  rP   r$   r   rf   r   r%  r_  rL  r)  )r8   r   r   r$  ru   r   r/   r0   r   
  s    z PropertyDocumenter.import_objectrS   r   c                   s4   |   }|d krd S | jjd|d t jf |S )Nr  F)_get_property_getterr   rr   r  r   r   )r8   r   r  r   r/   r0   r   
  s
    zPropertyDocumenter.format_argsr:   r2  c                 C  s   d S r.   r/   r  r/   r/   r0   rG  
  s    z#PropertyDocumenter.document_membersr   c                 C  s    |  | jp| jdd }|p| jS r!  r"  r#  r/   r/   r0   r   
  s    z#PropertyDocumenter.get_real_modnamer   c              
     s  t  | |  }t| jr,| d| | jr>| d| |  }|d ksZ| j	j
dkr^d S zXtj|| j	jd}|jtjk	r| j	jdkrt|jd}nt|jd}| d| | W nH tk
r } zttd	| j| W 5 d }~X Y n tk
r   Y nX d S )
Nr,  r-  r  r  r  r  r  r  r  )r   r  r   r   r.  rP   r   r)  rM  r   r  r  r  r  r   r  r  r)   r   r   r   r   r   rX   )r8   r   r   r  r  r   r   r   r/   r0   r  
  s8    
 z'PropertyDocumenter.add_directive_headerc                 C  s0   t | jdd r| jjS t | jdd r,| jjS d S )Nfgetr  )r$   rP   rN  r  r   r/   r/   r0   rM  
  s
    z'PropertyDocumenter._get_property_getter)F)F)r<   r=   r>   r?   r   rA  rE  r8  r_  r   r   r   rG  r   r  rM  r   r/   r/   r   r0   rJ  n
  s   

rJ  r   )rr   ru   rt   r   r-   c                 G  sD   | j j D ]&\}}t||r|||f|   S qt||f| S )zAlternative getattr() for types)r   Zautodoc_attrgettrsr  r%  r$   )rr   ru   rt   r   r  r  r/   r/   r0   r   
  s    
r   zdict[str, Any])rr   r-   c              
   C  s  |  t |  t |  t |  t |  t |  t |  t |  t |  t	 | 
dddtddd | 
dddtddd	 | 
d
ddtdd | 
di d | 
ddd | 
dg d | 
dddtdddd | 
dddtddd | 
di d | 
dddtdd | 
ddd | 
ddd | d | d  | d! | d" | d# | d$ | d% | d& tjdd'S )(Nr  r[   TrZ   r\   rB  rT   rU   rV   r  mixedr  Zautodoc_default_optionsr  r   r  r  r  r  Z$autodoc_typehints_description_targetallZ
documentedZdocumented_paramsr  r  r  r   zfully-qualifiedr   r  r  r  r   r)  r  z$sphinx.ext.autodoc.preserve_defaultszsphinx.ext.autodoc.type_commentzsphinx.ext.autodoc.typehints)versionZparallel_read_safe)Zadd_autodocumenterra  r  r  r  r  r  r&  rE  rJ  Zadd_config_valuer   Z	add_eventZsetup_extensionsphinxZ__display_version__)rr   r/   r/   r0   setup
  sL    






















rS  )r   N)NFF){r?   
__future__r   r   r  r   r   r   typingr   r   r   r   r	   r
   r   r   r   Zdocutils.statemachiner   rR  Zsphinx.applicationr   Zsphinx.configr   r   Zsphinx.environmentr   Zsphinx.ext.autodoc.importerr   r   r   Zsphinx.ext.autodoc.mockr   r   r   Zsphinx.localer   r   Zsphinx.pycoder   r   Zsphinx.utilr   Zsphinx.util.docstringsr   r    Zsphinx.util.inspectr!   r"   r#   r$   r%   Zsphinx.util.typingr&   r'   r(   r)   typesr*   Zsphinx.ext.autodoc.directiver+   	getLoggerr<   r   r   __subclasses__MethodDescriptorTyper   VERBOSEr   r,  r1   r2   r@   rI   rN   rP   r  r*  r:  rL   rO   rR   rY   r]   r^   r_   r`   rj   r|   r   ra   r   tupler   ro   r  r   ra  ru  ry  r|  r  r  r  r  r  r  r  r  r  r
  r  r&  r2  r6  r;  rB  rE  rJ  r   rS  r/   r/   r/   r0   <module>   s   ,

	




   *      !N   M( x V+N3   ^	