
    }c                    p   d Z ddlZddl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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! ddl"m#Z#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/m0Z0 ddl1mZm2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z? ddl<m@ZA e	rddlBmCZC  e2jD        eE          ZF eGeGjH                  ZI ejJ        dejK                  ZL ejJ        d          ZMde
de
fdZN G d d          ZO G d d          ZP eO            ZQ eP            ZR eS            ZT eS            ZU eS            ZVde
deeSeeW         f         fdZXde
deeSeeW         f         fd ZYde
deeW         fd!ZZde
deeW         fd"Z[de
deeW         fd#Z\ eS            Z]de
de
fd$Z^de
de_fd%Z`d&eddfd'Zadod(ebd)ebd*eWdefd+Zc	 	 dpd-eWd*eeW         d.e_d/e_def
d0Zd G d1 d2ee          Zf G d3 d4eg          Zheeeh         eeeWe
f                  f         Zi G d5 d6          Zj G d7 d8ej          Zk G d9 d:ej          Zl G d; d<ej          Zm G d= d>          Zn G d? d@en          Zo G dA dBenel          Zp G dC dDep          ZqdEgZrdFgZs G dG dHenel          Zt G dI dJet          Zu G dK dL          Zv G dM dNev          Zw G dO dPev          Zx G dQ dRev          Zy G dS dTev          Zz G dU dVewexeyezel          Z{ G dW dXe{          Z| G dY dZenem          Z} G d[ d\ev          Z~ G d] d^ev          Z G d_ d`ev          Z G da dbev          Z G dc ddewexeeyeee~eoem          Z G de dfeoem          Z G dg dhe          Zdiedje
dkeWdle
de
f
dmZdiedeeWe
f         fdnZdS )qa  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.
    N)	Parameter	Signature)
ModuleType)TYPE_CHECKINGAnyCallableDictIteratorListOptionalSequenceSetTupleTypeTypeVarUnion)
StringList)Sphinx)ENUMConfig)RemovedInSphinx60Warning)BuildEnvironment)get_class_membersget_object_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)DocumenterBridgeaQ  ^ ([\w.]+::)?            # explicit module name
          ([\w.]+\.)?            # module and/or class name(s)
          (\w+)  \s*             # thing name
          (?: \((.*)\)           # optional: arguments
           (?:\s* -> \s* (.*))?  #           return annotation
          )? $                   # and nothing more
          z	^__\S+__$xreturnc                     | S N )r2   s    ;lib/python3.11/site-packages/sphinx/ext/autodoc/__init__.pyidentityr8   :   s    H    c                   2    e Zd ZdZdedefdZdeddfdZdS )_Allz;A special value for :*-members: that matches to any member.itemr3   c                     dS NTr6   selfr<   s     r7   __contains__z_All.__contains__A   s    tr9   Nc                     d S r5   r6   r?   s     r7   appendz_All.appendD       r9   )__name__
__module____qualname____doc__r   boolrA   rC   r6   r9   r7   r;   r;   >   s^        EE     3 4      r9   r;   c                   "    e Zd ZdZdedefdZdS )_EmptyzGA special value for :exclude-members: that never matches to any member.r<   r3   c                     dS NFr6   r?   s     r7   rA   z_Empty.__contains__K   s    ur9   N)rE   rF   rG   rH   r   rI   rA   r6   r9   r7   rK   rK   H   s<        QQ       r9   rK   argc                 b    | dv rt           S | du rdS d |                     d          D             S )z8Used to convert the :members: option to auto directives.r>   FNc                 ^    g | ]*}|                                 |                                 +S r6   strip.0r2   s     r7   
<listcomp>z"members_option.<locals>.<listcomp>]   s-    ???aQWWYY?		???r9   ,)ALLsplitrN   s    r7   members_optionrZ   V   sE    
l @
	 @t??399S>>????r9   c                 V    | dv rt           S d |                     d          D             S )z-Used to convert the :exclude-members: option.r>   c                 ^    h | ]*}|                                 |                                 +S r6   rQ   rS   s     r7   	<setcomp>z)exclude_members_option.<locals>.<setcomp>d   s-    ;;;!;AGGII;;;r9   rV   )EMPTYrX   rY   s    r7   exclude_members_optionr_   `   s2    
l ;;syy~~;;;;r9   c                     | dv rdhS | r,t          d |                     d          D                       S t                      S )zBUsed to convert the :inherited-members: option to auto directives.r>   objectc              3   >   K   | ]}|                                 V  d S r5   rQ   rS   s     r7   	<genexpr>z+inherited_members_option.<locals>.<genexpr>l   s*      5517799555555r9   rV   )setrX   rY   s    r7   inherited_members_optionre   g   sO    
l z	 55ciinn555555uur9   c                 X    | dv rdS | dv r| S t          t          d          | z            )z=Used to convert the :member-order: option to auto directives.r>   N)alphabeticalbysource	groupwisez)invalid value for member-order option: %s
ValueErrorr!   rY   s    r7   member_order_optionrl   q   sE    
l Pt	9	9 P
GHH3NOOOr9   c                 L    | dv r| S t          t          d          | z            )zDUsed to convert the :class-doc-from: option to autoclass directives.)bothclassinitz+invalid value for class-doc-from option: %srj   rY   s    r7   class_doc_from_optionrq   {   s2    
'' R
IJJSPQQQr9   c                     | dv rt           S | S )Nr>   )SUPPRESSrY   s    r7   annotation_optionrt      s    
l 
r9   c                     dS )znUsed to convert flag options to auto directives.  (Instead of
    directives.flag(), which returns None).
    Tr6   rY   s    r7   bool_optionrv      s	     4r9   optionsc                     |                      d          t          u rdS |                     dg           }dD ];}|| v r5| |         t          dfvr$| |         D ]}||vr|                    |           <dS )zWMerge :private-members: and :special-members: options to the
    :members: option.
    membersN>   private-membersspecial-members)getrW   
setdefaultrC   )rw   ry   keymembers       r7   merge_members_optionr      s     {{9$   B//G5 + +'> 	+gcl3+= 	+!#, + +( +NN6***	+ +r9   prepostwhatc                      dt           dt          dt          dt          dt          dt          t                   ddf f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`.
    appwhat_nameobjrw   linesr3   Nc                     r|vrd S |d = r%|r|d         s|                     d           | d = |r|d         r|                    d           d S d S d S )N )poprC   )	r   r   r   r   rw   r   r   r   r   s	         r7   processzcut_lines.<locals>.process   s     	E% 	F$3$K 	 U2Y 		"teff 	U2Y 	LL	 	 	 	r9   )r   strr   r   )r   r   r   r   s   ``` r7   	cut_linesr      sm    V C s  s SWX[S\         Nr9   Fmarker	keepemptyexcludec                     t          j        |           dt          dt          dt          dt          dt          dt
          t                   ddff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   r   r   r   rw   r   r3   Nc                 h   r|vrd S d} }|d d          }t          |          D ][\  }	}
|r|                    |	|z
             |dz  }                    |
          r"| }|r|                    |	|z
             |dz  }\|s	s||d d <   |r|d         r|                    d           d S d S d S )Nr      r   r   )	enumerater   matchrC   )r   r   r   r   rw   r   deleteddelete
orig_linesiliner   r   	marker_rer   s              r7   r   zbetween.<locals>.process   s    	E% 	F111X
 ,, 	! 	!GAt 		!g+&&&1t$$ !# !IIa'k***qLG 	"Y 	"!E!!!H 	U2Y 	LL	 	 	 	r9   )recompiler   r   r   r   )r   r   r   r   r   r   s    ``` @r7   betweenr      s     
6""IV C s  s SWX[S\         * Nr9   c                   4     e Zd ZdZd fdZdedefdZ xZS )Optionsz>A dict/attribute hybrid that returns None on nonexisting keys.r3   c                 ^    t          t                                                                S r5   )r   supercopyr@   	__class__s    r7   r   zOptions.copy   s    uww||~~&&&r9   r   c                 ^    	 | |                     dd                   S # t          $ r Y d S w xY w)Nr    -)replaceKeyError)r@   r   s     r7   __getattr__zOptions.__getattr__   sB    	S#..// 	 	 	44	s    
,,)r3   r   )	rE   rF   rG   rH   r   r   r   r   __classcell__r   s   @r7   r   r      se        HH' ' ' ' ' '         r9   r   c                   f     e Zd ZdZdedededef fdZ	 	 ddeded	ee         d
ededdfdZ	 xZ
S )ObjectMembera}  A member of object.

    This is used for the result of `Documenter.get_object_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.
    r   r   kwargsr3   c                 L    t                                          | ||f          S r5   )r   __new__)clsr   r   r   r   s       r7   r   zObjectMember.__new__  s    wwsT3K000r9   NF	docstringclass_skippedc                 L    || _         || _        || _        || _        || _        d S r5   )rE   ra   r   r   r   )r@   r   r   r   r   r   s         r7   __init__zObjectMember.__init__  s)    "r9   )NNF)rE   rF   rG   rH   r   r   r   r   rI   r   r   r   s   @r7   r   r      s         13 1S 1C 1C 1 1 1 1 1 1 HL5: S s x} .2?C       r9   r   c                      e Zd ZU dZdZdZdZdZdZde	iZ
eed<   ded	ed
edefdZedededededef
d            Zd@ddd	ededdfdZedeeed          f         fd            ZdedededdfdZdededed edeeee         f         f
d!Zdefd"ZdAd#edefd$Zdefd%Zdefd&Z d'edefd(Z!defd)Z"d'edefd*Z#d'edefd+Z$d,eddfd-Z%de&eee                           fd.Z'd/eee                  de(e         fd0Z)defd1Z*d2e&e+         ddfd3Z,d4edeee-f         fd5Z.d6e-d4edeeeeef                  fd7Z/dAd8eddfd9Z0d:eed ef                  d;edeed ef                  fd<Z1	 	 dBd2e&e+         d=ed>ed8eddf
d?Z2dS )C
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.
    ra      r   Fnoindexoption_specr   r   defargsr3   c                 4    t          | j        j        ||g|R  S )z5getattr() override for types such as Zope interfaces.)autodoc_attrgetterenvr   )r@   r   r   r   s       r7   get_attrzDocumenter.get_attr1  s     !$(,TDGDDDDr9   r   
membernameisattrparentc                      t          d          )z?Called to see if a member can be documented by this Documenter.!must be implemented in subclassesNotImplementedErrorr   r   r   r   r   s        r7   can_document_memberzDocumenter.can_document_member5  s     ""EFFFr9   r   	directiver1   indentNc                    || _         |j        j        | _        |j        | _        |j        | _        || _        || _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d S r5   )r   r   configgenoptrw   r   r   modnamemoduleobjpathfullnameargsretannra   object_namer   analyzer)r@   r   r   r   s       r7   r   zDocumenter.__init__;  s    "'m2%.] '	 !"&"&! 	 $(,r9   c                 .    | j         j        j        j        S )z%Returns registered Documenter classes)r   r   registrydocumentersr@   s    r7   r   zDocumenter.documentersT  s     x|$00r9   r   sourcelinenoc                     |                                 r# | j        j        j        | j        |z   |g|R   dS  | j        j        j        d|g|R   dS )z0Append one line of generated reST to the output.r   N)rR   r   resultrC   r   )r@   r   r   r   s       r7   add_linezDocumenter.add_lineY  si    ::<< 	>(DN!(t);VMfMMMMMM(DN!(V=f======r9   r   parentspathbasec                      t          d          )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   r   r@   r   r   r   r   s        r7   resolve_namezDocumenter.resolve_name`  s     ""EFFFr9   c                    	 t                               | j                  }|                                \  }}}}}nI# t          $ r< t
                              t          d          | j        | j        fz  d           Y dS w xY w|7|dd         }|r(|	                    d          
                    d          ng }nd}g }t          | j        j                  5  |                     ||||          \  | _        | _        ddd           n# 1 swxY w Y   | j        sdS || _        || _        | j        pd| j        rdd                    | j                  z   ndz   | _        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.r   T)py_ext_sig_rer   r   groupsAttributeErrorloggerwarningr!   objtyperstriprX   r   r   autodoc_mock_importsr   r   r   r   r   joinr   )	r@   matchedexplicit_modnamer   r   r   r   r   r   s	            r7   
parse_namezDocumenter.parse_namek  s   	#))$)44G9@9I9I6dD$ 	 	 	NN2ABBdlTXT]E^^ )  + + +55	  	&ss+G59Adkk#&&,,S111rGGGG$+233 	Y 	Y)-):):7GTSW)X)X&DL$,	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y | 	5	,,":>,N# 6 666BPts"   9< ABB&DDD
raiseerrorc                 0   t          | j        j                  5  	 t          | j        | j        | j        | j        | j        j                  }|\  | _	        | _
        | _        | _        t          | j                  rt          | j                  | _        	 ddd           dS # t          $ rZ}|r t                               |j        d         dd           | j                                         Y d}~ddd           dS d}~ww xY w# 1 swxY w Y   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.
        
attrgetterwarningiserrorNTr   r   r   r   subtypeF)r   r   r   r   r   r   r   r   autodoc_warningiserrorr   r   r   ra   r   r   ImportErrorr   r   r   r   note_reread)r@   r   retexcs       r7   r   zDocumenter.import_object  s    $+233 	! 	!!#DL$,/3}37;3UW W W KNGT[$*:DK$+&& :",T["9"9DK	! 	! 	! 	! 	! 	! 	! 	!  ! ! ! !NN38A;YNXXXH((*** 555	! 	! 	! 	! 	! 	! 	! 	!!	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s6   DA:B$$
D.AD2DDDDDc                 H    |                      | 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.
        rF   N)r   ra   r   r   s    r7   get_real_modnamezDocumenter.get_real_modname  s#     }}T[,==MMr9   c                     | j         j        rdS t          j        | j                  }|                     |dd          }|r|| j        k    rdS dS )z`Check if *self.object* is really defined in the module given by
        *self.modname*.
        TrF   NF)rw   imported_membersr$   	unpartialra   r   r   )r@   subjectr   s      r7   check_modulezDocumenter.check_module  s]     <( 	4#DK00--t<< 	w$,. 	5tr9   r   c                     dS )z}Format the argument signature of *self.object*.

        Should return None if the object does not have a signature.
        Nr6   r@   r   s     r7   format_argszDocumenter.format_args  s	    
 tr9   c                 D    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   s    r7   format_namezDocumenter.format_name  s     xx%%55r9   c                 j    |r	  | j         di |S # t          $ r Y nw xY w|                                  S Nr6   )r  	TypeErrorr  s     r7   _call_format_argszDocumenter._call_format_args  s\     	't'11&111   
 !!!s    
c           	         | j         d| j         z  }| j        }n	 d} | j        di |}|rAt          j        d|          }|r*|                    d          }|                    d          }nI# t          $ r<}t                              t          d          | j
        |d           d}Y d}~nd}~ww xY w| j        j                            d	| j        | j
        | j        | j        ||          }|r|\  }}|||rd
|z  ndz   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 -> %sr   r6   )r   r   r  r   r   group	Exceptionr   r   r!   r   r   eventsemit_firstresultr   ra   rw   )r@   r   r   r   r   r  r   s          r7   format_signaturezDocumenter.format_signature  s[   
 9 	DI%D[FF-t-7777 2 h'@$GGG 2&}}Q//!(q!1!1   r"OPP#}c	  C C C
 112M26,26+t|TSY[ [  	"!LD& 	&@Hv--bAA2s   AA. .
B482B//B4sigc                     t          | dd          }t          | d| j                  }|                                 }|                                 }d|d|d}t	          |                    d                    D ]9\  }}|                     ||||           |dk    rd	t          |          z  }:| j        j	        r|                     d
|           | j
        r |                     d| j        z  |           dS 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   rX   r   lenrw   r   r   r   )	r@   r   r"  r   r   
sourcenameprefixr   sig_lines	            r7   add_directive_headerzDocumenter.add_directive_header  s$   x..D/4<@@	!!((**

 #)&&)))4$SYYt__55 	+ 	+KAxMMffddHH=$& & &Av +s6{{*< 	6MM.*555< 	G MM*T\9:FFFFF	G 	Gr9   c                     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)   ra   r   r   autodoc_inherit_docstringsr   r   r   statedocumentsettings	tab_widthr&   )r@   r   r4  s      r7   get_doczDocumenter.get_doc  s_     4;t{7];(8: :	 	=,5>HI%i;;<<	r9   
docstringsc           	   #      K   |D ]q}| j         j        r[| j         j                            d| j        | j        | j        | j        |           |r!|d         dk    r|                    d           |E d{V  rdS )z7Let the user process the docstrings before adding them.autodoc-process-docstringr   r   N)r   r   emitr   r   ra   rw   rC   )r@   r6  docstringliness      r7   process_doczDocumenter.process_doc  s      ( 	& 	&Nx| .!!"="&,t{"&,@ @ @ " .nR&8B&> ."))"---%%%%%%%%%	& 	&r9   c                     t          j        | j        dd           r7t          j        | j        dd           r| j        j        d| j        j        }n| j        }| j        r| j        j        d|S d|z  S )NrF   rG   r   z:docstring of zdocstring of %s)r$   r+   ra   rF   rG   r   r   srcname)r@   r   s     r7   r)  zDocumenter.get_sourcename.  s     lDAA 	%$T[.$GG	% #'+"8"8"8$+:R:RSHH}H= 	0+/=+@+@+@((KK$x//r9   more_contentc                     d}|                                  }| j        r| j                                        }| j        rd                    | j        dd                   | j        d         f}||v rWd}t          ||                   g}t          |                     |                    D ]\  }}|                     |||           |rm| 	                                }|nV|s|
                    g            t          |                     |                    D ]\  }}|                     |||           |rCt          |j        |j                  D ]*\  }}	|                     ||	d         |	d                    )dS dS )z>Add content from docstrings, attribute documentation and user.Tr   Nr   Fr   r   )r)  r   find_attr_docsr   r   listr   r;  r   r5  rC   zipdataitems)
r@   r>  r   r+  	attr_docsr~   r6  r   r   srcs
             r7   add_contentzDocumenter.add_content<  s   	 ((**
= 	;4466I| 	;xxSbS 122DL4DE)# ; %I #'y~"6"6!7J#,T-=-=j-I-I#J#J ; ;4dJ::::  	7J 
7! * %%b)))()9)9*)E)EFF 7 7GAtMM$
A6666  	4 !2L4FGG 4 4	cdCFCF3333	4 	44 4r9   want_allc                    t          j        dt                     t          | j        | j        | j        | j                  }|s| j        j	        sdg fS g }| j        j	        D ]\}||v r#|
                    |||         j        f           )t                              t          d          || j        fz  d           ]d|fS | j        j        r dd |                                D             fS dd |                                D             f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).
        zVThe implementation of Documenter.get_object_members() will be removed from Sphinx-6.0.F!missing attribute %s in object %sr   r   c                 *    g | ]}|j         |j        fS r6   )r   valuerT   ms     r7   rU   z1Documenter.get_object_members.<locals>.<listcomp>z  s!    GGGAFAG,GGGr9   c                 8    g | ]}|j         	|j        |j        fS r6   )directly_definedr   rL  rM  s     r7   rU   z1Documenter.get_object_members.<locals>.<listcomp>|  s8     2 2 202AFAG, 2 2 2r9   )warningswarnr   r   ra   r   r   r   rw   ry   rC   rL  r   r   r!   r   inherited_membersvaluesr@   rH  ry   selectedr   s        r7   r   zDocumenter.get_object_membersc  sT    	 12J	L 	L 	L$T[$,t}]] 	2<' !by H, J J7? JOOT74=+>$?@@@@NN2&I#J#J$($-#8$9?H # J J J J(?"\+ 	2GGgnn6F6FGGGGG 2 2gnn6F6F 2 2 2 2 2r9   ry   c           
          dt           dt          dt          f fd}g }d                     j                  } j        r j                                        }ni }|D ]}	 |\  }}	|	t          u rd}
n||f|v rd}
nd}
t          |	 j	         j
        j         j        |          }t          |t                     sd} 	                    |	d	d          }|r 	                    |d
d          }||k    rd}t          |t                    r|j        r|j        }t!          |          \  }}t          |          }d|v rd}nd|v rd}n|                    d          }d}t%          |	          r||f|vrn j        j        r| j        j        v rd}n|r^t*                              |          rD j        j        r5| j        j        v r'|d
k    rd}n |||          rd}n|p j        j        }nd}n||f|v r%|r |r j        j        d}n| j        j        v }nud}nr|r@|r>|s j        j        r- j        j        d}nQ |||          rd}nB| j        j        v }n3d}n0 j        j        t6          u r |||          rd}n|p j        j        }t          |t                    r	|j        rd} j        j        r4 j        j                            d j         ||	|  j                  }|| }nK# tB          $ r>}tD          #                    tI          d           j%        ||	|d           d}Y d}~nd}~ww xY w|r|&                    ||	|
f           |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.
        r   r   r3   c                 L   j         j        pt                      }t          j        j                  roj        j        D ]b}|j        |v r|j        k    r dS | |j        v r dS | 	                    |di           v r dS t          |t                    r|j        |u r dS cdS )NTF__annotations__)rw   rS  rd   r$   isclassra   __mro__rE   __dict__r   
isinstancer   r   )r   r   rS  r   r@   s       r7   is_filtered_inherited_memberz?Documenter.filter_members.<locals>.is_filtered_inherited_member  s     $ > G#%%t{++ 
%;. 	% 	%C|'88 %SDK=O %#tt- %$uus4Er!J!JJ %$uu#C66 %3:;L %$uu5r9   r   TFNr   rH   privatepublicr    autodoc-skip-memberz`autodoc: failed to determine %s.%s (%r) to be documented, the following exception was raised:
%sr   r   )'r   r   rI   r   r   r   r@  INSTANCEATTRr)   r   r   r0  ra   r]  r   r   r'   
startswithr   rw   exclude_membersspecial_member_rer   special_membersundoc_membersprivate_membersry   rW   r   r   r   r  r   r  r   r   r!   r   rC   )r@   ry   rH  r^  r  	namespacerE  r   r   r   r   docr   cls_docmetadatahas_doc	isprivatekeep	skip_userr  s   `                   r7   filter_memberszDocumenter.filter_members  s   	s 	 	 	 	 	 	 	 	"  HHT\**	= 	4466III  l	9 l	9Ch%("
F\) #!FF,	9 #!FF"FVT]DK4Z![*6 6!#s++ C mmFK>> #"mmCDAAG#~ #"c<00 (S] (-C 1# 6 6Xs))( ; $II) ; %II * 5 5c : :I&>> ,Ey*&=Y&N ,El2 )E DL$@@)E !DD %E"3"9"9*"E"E %E4 	%&$,*FF	%%2 I#(DD99*cJJ I#(DD#*#Hdl.HDD$,	9 E $I $<7 N#(DD#-1M#MDD  $ E) E %$,"< %<7 N#(DD99*cJJ N#(DD#-1M#MDD$,3 E88SIIE$  'D$,*Dc<00 !S[ ! D 8< - $ = =-t|Z $,!0 !0I ! -#,}   r #L  M  M#y*fc	  S S S 	  9

J7888
s   "J
K--
L574L00L5all_membersc                 N   
  j          j        j        d<    j        r j        d          j        j        d<   |p j        j        p j        j        t          u }                     |          \  }}g } 	                    ||          D ]\  

 fd j
                                        D             }|s1|                    d             j         dz   d                     j        gz             z   } |d	          j        | j                  }|                    |
f            j        j        p j        j        }	                     ||	          }|D ]%\  }
|                    d
 j        |o
            &d 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                 D    g | ]}|                               |S r6   )r   )rT   r   r   r   mnamer@   s     r7   rU   z/Documenter.document_members.<locals>.<listcomp>.  sH     P P Ps11&%NNPs P P Pr9   c                     | j         S r5   )priority)r   s    r7   <lambda>z-Documenter.document_members.<locals>.<lambda>4  s     r9   r~   ::r   r   T)rr  real_modnamer  N)r   r   	temp_datar   rw   rS  ry   rW   r   rq  r   rT  sortr   r   r   rC   member_orderr   autodoc_member_ordersort_membersgenerater}  )r@   rr  rH  members_check_modulery   memberdocumentersclasses
full_mname
documenterr  r   r   rw  s   `         @@@r7   document_memberszDocumenter.document_members  s    04|+,< 	B26,q/DH/ 0L20L(C/ 	 )-(?(?(I(I%g <>'+':':7H'M'M 	; 	;#UFFP P P P P P Pd&6&=&=&?&? P P PG LL55L666 ,sxxw8N/O/OOJ$T^ZMMJ$$j&%9::::|0TDK4T --.?NN"3 	B 	BJ t/@1@&j   B B B B
 04+,.2?+++r9   r   orderc                     |dk    r|                     d            nn|dk    rQ| j        rI| j        j        dt          t          t
          f         dt          ffd}|                     |           nn|                     d            |S )	zSort the given member list.ri   c                 6    | d         j         | d         j        fS Nr   )r  r   es    r7   rz  z)Documenter.sort_members.<locals>.<lambda>L  s    AaD,=qty+I r9   r{  rh   entryr3   c                     | d         j                             d          d         }                    |t                              S Nr   r|  r   )r   rX   r|   r*  )r  r   tagorders     r7   keyfuncz(Documenter.sort_members.<locals>.keyfuncR  s;    $Qx}22488;H#<<#h--@@@r9   c                     | d         j         S r  r   r  s    r7   rz  z)Documenter.sort_members.<locals>.<lambda>\      1Q49 r9   )r  r   r  r   r   rI   int)r@   r   r  r  r  s       @r7   r  zDocumenter.sort_membersG  s     K 	6!I!IJJJJj  	6} =1A5T)9#: As A A A A A A   W ----
 !4!4555r9   r}  r  c                 T   |                                  s3t                              t          d          | j        z  d           dS |                                 sdS |                                 }|p|| _        	 t          j	        | j                  | _
        | j
                                         | j        j                            | j
        j                   n# t           $ rv}t                              d|           d| _
        t%          | j        d          r5| j        j        r)| j        j                            | j        j                   Y d}~nd}~ww xY w| j        |k    rJ	 t          j	        |          }| j        j                            |j                   n# t           $ r Y nw xY wt+          |                                 pg g           }t/          | j                  r1|s/t                              t          d          | j        d           |r|                                 sdS |                                 }	|                     d|	           	 |                                 }
nH# t:          $ r;}t                              t          d	          | j        |d           Y d}~dS d}~ww xY w|                     |
           |                     d|	           | xj         | j!        z  c_         | "                    |           | #                    |           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: %rr   z+error while formatting signature for %s: %s)$r   r   r   r!   r   r   r	  r}  r"   
for_moduler   r@  r   record_dependenciesaddr=  r#   debughasattrr   r  sumr5  r   ra   r  r)  r   r  r  r   r.  r   content_indentrG  r  )r@   r>  r}  r  rr  guess_modnamer  r   r6  r+  r   s              r7   r  zDocumenter.generate`  sk       	NN I J J 	 !*	  + + +
 F !!## 	F --//!-!>	J*5d6GHHDM M((*** N.224=3HIIII  	M 	M 	MLL?EEE DMt{J// MDK4H M266t{7KLLL	M - 	)4]CC266x7GHHHH    !$DLLNN$8b" = =
$+ 	6z 	6NN2?@@99  6 6 6  	$$&& ((**

 	b*%%%	''))CC 	 	 	NN2KLL=#I  ? ? ?FFFFF	 	!!#&&&b*%%% 	t** 	&&& 	k*****sC   <7C 
E'A,EE,8F% %
F21F2!I6 6
J; 0J66J;)r   FNNFF)3rE   rF   rG   rH   r   r  ry  r  titles_allowedrv   r   r-   rY  r   r   r   classmethodrI   r   r   propertyr	   r   r   r  r   r   r   r   r   r   r	  r  r  r  r  r  r.  r   r5  r
   r;  r)  r   rG  ObjectMembersr   rq  r  r  r  r6   r9   r7   r   r     s           GNHLN 	;K   EC Es Ec Ec E E E E G G# Gt GUX G!%G G G [G
- -"4 -C - -VZ - - - -2 1T#tL'9"9: 1 1 1 X1>S ># > > > > > >	GC 	G# 	GS 	G 	GT#Y/	G 	G 	G 	G#D # # # #J! ! ! ! ! ! !.N# N N N Nd    C C    	6S 	6 	6 	6 	6	"# 	"# 	" 	" 	" 	"! ! ! ! ! !FG G G G G G,$tCy/2    &d49o &(3- & & & &0 0 0 0 0%4(< %4 %4 %4 %4 %4N24 2E$:M4N 2 2 2 28Ym Yt Y sC~!67Y Y Y Yv+3 +3D +3T +3 +3 +3 +3ZU<3E-F(G $(|T/A)B$C   2 W[AF[+ [+Xj%9 [+PS [+#[+:>[+KO[+ [+ [+ [+ [+ [+r9   r   c                       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eed<   dedd	f fd
Zedededededef
d            Zdededededeeee         f         f
dZdef fdZd"dedef fdZdedd	fdZdeeef         fdZdedeeef         fdZ deedef                  d edeedef                  f fd!Z! xZ"S )#ModuleDocumenterz6
    Specialized Documenter subclass for modules.
    r   r   T)ry   undoc-membersr   inherited-membersshow-inheritancesynopsisplatform
deprecatedmember-orderexclude-membersrz   r{   zimported-memberszignore-module-allno-valuer   r   r3   Nc                 j     t                      j        |  t          | j                   d | _        d S r5   )r   r   r   rw   __all__r@   r   r   s     r7   r   zModuleDocumenter.__init__  s2    $T\***04r9   r   r   r   r   c                     dS rM   r6   r   s        r7   r   z$ModuleDocumenter.can_document_member  s	     ur9   r   r   r   r   c                 j    |)t                               t          d          d           |pd|z   g fS )Nz*"::" in automodule name doesn't make senser   r   r   )r   r   r!   r   s        r7   r   zModuleDocumenter.resolve_name  sG     	+NN2KLL )  + + +
d"B&&r9   c                     t                                                      }| j        s| j        r1t                              t          d          | j        z  d           |S )Nz@signature arguments or return annotation given for automodule %sr   r   )r   r   r   r   r   r   r!   r   )r@   r  r   s     r7   r   zModuleDocumenter.parse_name  sl    gg  ""9 	+ 	+NN2 8 9 9;?=I )  + + + 
r9   Fr   c                 L   t                                          |          }	 | j        j        st	          j        | j                  | _        nU# t          $ rH}t          
                    t          d          |j        d         | j        fz  d           Y d }~nd }~ww xY w|S )NzN__all__ should be a list of strings, not %r (in module %s) -- ignoring __all__r   r   r   )r   r   rw   ignore_module_allr$   getallra   r  rk   r   r   r!   r   r   )r@   r   r  r  r   s       r7   r   zModuleDocumenter.import_object  s    gg##J//	I<1 ;&~dk:: 	I 	I 	INN2 C D DHQK78>G  I I I I I I I I	I 
s   *A 
B!>BB!r   c                 h   t                               | |           |                                 }| j        j        r#|                     d| j        j        z   |           | j        j        r#|                     d| j        j        z   |           | j        j        r|                     d|           d S d S )Nz   :synopsis: z   :platform: z   :deprecated:)r   r.  r)  rw   r  r   r  r  )r@   r   r+  s      r7   r.  z%ModuleDocumenter.add_directive_header  s    ''c222((**
 <  	PMM*T\-BBJOOO<  	PMM*T\-BBJOOO<" 	9MM+Z88888	9 	9r9   c                 8   | j         r| j         j        }ni }i }t          | j                  D ]}	 t	          | j        |d          }t          |          rt          |          }|                    d|fg           }t          ||d	                    |                    ||<   x# t          $ r Y w xY wt          j        | j                  D ]K}||vrE|                    d|fg           }t          |t          d	                    |                    ||<   L|S )zGet members of target module.Nr   r&  )r   )r   rE  dirra   r+   r   r   r|   r   r   r   r$   getannotationsrb  )r@   rE  ry   r   rL  r   s         r7   get_module_membersz#ModuleDocumenter.get_module_members  sF   = 	/III+-$$ 	 	D$T[$==%== .&u--E%MM2t*b99	 ,T5DIIiDXDX Y Y Y!    *4;77 	M 	MD7" M%MM2t*b99	 ,T<7;yy7K7K!M !M !M s   A4B%%
B21B2rH  c           	         |                                  }|ry| j        #dt          |                                          fS |                                D ]}|j        | j        vrd|_        dt          |                                          fS | j        j        pg }g }|D ]d}||v r|                    ||                    "t          
                    t          d          t          | j        dd          |fz  d           ed|fS )NTFzHmissing attribute mentioned in :members: option: module %s, attribute %srE   z???r   r   )r  r  rA  rT  rE   r   rw   ry   rC   r   r   r!   r+   ra   )r@   rH  ry   r   
memberlistr  r   s          r7   r   z#ModuleDocumenter.get_object_members!  s=   ))++ 	| 	5 T'.."2"23333%nn.. . .Fdl: .)-d7>>#3#34444-3JC" 3 37? 3JJwt}----NN2 '@ $A $A$0j%$P$PRV#W$X )2 # 3 3 3 3 #:r9   r   r   r  c                     |dk    r\ j         rU|                    d            dt          t          t          f         dt
          f fd}|                    |           |S t                                          ||          S )Nrh   c                     | d         j         S r  r  r  s    r7   rz  z/ModuleDocumenter.sort_members.<locals>.<lambda>?  r  r9   r{  r  r3   c                     | d         j                             d          d         }j        r#|j        v rj                            |          S t	          j                  S r  )r   rX   r  indexr*  )r  r   r@   s     r7   r  z.ModuleDocumenter.sort_members.<locals>.keyfuncB  s_    Qx}**4003< -DDL$8 -<--d333t|,,,r9   )r  r  r   r   rI   r  r   r  )r@   r   r  r  r   s   `   r7   r  zModuleDocumenter.sort_members;  s    J 	<4< 	<!4!4555-uZ%56 -3 - - - - - - )))77''U;;;r9   r  )#rE   rF   rG   rH   r   r  r  rZ   rv   re   r8   rl   r_   r   r-   rY  r   r   r  r   rI   r   r   r   r   r   r   r.  r	   r   r  r  r   r  r   r   s   @r7   r  r    sU          GNN "K5M'XK+@V)n'k	 	K 	 	 	5c 5d 5 5 5 5 5 5
  # t UX !%   [
'C '# 'S ' 'T#Y/' ' ' 'D              9 9 9 9 9 9Dl):$;    64 E$:M4N    4<U<3E-F(G <<$(|T/A)B$C< < < < < < < < < <r9   r  c                   J    e Zd ZdZdededededeeee         f         f
dZdS )	ModuleLevelDocumenterzo
    Specialized Documenter subclass for objects on module level (functions,
    classes, data/constants).
    r   r   r   r   r3   c                     |X|r|                     d          }n@| j        j                            d          }|s| j        j                            d          }|||gz   fS )Nr   rt  	py:module)r   r   r~  r|   ref_contextr   s        r7   r   z"ModuleLevelDocumenter.resolve_nameT  su     		D D++c** (,001ABB D"h266{CCG4&(((r9   N	rE   rF   rG   rH   r   r   r   r   r   r6   r9   r7   r  r  O  sc         )C )# )S ) )T#Y/) ) ) ) ) )r9   r  c                   J    e Zd ZdZdededededeeee         f         f
dZdS )	ClassLevelDocumenterz_
    Specialized Documenter subclass for objects on class level (methods,
    attributes).
    r   r   r   r   r3   c                    ||r|                     d          }nHd }| j        j                            d          }|| j        j                            d          }|d g fS |                    d          \  }}}|g}|s| j        j                            d          }|s| j        j                            d          }|||gz   fS )Nr   ru  zpy:classrt  r  )r   r   r~  r|   r  
rpartition)r@   r   r   r   r   mod_clssepr   s           r7   r   z!ClassLevelDocumenter.resolve_namei  s     	@ $++c** (,00AA C"h266zBBG $8O ' 2 23 7 7GS#eG C(,001ABB @(.22;??4&(((r9   Nr  r6   r9   r7   r  r  d  sc         )C )# )S ) )T#Y/) ) ) ) ) )r9   r  c                        e Zd ZU dZdZeee                  ed<   dZee         ed<   de	eef         fdZ
deee                  f fdZdedef fd	Z xZS )
DocstringSignatureMixinz
    Mixin for FunctionDocumenter and MethodDocumenter to provide the
    feature of reading the signature from the docstring.
    N_new_docstrings_signaturesr3   c           	         | j         d         g}t          | t                    rS|                    d           t	          | j        d          r)|                    d | j        j        D                        |                                 }|dS |d d          | _	        g | _
        d }t          |          D ]\  }}t          |          D ]\  }}|s n|                    d          r'|                    d                                          }t                              |          }|s n|                                \  }	}
}}}||vr ny| j        j        j        j        j        }t-          d                    ||dz   d                    |          | j	        |<   |||f}| j
                            d	|d
|           |r n|S )Nr   r   r[  c              3   $   K   | ]}|j         V  d S r5   )rE   rT   r   s     r7   rc   z:DocstringSignatureMixin._find_signature.<locals>.<genexpr>  s$      "O"OC3<"O"O"O"O"O"Or9   )NN\r&  r   (z) -> )r   r]  ClassDocumenterrC   r  ra   extendr[  r5  r  r  r   endswithr   r   r   r   r   r1  r2  r3  r4  r&   r   )r@   valid_namesr6  r   r   doclinesjr   r   exmodr   r   r   r   r4  s                  r7   _find_signaturez'DocstringSignatureMixin._find_signature  s   |B'(dO,, 	Pz***t{I.. P"""O"O4;;N"O"O"OOOO\\^^
 	:)!!!}$Z00 !	 !	KAx$X.. K K4 E==&& 6;;t,,3355D &++D11 E27,,../tT4 {* E !N09BL	*;DIIhqSTuvvFV<W<W<E+G +G$Q'  K!6\FF $+++DDD&&,IJJJJ  r9   c                 `    | j         | j         S t                                                      S r5   )r  r   r5  r   s    r7   r5  zDocstringSignatureMixin.get_doc  s+     	(''ww   r9   r   c                     | j         1| j        j        r%|                                 }||\  | _         | _         t                      j        di |}| j        rd                    |g| j        z             S |S )Nr&  r6   )	r   r   autodoc_docstring_signaturer  r   r   r  r  r   )r@   r   r   r   r   s       r7   r  z(DocstringSignatureMixin.format_signature  s    9 	0!H 	0 ))++F 0)/&	4;&egg&0000 	99cUT%55666Jr9   )rE   rF   rG   rH   r  r   r   rY  r  r   r  r5  r   r  r   r   s   @r7   r  r    s           (,OT$s)_+++!Kc!!!1sCx 1 1 1 1f!d3i ! ! ! ! ! !
           r9   r  c                   ,     e Zd ZdZdedef fdZ xZS )DocstringStripSignatureMixinzz
    Mixin for AttributeDocumenter to provide the
    feature of stripping any function signature from the docstring.
    r   r3   c                     | j         ,| j        j        r |                                 }|
|\  }| _         t                      j        di |S r  )r   r   r  r  r   r   r  )r@   r   r   _argsr   s       r7   r  z-DocstringStripSignatureMixin.format_signature  s_    9 	,!H 	, ))++F , &,"t{'uww'11&111r9   )rE   rF   rG   rH   r   r   r  r   r   s   @r7   r  r    sU         
2 
2 
2 
2 
2 
2 
2 
2 
2 
2 
2 
2r9   r  c                        e Zd ZdZdZdZededede	dede	f
d	            Z
d
edefdZdde	ddfdZdeddf fdZd
edef fdZdededefdZdededee         fdZ xZS )FunctionDocumenterz8
    Specialized Documenter subclass for functions.
    function   r   r   r   r   r3   c                     t          j        |          p<t          j        |          p(t          j        |          ot	          |t
                    S r5   )r$   
isfunction	isbuiltin	isroutiner]  r  r   s        r7   r   z&FunctionDocumenter.can_document_member  sO     "6** Ug.?.G.G U"6**Sz&BR/S/S	Vr9   r   c                 8   | j         j        dv r|                    dd           | j         j        dk    r|                    dd           	 | j        j                            d| j        d           t          j	        | j        | j         j
                  }t          |fi |}nS# t          $ r9}t                              t          d	          | j        |           Y d }~d S d }~wt"          $ r d
}Y nw xY w| 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: %sr   r  \\)r   autodoc_typehintsr}   autodoc_typehints_formatr   r   r9  ra   r$   	signatureautodoc_type_aliasesr,   r  r   r   r!   r   rk   strip_signature_backslashr   )r@   r   r   r   r  s        r7   r  zFunctionDocumenter.format_args  sB   ;(,CC 	8/777;/7: 	=5t<<<		HL@$+uUUU#DKdk>^___C&s55f55DD 	 	 	NN2MNN=#/ / /44444 	 	 	DDD	 ;0 	.<<f--Ds   AB% %
C5/.C##C54C5Frr  Nc                     d S r5   r6   r@   rr  s     r7   r  z#FunctionDocumenter.document_members	  rD   r9   r   c                    |                                  }t                                          |           t          j        | j                  st          j        | j                  r|                     d|           d S d S )N
   :async:)r)  r   r.  r$   iscoroutinefunctionra   isasyncgenfunctionr   )r@   r   r+  r   s      r7   r.  z'FunctionDocumenter.add_directive_header  s{    ((**
$$S)))&t{33 	4w7QRVR]7^7^ 	4MM,
33333	4 	4r9   c                 F   | j         j        dk    r|                    dd           g }| j        r9d                    | j                  | j        j        v r| j         j        dk    rd}n0d} t                      j	        di |}|
                    |           t          j        | j                  r| j        j                                        D ]r\  }}|t          u r|                     ||          }|rKt#          | j        d          }||_        d g|_        |
                    |	                                           s|rt          j        | j        | j         j                  }	t+          | j        d	i           }
| j        j                            d                    | j                            D ]U}|                     |	|          }t1          ||
| j         j                  }t3          |fi |}|
                    |           Vd
                    |          S )Nr  r  Tr   r  Fr   r  __globals__r&  r6   )r   r  r}   r   r   r   	overloadsr   r   r  rC   r$   is_singledispatch_functionra   r   rD  annotate_to_first_argumentr  r   r  r  r+   r|   merge_default_valuer(   r,   )r@   r   sigs
overloadedr   typfuncdispatchfuncr  actualr  overloadr   s               r7   r  z#FunctionDocumenter.format_signature  s4   ;/7: 	=5t<<<M 	&&$-*AA	-7	 JJJ*%''*44V44CKK-dk:: 	C![17799 	C 	C	T&= C#'#B#B4#M#ML# C%7%K%K
,8
).2V
*J$?$?$A$ABBB 
	!&t{48K4TV V VF&t{M2FFK M3778N8NOO ! !33FHEE-h.2k.NP P *(==f==C    yyr9   r  r  c                 8   t          |j                                                  }t          |          D ]O\  }}|j                            |j                  }|r)|j        dk    r|                    |j                  ||<   P|                    |          S zGMerge default values of actual implementation to the overload variants.z...)default
parametersrA  r  rT  r   r|   r   r  r   r@   r  r  r  r   paramactual_params          r7   r  z&FunctionDocumenter.merge_default_value<      (-446677
!*-- 	L 	LHAu!,00<<L L 6 L %l6J K K
1:666r9   r  r  c                 P   	 t          j        || j        j                  }nR# t          $ r9}t
                              t          d          | j        |           Y d}~dS d}~wt          $ r Y dS w xY wt          |j                  dk    rdS d }t          |j                                                  }|d         j        t          j        u rU|d                             |          |d<   	 |                    |          |_        |S # t&          t          f$ r Y dS w xY w|S )?Annotate type hint to the first argument of function if needed.r  r  Nr   c                      d S r5   r6   r6   r9   r7   dummyz<FunctionDocumenter.annotate_to_first_argument.<locals>.dummyT      Dr9   
annotationr  r$   r  r   r  r  r   r   r!   r   rk   r*  r  rA  rT  r(  r   emptyr   __signature__r   r@   r  r  r   r  r%  paramss          r7   r  z-FunctionDocumenter.annotate_to_first_argumentF  s\   	#Dt{7WXXXCC 	 	 	NN2MNN=#/ / /44444 	 	 	44	 s~!# 	4	 	 	 cn++--..!99?2 	q	))S)99F1I&)kkVk&D&D#"I.   tt ,    # 
A2.A!!A21A21D D#"D#r  )rE   rF   rG   rH   r   r  r  r   r   rI   r   r  r  r.  r  r   r  r   r   r   r  r   r   s   @r7   r  r    s{         GLV V# Vt VUX V!%V V V [VC C    , D T    4 4 4 4 4 4 4 4' ' ' ' ' ' ' 'R7) 7y 7Y 7 7 7 7x d xPXGY        r9   r  c                   4     e Zd ZdZdZdZdedef fdZ xZS )DecoratorDocumenterzB
    Specialized Documenter subclass for decorator functions.
    	decoratorr   r   r3   c                 F     t                      j        di |}d|v r|S d S )NrV   r6   )r   r  )r@   r   r   r   s      r7   r  zDecoratorDocumenter.format_argsm  s5    "uww",,V,,$; 	K4r9   )	rE   rF   rG   rH   r   ry  r   r  r   r   s   @r7   r0  r0  d  sc          G HC C          r9   r0  zenum.EnumMeta.__call__ztyping.Generic.__new__c                   ^    e Zd ZU dZdZdZeeeeee	e
eeed
Zeed<   dZeed<   dZeed<   d	ed
df fdZededededed
ef
d            Zd(ded
ef fdZd
eee         ee         ee         f         fdZded
efdZd
eeef         f fdZded
ef fdZd
ee         fdZ d
ee         fdZ!ded
df fdZ"ded
eee#f         fdZ$d
eeee                           fdZ%d
eee                  fd Z&d!ee'         d
df fd"Z(d(d#ed
df fd$Z)	 	 d)d!ee'         d%ed&ed#ed
df
 fd'Z* xZ+S )*r  z6
    Specialized Documenter subclass for classes.
    ro      )
ry   r  r   r  r  r  r  rz   r{   class-doc-fromr   N_signature_class_signature_method_namer   r3   c                 f    t                      j        |  | j        j        dk    ru| j                                        | _        | j        j        ddg| j        d<   n>| j        j                            d           | j        j                            d           t          | j                   d S )N	separatedr   r   r{   )	r   r   r   autodoc_class_signaturerw   r   rf  rC   r   r  s     r7   r   zClassDocumenter.__init__  s    $;.+= 	@<,,..DL |+ @3<j2I.//,33I>>>,33J???T\*****r9   r   r   r   r   c                 ,    t          |t                    S r5   )r]  r   r   s        r7   r   z#ClassDocumenter.can_document_member  s     &$'''r9   Fr   c                     t                                          |          }|r=t          | j        d          r!| j        d         | j        j        k    | _        nd| _        |S )NrE   r   T)r   r   r  ra   r   rE   doc_as_attrr@   r   r  r   s      r7   r   zClassDocumenter.import_object  sa    gg##J//  	(t{J// ($(L$48L$L  #' 
r9   c                     dt           dt          dt           f fd}t           j        d          r.t	           j        j        t                    rd d  j        j        fS  |t           j                  d          }|d                    |          t          v rd }|j j
        j                            d|d	           	 t          j        |d	 j        j        
          }t           j                  d|fS # t"          $ r Y nw xY w | j        d          }|d                    |          t$          v rd }|] j
        j                            d|d	           	 t          j        |d	 j        j        
          } j        d|fS # t"          $ r Y nw xY w | j        d          }|] j
        j                            d|d	           	 t          j        |d	 j        j        
          } j        d|fS # t"          $ r Y nw xY w j
        j                            d j        d           	 t          j         j        d j        j        
          }d d |fS # t"          $ r Y nw xY wdS )Nr   attrr3   c                     t          j        | |          rdS                     | |d          }t          j        |          st          j        |          sdS |S )zF Get the `attr` function or method from `obj`, if it is user-defined. N)r$   is_builtin_class_methodr   ismethodr  )r   r@  r@   s     r7   #get_user_defined_function_or_methodzKClassDocumenter._get_signature.<locals>.get_user_defined_function_or_method  sa    .sD99 t==dD11D$T** g.@.F.F tKr9   r+  __call__z{0.__module__}.{0.__qualname__}r  Tbound_methodr  r   r   F)NNN)r   r   r  ra   r]  r+  r   r   format_METACLASS_CALL_BLACKLISTr   r   r9  r$   r  r   r  rk   _CLASS_NEW_BLACKLIST)r@   rD  callr   newrp   s   `     r7   _get_signaturezClassDocumenter._get_signature  s   	S 	 	 	 	 	 	 	 	 DK11 	94;4i@@	9t{888 3243D3DjQQ 	077==AZZ  	HL@$MMM'459[5UW W WDK((*c99    21$+yII 	077<<@TT  	HL@#tLLL'$59[5UW W W{Is22    324;
KK 	HL@$MMM'459[5UW W W{J33    	<dk5QQQ	#DKe151QS S SCs?" 	 	 	D	
  sH   7C: :
DD*F
 

FF*G: :
HH1*I 
I)(I)r   c                    | j         j        dv r|                    dd           | j         j        dk    r|                    dd           	 |                                 \  | _        | _        }nF# t          $ r9}t          	                    t          d          | j        |           Y d }~d S d }~ww xY w|d S t          |fddi|S )	Nr  r  Fr  r  Tz0Failed to get a constructor signature for %s: %sshow_return_annotation)r   r   r}   r  rM  r6  r7  r  r   r   r!   r   r,   )r@   r   r   r  s       r7   r  zClassDocumenter.format_args  s    ;(,CC 	8/777;/7: 	=5t<<<	FJFYFYF[F[CD!4#> 	 	 	NN2PQQ=#/ / /44444		  	4"3OOuOOOOs   "A/ /
B29.B--B2c                     t                                                      }|
|d         d f}t          | j                  D ],\  }}|                    d          r|d d         | j        |<   -|S )Nr   z -> Nonei)r   r  r   r  r  )r@   r   r   r   r   s       r7   r  zClassDocumenter._find_signature  s}    ((** 	'Qi&F 011 	/ 	/FAs||J'' / '*#2#h #r9   c                    | j         rdS | j        j        dk    rdS | j        j        dk    r|                    dd           t                                                      }g }|                                 }|r| j        j        dk    rt          | j
        | j        d           }t          |di           }|D ]}t          ||| j        j                  }t          |j                                                  }|                    |dd          t$          j        	          }t)          |fi |}|                    |           n|                    |           d
                    |          S )Nr   r9  r  r  Tr  r  r   )r  return_annotationr&  )r=  r   r:  r  r}   r   r  get_overloaded_signaturesr   r+   r6  r7  r(   r  rA  r  rT  r   r   r*  r,   rC   r   )
r@   r   r   r  r  methodr  r  r  r   s
            r7   r  z ClassDocumenter.format_signature#  s    	2;.+= 	2;/7: 	=5t<<<gg&&((2244	 	6&@ 	!$"79TVZ[[F&v}bAAK% ! !-h.2k.NP P "("5"<"<">">??
#++z!""~>Go , O O)(==f==C    ! KKyyr9   c                 b   | j         r| j        r| j         j        D ]}	 t          j        |j                  }|                                 d                    |j        | j        g          }||j	        v r|j	        
                    |          c S ||j        v rg c S # t          $ r Y w xY wg S )Nr   )r6  r7  r[  r"   r  rF   analyzer   rG   r  r|   r  r#   )r@   r   r   qualnames       r7   rS  z)ClassDocumenter.get_overloaded_signaturesC  s      	T%@ 	,4  
-8HHH$$&&&"xx)94;V(WXXH8#55 "'155h?????!X%66 "!			" #   D 	s   A0B
B
B,+B,c                     t          | j        d| j                  }t          | j        dd           }|t          | j        dd           }|rd|v rd }|r|rd                    ||g          S d S )NrF   rG   rE   z<locals>r   )r+   ra   r   r   )r@   __modname__rG   s      r7   get_canonical_fullnamez&ClassDocumenter.get_canonical_fullnameT  s    "4;dlKK#DKFF 	G'ZFFL 	 J,6 	 L 	< 	88[,78884r9   r   c                 D   |                                  }| j        rd| _        t                                          |           | j        r<d                    | j                  | j        j        v r| 	                    d|           | 
                                }| j        s&|r$| j        |k    r| 	                    d|z  |           | j        sM| j        j        rBt          j        | j                  rt#          | j        j                  }nJt'          | j        d          r3t)          | j        j                  rt#          | j        j                  }ng }| j        j                            d| j        | j        | j        |           | j        j        dk    rd |D             }nd	 |D             }|                                  }| 	                    d
|           | 	                    dt7          d          d                    |          z  z   |           d S d S d S )N	attributer   
   :final:z   :canonical: %s	__bases__autodoc-process-basesr  c                 .    g | ]}t          |d           S )smartr/   r  s     r7   rU   z8ClassDocumenter.add_directive_header.<locals>.<listcomp>  s"    GGG#W 5 5GGGr9   c                 ,    g | ]}t          |          S r6   rb  r  s     r7   rU   z8ClassDocumenter.add_directive_header.<locals>.<listcomp>  s    >>>>>>r9   r   r   z	Bases: %s, )r)  r=  r$  r   r.  r   r   r   finalsr   rZ  r   rw   show_inheritancer$   getorigbasesra   rA  __orig_bases__r  r*  r^  r   r  r9  r   r  r    )r@   r   r+  canonical_fullnamebasesbase_classesr   s         r7   r.  z$ClassDocumenter.add_directive_headerb  s5   ((**
 	-!,D$$S)))= 	4SXXdl33t}7KK 	4MM,
333!88:: 	P$6 	P4=L^;^ 	PMM-0BBJOOO  	XDL$A 	X#DK00  T[788k22 s4;;P7Q7Q T[233HO  !8!%T\5R R R {3w> ?GGGGG>>>>>,,..JMM"j)))MM%!K..499\3J3J"JJJWWWWW+	X 	X 	X 	Xr9   rH  c                     t           j         j         j         j        j                  }|sx j        j        sdg fS g } j        j        D ]U}||v r|                    ||                    "t          
                    t          d          | j        fz  d           Vd|fS  j        j        r#dt          |                                          fS d fd|                                D             fS )NFrJ  r   r   c                 4    g | ]}|j         j        k    |S r6   )r   ra   )rT   rN  r@   s     r7   rU   z6ClassDocumenter.get_object_members.<locals>.<listcomp>  s'    RRR!(dk:QR1RRRr9   )r   ra   r   r   r   r0  rw   ry   rC   r   r   r!   r   rS  rA  rT  rU  s   `    r7   r   z"ClassDocumenter.get_object_members  s)   #DKt}$(K$JL L 	S<' !by H, J J7? JOOGDM2222NN2&I#J#J$($-#8$9?H # J J J J(?"\+ 	S$w~~//0000RRRRgnn&6&6RRRRRr9   c                   	 | j         r|                                 }|rg S d S t          | dd           }||S | j                            d| j        j                  }g }t          | j        | j	                  }|r|
                    |           |dv r)| 	                    | j        dd           }t          || j	        | j        j        | j        d          }|>|t          j        j        k    s'|                                t          j        j        k    rd }|s| 	                    | j        dd           }t          || j	        | j        j        | j        d          }|>|t          j        j        k    s'|                                t          j        j        k    rd }|r|dk    r|g}n|
                    |           | j        j        j        j        j        		fd|D             S )Nr  r5  )rn   rp   r   r   rp   c                 0    g | ]}t          |          S r6   )r&   )rT   r   r4  s     r7   rU   z+ClassDocumenter.get_doc.<locals>.<listcomp>  s$    TTTI!)Y77TTTr9   )r=  get_variable_commentr(  rw   r|   r   autoclass_contentr)   ra   r   rC   r0  r   rH   rR   r   r   r1  r2  r3  r4  )
r@   commentr   classdoc_fromr6  attrdocstringr   initdocstringr   r4  s
            @r7   r5  zClassDocumenter.get_doc  s    	//11G 	t/66 	L(()94;;XYY
t{DM:: 	-m,,, ,, 	5}}T[*dCCH"8T]#';#I#';
< <M  %&/"99%$$&&&/*AA% !%  
)--YEE &w'+{'M'+{I!? !? " )"fn&<<)"((**fn.DD) %)M 5 F* 5"/JJ%%m444N(1:D	TTTTTTTTr9   c                 d   	 dd                     | j                  f}| j        rt          j        | j                  }n&t          j        |                                           }|                                 t          |j	        
                    |g                     S # t          $ r Y d S w xY w)Nr   r   )r   r   r=  r"   r  r   r	  rV  rA  rE  r|   r#   )r@   r~   r   s      r7   rp  z$ClassDocumenter.get_variable_comment  s    		sxx--.C N)4T\BB)4T5J5J5L5LMM*..sB77888 	 	 	44	s   BB! !
B/.B/r>  c                 6   | j         rf| j        |                                 k    rI	 t          j        | j                  | _        | j                                         n# t          $ r Y nw xY w| j         r|                                 sn	 | j	        j
        dk    rt          | j        d          }nt          | j                  }t          t          d          |z  gd          }n# t          $ r Y nw xY wt!                                          |           d S )Nr  ra  alias of %sr   )r   )r=  r   r	  r"   r  r   rV  r#   rp  r   r  r/   ra   r   r    r   r   rG  r@   r>  aliasr   s      r7   rG  zClassDocumenter.add_content  s5    	0E0E0G0G G 	 . 9$, G G%%''''     	D$=$=$?$? 	;77B 1#DK99EE#DK00E)1]+;+;e+C*DRPPP!    	L)))))s$   7A 
A,+A,AC( (
C54C5rr  c                 \    | j         rd S t                                          |           d S r5   )r=  r   r  )r@   rr  r   s     r7   r  z ClassDocumenter.document_members  s1     	F  -----r9   r}  r  c                 L    t                                          |||          S )N)r>  r  rr  )r   r  )r@   r>  r}  r  rr  r   s        r7   r  zClassDocumenter.generate  s.     ww\-9,7   9 9 	9r9   r  r  ),rE   rF   rG   rH   r   r  rZ   rv   re   rl   r_   rq   r   r-   rY  r6  r   r7  r   r   r  rI   r   r   r   r   r   rM  r  r  r  r   rS  rZ  r.  r  r   r5  rp  r   rG  r  r  r   r   s   @r7   r  r    s          GL!K5M'9L1)n/ K    !c   "&C&&&+c +d + + + + + + ( (# (t (UX (!%( ( ( [(	 	 	 	 	 	 	 	 	L hsmXc]HYDW&W X L  L  L  L \PC PC P P P P&sCx             @4	?    "    $X $X $X $X $X $X $X $XLS4 SE$:M4N S S S S(2U$tCy/2 2U 2U 2U 2Uh
htCy&9 
 
 
 
*(< * * * * * * **. .D .T . . . . . .
 W[AF	9 	9Xj%9 	9PS 	9#	9:>	9KO	9 	9 	9 	9 	9 	9 	9 	9 	9 	9r9   r  c                   J    e Zd ZdZdZdZdZedede	de
dede
f
d	            Zd
S )ExceptionDocumenterz>
    Specialized ClassDocumenter subclass for exceptions.
    	exception
   r   r   r   r   r3   c                 V    t          |t                    ot          |t                    S r5   )r]  r   
issubclassBaseExceptionr   s        r7   r   z'ExceptionDocumenter.can_document_member  s#     &$''MJv},M,MMr9   N)rE   rF   rG   rH   r   r  ry  r  r   r   rI   r   r6   r9   r7   r~  r~    s          GL HN N# Nt NUX N!%N N N [N N Nr9   r~  c                       e Zd ZU dZeed<   dZeed<   dZe	ed<   dZ
eed<   dZeed<   dZee	         ed<   defd	Zdefd
ZdeddfdZdS )DataDocumenterMixinBaseNr   r   r   r   ra   r   r3   c                     dS )z,Check directive header should be suppressed.Fr6   r   s    r7    should_suppress_directive_headerz8DataDocumenterMixinBase.should_suppress_directive_header      ur9   c                     dS )z*Check :value: header should be suppressed.Fr6   r   s    r7   should_suppress_value_headerz4DataDocumenterMixinBase.should_suppress_value_header  r  r9   r>  c                     dS )z(Update docstring for the NewType object.Nr6   )r@   r>  s     r7   update_contentz&DataDocumenterMixinBase.update_content#  s    r9   )rE   rF   rG   r   r   rY  r   r   r   r   r   r   ra   r   r   rI   r  r  r   r  r6   r9   r7   r  r    s         FF C	   GSFCFCGT#Y$    d    : $      r9   r  c                   <     e Zd ZdZdef fdZdeddf fdZ xZS )GenericAliasMixinzt
    Mixin for DataDocumenter and AttributeDocumenter to provide the feature for
    supporting GenericAliases.
    r3   c                 v    t          j        | j                  pt                                                      S r5   )r$   isgenericaliasra   r   r  r   s    r7   r  z2GenericAliasMixin.should_suppress_directive_header.  s0    &t{33 ;88::	<r9   r>  Nc                 h   t          j        | j                  rv| j        j        dk    rt          | j        d          }nt          | j                  }|                    t          d          |z  d           |                    dd           t                      	                    |           d S Nr  ra  rx  r   )
r$   r  ra   r   r  r/   rC   r    r   r  ry  s      r7   r  z GenericAliasMixin.update_content2  s    !$+.. 	({3w> -W55,,- 0 05 8"===B'''|,,,,,r9   	rE   rF   rG   rH   rI   r  r   r  r   r   s   @r7   r  r  (  z         
<$ < < < < < <
-: 
-$ 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-r9   r  c                   <     e Zd ZdZdef fdZdeddf fdZ xZS )NewTypeMixinzn
    Mixin for DataDocumenter and AttributeDocumenter to provide the feature for
    supporting NewTypes.
    r3   c                 v    t          j        | j                  pt                                                      S r5   )r$   	isNewTypera   r   r  r   s    r7   r  z-NewTypeMixin.should_suppress_directive_headerE  s0    !$+.. ;88::	<r9   r>  Nc                 |   t          j        | j                  r| j        j        dk    rt          | j        j        d          }nt          | j        j                  }|                    t          d          |z  d           |                    dd           t                      
                    |           d S r  )r$   r  ra   r   r  r/   __supertype__rC   r    r   r  )r@   r>  	supertyper   s      r7   r  zNewTypeMixin.update_contentI  s    T[)) 	({3w> ?#DK$=wGG		#DK$=>>	- 0 09 <bAAAB'''|,,,,,r9   r  r   s   @r7   r  r  ?  r  r9   r  c                   p     e Zd ZdZdef fdZdeeee                           f fdZ	de
ddf fdZ xZS )TypeVarMixinzn
    Mixin for DataDocumenter and AttributeDocumenter to provide the feature for
    supporting TypeVars.
    r3   c                 x    t          | j        t                    pt                                                      S r5   )r]  ra   r   r   r  r   s    r7   r  z-TypeVarMixin.should_suppress_directive_header\  s/    4;00 ;88::	<r9   c                     t          | j        t                    r<| j        j        t          j        k    r t	                                                      S g S t	                                                      S r5   )r]  ra   r   rH   r   r5  r   s    r7   r5  zTypeVarMixin.get_doc`  sX    dk7++ 	%{"go5 ww(((	77??$$$r9   r>  Nc                 p   t          | j        t                    rxt          | j        j                  g}| j        j        D ]X}| j        j        dk    r$|                    t          |d                     6|                    t          |                     Y| j        j
        r\| j        j        dk    rt          | j        j
        d          }nt          | j        j
                  }|                    d|z              | j        j        r|                    d           | j        j        r|                    d           |                    t          d          d                    |          z  d           |                    dd           t!                                          |           d S )	Nr  ra  zbound=\ zcovariant=Truezcontravariant=Truezalias of TypeVar(%s)rd  r   )r]  ra   r   reprrE   __constraints__r   r  rC   stringify_typehint	__bound__r/   __covariant____contravariant__r    r   r   r  )r@   r>  attrs
constraintboundr   s        r7   r  zTypeVarMixin.update_contenti  s   dk7++ 	($+.//0E"k9 A A
;77B ALL!3J!H!HIIIILL!3J!?!?@@@@{$ 2;77B ;#DK$97CCEE#DK$9::E[50111{( /-...{, 31222"8 9 9DIIe<L<L LbQQQB'''|,,,,,r9   )rE   rF   rG   rH   rI   r  r   r   r   r5  r   r  r   r   s   @r7   r  r  V  s         
<$ < < < < < <%$tCy/2 % % % % % %-: -$ - - - - - - - - - -r9   r  c                   r     e Zd ZdZddedef fdZdef fdZdeeee	                           f fdZ
 xZS )	 UninitializedGlobalVariableMixinz
    Mixin for DataDocumenter to provide the feature for supporting uninitialized
    (type annotation only) global variables.
    Fr   r3   c                 h   	 t                                          d          S # t          $ r}	 t          | j        j                  5  t          | j        | j        j                  }t          |d | j        j
                  }| j        d         |v r%t          | _        || _        	 d d d            Y d }~dS 	 d d d            n# 1 swxY w Y   n# t          $ r Y nw xY w|r t                              |j        d         dd           | j                                         Y d }~dS d }~ww xY w)	NTr   r   r   r   r   r  F)r   r   r  r   r   r   r   r   r  r.   r  r   UNINITIALIZED_ATTRra   r   r   r   r   r   r  )r@   r   r  r   annotationsr   s        r7   r   z.UninitializedGlobalVariableMixin.import_object  s   	77((D(999 	 	 	
$+:;; $ $*4<9[\\F"0151Q#S #SK|B';6 $&8&,#$ $ $ $ $ $ $ $ $ $ $ $$	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $      sx{OTTT$$&&&uuuuu'	s^   !% D1C
AC(C:CC
	
CC
	CD,
CD,CAD,,D1c                 `    | j         t          u pt                                                      S r5   ra   r  r   r  r   s    r7   r  z=UninitializedGlobalVariableMixin.should_suppress_value_header  +    11 74466	8r9   c                 d    | j         t          u rg S t                                                      S r5   ra   r  r   r5  r   s    r7   r5  z(UninitializedGlobalVariableMixin.get_doc  s,    ;,, 	%I77??$$$r9   r  rE   rF   rG   rH   rI   r   r  r   r   r   r5  r   r   s   @r7   r  r    s         
        08d 8 8 8 8 8 8%$tCy/2 % % % % % % % % % %r9   r  c                   t    e Zd ZU dZdZdZdZ eej	                  Z	e
ed<   ee	d<   ee	d<   eded	ed
ededef
d            ZdeddfdZddedef fdZdef fdZdeddf fdZddeddfdZdefdZdedeee                  fdZdeeee                           f fdZdee         ddf fdZ xZS )DataDocumenterz9
    Specialized Documenter subclass for data items.
    rC  (   ir   r(  r  r   r   r   r   r3   c                 0    t          |t                    o|S r5   )r]  r  r   s        r7   r   z"DataDocumenter.can_document_member  s     &"233>>r9   Nc                 6   t          t          j        |                    }||_        	 t	          j        | j                  }|                                 |j        	                                D ]\  \  }}}|dk    r	||vr|||<   dS # t          $ r Y dS w xY w)9Update __annotations__ to support type_comment and so on.r   N)dictr$   r  rY  r"   r  r   rV  r  rD  r#   )r@   r   r  r   	classnameattrnamer(  s          r7   update_annotationsz!DataDocumenter.update_annotations  s    71&99::!,	%0>>H5=5I5O5O5Q5Q 7 71%Hz? 7x{'B 7,6K)7 7  	 	 	DD	s   AB
 

BBFr   c                     t                                          |          }| j        r|                     | j                   |S r5   )r   r   r   r  r>  s      r7   r   zDataDocumenter.import_object  s?    gg##J//; 	1##DK000
r9   c                     t                                                      rdS |                                 }t          d                    t          |g                               \  }}d|v rdS dS NTr&  z
hide-valueFr   r  r5  r'   r   r  r@   rj  r   rl  r   s       r7   r  z+DataDocumenter.should_suppress_value_header  sj    77//11 	4,,..C"3DIIc#rll4K4K"L"LIxx' tur9   r   c                    t                                          |           |                                 }| j        j        t
          u s|                                 rd S | j        j        r%|                     d| j        j        z  |           d S | j        j	        dk    rt          | j        d | j        j                  }| j        d         |v r| j        j        dk    r/t          |                    | j        d                   d          }n-t          |                    | j        d                             }|                     d|z   |           	 | j        j        s(|                                 st'          | j                  rd S t+          | j                  }|                     d|z   |           d S # t,          $ r Y d S w xY wNz   :annotation: %sr  r   r  ra  
   :type: z   :value: r   r.  r)  rw   r(  rs   r  r   r   r   r.   r   r  r   r  r  r|   no_valuer  r   ra   r*   rk   r@   r   r+  r  objreprr   s        r7   r.  z#DataDocumenter.add_directive_header  s   $$S)))((**
<"h. 	$2W2W2Y2Y 	D\$ 	MM.1HH$& & & & & {,6 
F,T[$-1[-MO O<#{2 F{;wF X"4[__T\RTEU5V5V5<#> #> #5[__T\RTEU5V5V"W"WMM,"8*EEEL) GT-N-N-P-P Gt{++GD0==GMM-'"9:FFFFF      4F; -F; ;
G	G	rr  c                     d S r5   r6   r  s     r7   r  zDataDocumenter.document_members  rD   r9   c                 Z    |                      | j        p| j        dd           }|p| j        S NrF   r   r   ra   r   r@   r}  s     r7   r	  zDataDocumenter.get_real_modname  -    }}T[%?DKtTT+t|+r9   r  c                     	 t          j        | j                  }|                                 d|f}||j        v rt          |j        |                   S n# t          $ r Y nw xY wd S )Nr   )r"   r  r   rV  rE  rA  r#   )r@   r  r   r~   s       r7   get_module_commentz!DataDocumenter.get_module_comment  s    	%0>>Hx.Ch(( 5H.s34445 	 	 	D	 ts   AA 
A$#A$c                     |                      | j        d                   }|r|gS t                                                      S )Nr   )r  r   r   r5  )r@   rr  r   s     r7   r5  zDataDocumenter.get_doc  sA    ))$,r*:;; 	%977??$$$r9   r>  c                     d | _         |st                      }|                     |           t                                          |           d S r5   r   r   r  r   rG  r@   r>  r   s     r7   rG  zDataDocumenter.add_content  sO      	(%<<LL)))L)))))r9   r  ) rE   rF   rG   rH   r   r  ry  r  r  r   r-   rY  rt   rv   r  r   r   rI   r   r  r   r  r.  r  r	  r   r   r  r5  r   rG  r   r   s   @r7   r  r    s%          GLH"d#8#DEEKEEE 1K)K
? ?# ?t ?UX ?!%? ? ? [?             	d 	 	 	 	 	 	       > D T    ,# , , , ,
3 
8DI3F 
 
 
 
%$tCy/2 % % % % % %	*(< 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r9   r  c                   Z    e Zd ZdZdZdZej        dz   Zede	de
dede	d	ef
d
            ZdS )NewTypeDataDocumenterz
    Specialized Documenter subclass for NewTypes.

    Note: This must be invoked before FunctionDocumenter because NewType is a kind of
    function object.
    newtypedatarC  r   r   r   r   r   r3   c                 .    t          j        |          o|S r5   )r$   r  r   s        r7   r   z)NewTypeDataDocumenter.can_document_member.  s      ((3V3r9   N)rE   rF   rG   rH   r   r$  r  ry  r  r   r   rI   r   r6   r9   r7   r  r  "  sz          GM!*Q.H4 4# 4t 4UX 4!%4 4 4 [4 4 4r9   r  c                       e Zd ZdZdZdZdZdZede	de
dede	d	ef
d
            Zdded	ef fdZde	d	e
fdZde
d	df fdZdded	dfdZde	d	e
f fdZdeded	efdZdeded	ee         fdZd	eeee
                           f fdZ xZS )MethodDocumenterzQ
    Specialized Documenter subclass for methods (normal, static and class).
    rT  2   r   r   r   r   r   r3   c                 V    t          j        |          ot          |t                     S r5   )r$   r  r]  r  r   s        r7   r   z$MethodDocumenter.can_document_member=  s(      ((UFDT1U1U-UUr9   Fr   c                 4   t                                          |          }|s|S | j        j                            | j                  }|| j        }t          j        |          s!t          j	        || j        | j                  r| j
        dz
  | _
        |S )Nr   r   r   )r   r   r   r\  r|   r   ra   r$   isclassmethodisstaticmethodr  )r@   r   r  r   r   s       r7   r   zMethodDocumenter.import_objectB  s    gg##J// 	J k"&&t'788 	+C!#&& 	6&s$BRSSS	6 !% 1A 5D
r9   r   c                 p   | j         j        dv r|                    dd           | j         j        dk    r|                    dd           	 | j        t          j        k    r| j        t          k    rd}nt          j        | j        | j        | j	                  rM| j
        j                            d	| j        d           t          j        | j        d| j         j        
          }nL| j
        j                            d	| j        d           t          j        | j        d| j         j        
          }t          |fi |}nS# t           $ r9}t"                              t'          d          | j        |           Y d }~d S d }~wt*          $ r d}Y nw xY w| j         j        r|                    dd          }|S )Nr  r  Fr  r  Tz()r  r  rF  +Failed to get a method signature for %s: %sr   r  r  )r   r   r}   r  ra   r   r   r$   r  r   r   r   r9  r  r  r,   r  r   r   r!   r   rk   r  r   )r@   r   r   r   r  s        r7   r  zMethodDocumenter.format_argsS  s   ;(,CC 	8/777;/7: 	=5t<<<	{fo- :$+2G :
 )$+4;TM]^^^ [HL%%&H$+W\]]]!+DKe9=9Y[ [ [CC HL%%&H$+W[\\\!+DKd9=9Y[ [ [C*399&99 	 	 	NN2KLL=#/ / /44444 	 	 	DDD	 ;0 	.<<f--Ds   C4E 
F.E??FFr   Nc                    t                                          |           |                                 }| j        j                            | j        | j                  }t          j	        |          r| 
                    d|           t          j        |          st          j        |          r| 
                    d|           t          j        |          r| 
                    d|           t          j        || j        | j                  r| 
                    d|           | j        r>d                    | j                  | j        j        v r| 
                    d|           d S d S d S )N   :abstractmethod:r     :classmethod:r  z   :staticmethod:r   r]  )r   r.  r)  r   r\  r|   r   ra   r$   isabstractmethodr   r	  r
  r  r  r   r   r   re  )r@   r   r+  r   r   s       r7   r.  z%MethodDocumenter.add_directive_headerv  s_   $$S)))((**
k"&&t'7EE#C(( 	=MM/<<<&s++ 	4w/I#/N/N 	4MM,
333 %% 	:MM,j999!#4;T=MNNN 	;MM-z:::= 	4SXXdl33t}7KK 	4MM,
33333	4 	4 	4 	4r9   rr  c                     d S r5   r6   r  s     r7   r  z!MethodDocumenter.document_members  rD   r9   c                    | j         j        dk    r|                    dd           g }| j        r9d                    | j                  | j        j        v r| j         j        dk    rd}n0d} t                      j	        di |}|
                    |           | j        j                            | j        d                   }t          j        |          r|j        j                                        D ]~\  }}|t&          u r|                     ||          }|rWt+          | j        d          }	| j        |	_        ||	_        d g|	_        |
                    |		                                           |rt          j        | j        | j        | j        	          r't          j        | j        d| j         j        
          }
n&t          j        | j        d| j         j        
          }
t7          | j        di           }| j        j                            d                    | j                            D ]}|                     |
|          }t;          ||| j         j                  }t          j        | j        | j        | j        	          sDt=          |j                                                   }|!                    |dd                    }tE          |fi |}|
                    |           d                    |          S )Nr  r  Tr   r  Fr   r   r  rF  r  r   r  r&  r6   )#r   r  r}   r   r   r   r  r   r   r  rC   r   r\  r|   r$   is_singledispatch_method
dispatcherr   rD  ra   r  r  r   r  r   r  r  r+   r  r(   rA  r  rT  r   r,   )r@   r   r  r  r   methr  r  dispatchmethr  r  r  r  r  r   s                 r7   r  z!MethodDocumenter.format_signature  s   ;/7: 	=5t<<<M 	&&$-*AA	-7	 JJJ*%''*44V44CKK{#''R(899+D11 	C!_5;;== 
C 
C	T&= 	C#'#B#B4#M#ML# C%5dnb%I%I
,0K
),8
).2V
*J$?$?$A$ABBB 	!%dkt{IYZZZ Z *4;U8<8XZ Z Z !*4;T8<8XZ Z Z 't{M2FFK M3778N8NOO 
! 
!33FHEE-h.2k.NP P -dkt{373CE E E K!%h&9&@&@&B&B!C!CJ'//:abb>/JJH)(==f==C    yyr9   r  r  c                 8   t          |j                                                  }t          |          D ]O\  }}|j                            |j                  }|r)|j        dk    r|                    |j                  ||<   P|                    |          S r  r  r  s          r7   r  z$MethodDocumenter.merge_default_value  r!  r9   r  r  c                 P   	 t          j        || j        j                  }nR# t          $ r9}t
                              t          d          | j        |           Y d}~dS d}~wt          $ r Y dS w xY wt          |j                  dk    rdS d }t          |j                                                  }|d         j        t          j        u rU|d                             |          |d<   	 |                    |          |_        |S # t&          t          f$ r Y dS w xY w|S )r#  r  r  Nr   c                      d S r5   r6   r6   r9   r7   r%  z:MethodDocumenter.annotate_to_first_argument.<locals>.dummy  r&  r9   r'  r  r)  r,  s          r7   r  z+MethodDocumenter.annotate_to_first_argument  s\   	#Dt{7WXXXCC 	 	 	NN2KLL=#/ / /44444 	 	 	44	 s~!# 	4	 	 	 cn++--..!99?2 	q	))S)99F1I&)kkVk&D&D#"I.   tt r.  c                 ,   | j         | j         S | j        d         dk    rt          | j        | j        | j        j        | j        | j                  }|>|t          j	        j
        k    s'|                                t          j	        j
        k    rd }|r-| j        j        j        j        j        }t#          ||          gS g S | j        d         dk    rt          | j        | j        | j        j        | j        | j                  }|>|t          j        j
        k    s'|                                t          j        j
        k    rd }|r-| j        j        j        j        j        }t#          ||          gS g S t'                                                      S )Nr   r   )tabsizer   )r  r   r)   ra   r   r   r0  r   r   r   rH   rR   r   r1  r2  r3  r4  r&   r   r   r5  )r@   r   r4  r   s      r7   r5  zMethodDocumenter.get_doc  s    	(
 ''<z) 	%t{DM#{E#{D,<> >I  !fo55!""fo&==! !	  N09BL	))YGGGHH	\"* 	%t{DM#{E#{D,<> >I  !fn44!""fn&<<! !	  N09BL	))YGGGHH	77??$$$r9   r  )rE   rF   rG   rH   r   r$  r  ry  r  r   r   rI   r   r   r  r.  r  r  r   r  r   r   r   r  r   r5  r   r   s   @r7   r  r  4  s         GMLHV V# Vt VUX V!%V V V [V        "!C !C ! ! ! !F4 4 4 4 4 4 4 4  D T    2 2 2 2 2 2 2 2h7) 7y 7Y 7 7 7 7x d xPXGY    :"%$tCy/2 "% "% "% "% "% "% "% "% "% "%r9   r  c                   r     e Zd ZdZddedef fdZdef fdZdeeee	                           f fdZ
 x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.
    Fr   r3   c                     t                                          |          }|r!t          j        | j                  sd| _        nd| _        |S )NTF)r   r   r$   isattributedescriptorra   non_data_descriptorr>  s      r7   r   z$NonDataDescriptorMixin.import_object	  sN    gg##J// 	-w4T[AA 	-'+D$$',D$
r9   c                 h    t          | dd           pt                                                      S Nr  F)r(  r   r  r   s    r7   r  z3NonDataDescriptorMixin.should_suppress_value_header	  s3    D"7??? ;88::	<r9   c                 j    t          | dd          rd S t                                                      S r  )r(  r   r5  r   s    r7   r5  zNonDataDescriptorMixin.get_doc	  s3    4.66 	% 477??$$$r9   r  r  r   s   @r7   r  r  		  s                 <d < < < < < <%$tCy/2 % % % % % % % % % %r9   r  c                        e Zd ZdZdefdZd
dedef fdZdef fdZdee	e	e
                           f fdZedefd	            Z xZS )
SlotsMixinzX
    Mixin for AttributeDocumenter to provide the feature for supporting __slots__.
    r3   c                     	 t          j        | j                  }|r| j        d         |v rdS dS # t          t
          f$ r Y dS w xY w)z/Check the subject is an attribute in __slots__.r   TF)r$   getslotsr   r   rk   r  )r@   	__slots__s     r7   isslotsattributezSlotsMixin.isslotsattribute-	  se    	(55I T\"-: tuI& 	 	 	55	s   *0 AAFr   c                     t                                          |          }|                                 rt          | _        |S r5   )r   r   r  	SLOTSATTRra   r>  s      r7   r   zSlotsMixin.import_object8	  s:    gg##J//  "" 	$#DK
r9   c                 d    | j         t          u rdS t                                                      S r>   )ra   r  r   r  r   s    r7   r  z'SlotsMixin.should_suppress_value_header?	  s-    ;)# 	:47777999r9   c                    | j         t          u r	 t          j        | j                  }|rC|                    | j        d                   r#t          || j        d                            }|gS g S # t          $ rB}t          
                    t          d          | j        j        |fd           g cY d }~S d }~ww xY wt                                                      S )Nr   z'Invalid __slots__ found on %s. Ignored.r   r   )ra   r  r$   r  r   r|   r   r&   rk   r   r   r!   rG   r   r5  )r@   r  r   r  r   s       r7   r5  zSlotsMixin.get_docE	  s    ;)# 	%
#,T[99	 t|B/?!@!@  1)DL<L2M N NI%;&I   r"KLL $ 8#>Y  P P P						
 77??$$$s$   AA1 /A1 1
B=;7B82B=8B=c                 Z    t          j        dt                     | j        t          u rdS dS )Nz4AttributeDocumenter._datadescriptor() is deprecated.TF)rQ  rR  r   ra   r  r   s    r7   _datadescriptorzSlotsMixin._datadescriptorU	  s5    L.	0 	0 	0;)# 	45r9   r  )rE   rF   rG   rH   rI   r  r   r  r   r   r   r5  r  r	  r   r   s   @r7   r  r  (	  s         	$ 	 	 	 	        :d : : : : : :%$tCy/2 % % % % % %      X    r9   r  c                        e Zd ZdZ e            ZdedefdZdedefdZ	ddedef fdZ
def fd	Zdeeee                           f fd
Z x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   c                 z    |                      || j        d                   rdS |                     |          rdS dS )z8Check the subject is an attribute defined in __init__().r   TF)get_attribute_commentr   +is_runtime_instance_attribute_not_commented)r@   r   s     r7   is_runtime_instance_attributez;RuntimeInstanceAttributeMixin.is_runtime_instance_attributem	  sH     %%fdl2.>?? 	4==fEE 	45r9   c                 b   t          j        |          D ]}	 t          |d          }t          |d          }t          j        |          }|                                 |r5| j        r.d                    || j        d         g          }||j        v r dS # t          t          f$ r Y w xY wdS )zHCheck the subject is an attribute defined in __init__() without comment.rF   rG   r   r   TN)r$   getmror+   r"   r  rV  r   r   r  r   r#   )r@   r   r   r   rW  r   r~   s          r7   r  zIRuntimeInstanceAttributeMixin.is_runtime_instance_attribute_not_commentedw	  s    >&)) 	 	C%c<88'^<<)4V<<  """ $ $((Hdl2.>#?@@Ch// $#tt"K0    ts   A<BB,+B,Fr   c           	      z   	 t                                          d          S # t          $ r
}	 t          | j        j                  5  t          | j        | j        dd         d| j        | j        j	                  }|d         }| 
                    |          r%| j        | _        || _        	 ddd           Y d}~dS 	 ddd           n# 1 swxY w Y   n# t          $ r Y nw xY w|r t                              |j        d         d	d
           | j                                         Y d}~dS d}~ww xY w)z`Check the existence of runtime instance attribute after failing to import the
        attribute.Tr  Nr   ro   r      r   r   r   r  F)r   r   r  r   r   r   r   r   r   r  r  RUNTIME_INSTANCE_ATTRIBUTEra   r   r   r   r   r   r  r@   r   r  r  r   r   s        r7   r   z+RuntimeInstanceAttributeMixin.import_object	  s   	77((D(999 	 	 	$+:;; $ $'dl3B36G37=7;{7Y[ [ [C !VF99&AA $&*&E&,#$ $ $ $ $ $ $ $ $ $ $ $
$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $      sx{OTTT$$&&&uuuuu'	s^   !% D:C
A'C1CCC	CC	CD5
C(%D5'C((AD55D:c                 `    | j         | j        u pt                                                      S r5   )ra   r  r   r  r   s    r7   r  z:RuntimeInstanceAttributeMixin.should_suppress_value_header	  s-    t>> 74466	8r9   c                     | j         | j        u r|                     | j                  rd S t	                                                      S r5   )ra   r  r  r   r   r5  r   s    r7   r5  z%RuntimeInstanceAttributeMixin.get_doc	  sF    K4:: 	%@@MM	%477??$$$r9   r  )rE   rF   rG   rH   ra   r  r   rI   r  r  r   r  r   r   r   r5  r   r   s   @r7   r  r  _	  s       	 	 "(C D    # $    $        48d 8 8 8 8 8 8%$tCy/2 % % % % % % % % % %r9   r  c                        e Zd ZdZdedefdZd
dedef fdZdef fdZde	e
e
e                           f fd	Z x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   c                 ^    t          |d| j        j                  }| j        d         |v rdS dS )z2Check the subject is an annotation only attribute.Nr   TF)r.   r   r  r   )r@   r   r  s      r7   #is_uninitialized_instance_attributezGUninitializedInstanceAttributeMixin.is_uninitialized_instance_attribute	  s6    $VT4;3STT<{* 	45r9   Fr   c                    	 t                                          d          S # t          $ r}	 t          | j        | j        dd         d| j        | j        j                  }|d         }|                     |          rt          | _
        || _        Y d}~dS n# t          $ r Y nw xY w|r t                              |j        d         d	d
           | j                                         Y d}~dS d}~ww xY w)eCheck the exisitence of uninitialized instance attribute when failed to import
        the attribute.Tr  Nr   ro   r   r  r   r   r   r  F)r   r   r  r   r   r   r   r  r  r  ra   r   r   r   r   r   r  r  s        r7   r   z1UninitializedInstanceAttributeMixin.import_object	  s-   	77((D(999 	 	 	
#DL$,ss2CW/3}37;3UW W W Q;;FCC  "4DK"(DK44444       sx{OTTT$$&&&uuuuu%	s4   !% 
C;A%BC6
B)&C6(B))AC66C;c                 `    | j         t          u pt                                                      S r5   r  r   s    r7   r  z@UninitializedInstanceAttributeMixin.should_suppress_value_header	  r  r9   c                 d    | j         t          u rd S t                                                      S r5   r  r   s    r7   r5  z+UninitializedInstanceAttributeMixin.get_doc	  s,    ;,, 	%477??$$$r9   r  )rE   rF   rG   rH   r   rI   r  r   r  r   r   r   r5  r   r   s   @r7   r  r  	  s         # $            28d 8 8 8 8 8 8%$tCy/2 % % % % % % % % % %r9   r  c                       e Zd ZU dZdZdZ eej                  Ze	e
d<   eed<   eed<   dZeded	efd
            Zededededed	ef
d            Zd ded	dfdZded	dfdZd ded	ef fdZd	efdZd	ef fdZded	df fdZdeded	eee                  fdZd	eeee                           f fdZdee         d	df fdZ  xZ!S )!AttributeDocumenterz9
    Specialized Documenter subclass for attributes.
    r\  <   r   r(  r  r  r   r3   c                 z    t          j        |           p't          j        |           pt          j        |           S r5   )r$   r  r  rC  )r   s    r7   is_function_or_methodz)AttributeDocumenter.is_function_or_method	  s4    !#&&Y'*;C*@*@YGDTUXDYDYYr9   r   r   r   r   c                     t          |t                    rdS t          j        |          rdS t          j        |          st          |t
                    sdS dS )NFT)r]  r  r$   r  r  r   r   s        r7   r   z'AttributeDocumenter.can_document_member	  sb     f.// 	5*622 	4"6** 	:fd3K3K 	45r9   Frr  Nc                     d S r5   r6   r  s     r7   r  z$AttributeDocumenter.document_members
  rD   r9   c                    	 t          t          j        |                    }||_        t          j        |          D ]}	 t          |d          }t          |d          }t          j        |          }|                                 |j	        
                                D ]\  \  }}}	||k    r	||vr|	||<   }# t          t          f$ r Y w xY wdS # t          t          f$ r Y dS w xY w)r  rF   rG   N)r  r$   r  rY  r  r+   r"   r  rV  r  rD  r   r#   r  )
r@   r   r  r   r   rW  r   r  r  r(  s
             r7   r  z&AttributeDocumenter.update_annotations

  s0   	w5f==>>K%0F"~f--  
)#|<<F+C@@H-8@@H$$&&&=E=Q=W=W=Y=Y ? ?9-Hz$0 ?X[5P ?4>K1? '4   D  	* 	 	 	DD	s6   >C A9B;:C ;CC CC C)(C)r   c                     t                                          |          }t          j        | j                  r| j        j        | _        | j        r|                     | j                   |S r5   )r   r   r$   isenumattributera   rL  r   r  r>  s      r7   r   z!AttributeDocumenter.import_object 
  s`    gg##J//"4;// 	,++DK; 	1##DK000
r9   c                 Z    |                      | j        p| j        dd           }|p| j        S r  r  r  s     r7   r	  z$AttributeDocumenter.get_real_modname)
  r  r9   c                     t                                                      rdS |                                 }|r9t          d                    t          |g                               \  }}d|v rdS dS r  r  r  s       r7   r  z0AttributeDocumenter.should_suppress_value_header-
  sr    77//11 	 4,,..C  &7		#c2,,8O8O&P&P#	88+  4ur9   r   c                    t                                          |           |                                 }| j        j        t
          u s|                                 rd S | j        j        r%|                     d| j        j        z  |           d S | j        j	        dk    rt          | j        d | j        j                  }| j        d         |v r| j        j        dk    r/t          |                    | j        d                   d          }n-t          |                    | j        d                             }|                     d|z   |           	 | j        j        s(|                                 st'          | j                  rd S t+          | j                  }|                     d|z   |           d S # t,          $ r Y d S w xY wr  r  r  s        r7   r.  z(AttributeDocumenter.add_directive_header9
  s   $$S)))((**
<"h. 	$2W2W2Y2Y 	D\$ 	MM.1HH*UUUUU{,6 
F,T[$-1[-MO O<#{2 F{;wF X"4[__T\RTEU5V5V5<#> #> #5[__T\RTEU5V5V"W"WMM,"8*EEEL) GT-N-N-P-P Gt{++GD0==GMM-'"9:FFFFF   r  r  c                 X   t          j        |          D ]}	 t          |d          }t          |d          }t          j        |          }|                                 |r0| j        r)||f}||j        v rt          |j        |                   c S ~# t          t          f$ r Y w xY wd S )NrF   rG   )r$   r  r+   r"   r  rV  r   rE  rA  r   r#   )r@   r   r  r   r   rW  r   r~   s           r7   r  z)AttributeDocumenter.get_attribute_commentW
  s    >&)) 	 	C%c<88'^<<)4V<<  """ = =#X.Ch00 =#H$6s$;<<<<<"K0    ts   A7BB'&B'c                    |                      | j        | j        d                   }|r|gS 	 | j        j        }d| j        _        t                                                      || j        _        S # || j        _        w xY w)Nr   F)r  r   r   r   r0  r   r5  )r@   rr  origr   s      r7   r5  zAttributeDocumenter.get_doch
  s    ,,T[$,r:JKK 	9	: ;9D5:DK277??$$59DK22TDK29999s   7A2 2B r>  c                     d | _         |t                      }|                     |           t                                          |           d S r5   r  r  s     r7   rG  zAttributeDocumenter.add_contentx
  sO      	(%<<LL)))L)))))r9   r  )"rE   rF   rG   rH   r   r  r  r  r   r-   rY  rt   rv   ry  staticmethodr   rI   r$  r  r   r   r  r  r   r	  r  r.  r   r   r  r5  r   rG  r   r   s   @r7   r!  r!  	  sc          GL"d#8#DEEKEEE 1K)K
 HZ3 Z4 Z Z Z \Z 	 	# 	t 	UX 	!%	 	 	 [	 D T         ,        ,# , , , ,
d 
 
 
 
 
 
       <C 3 8DQTICV    ":$tCy/2 : : : : : : *(< * * * * * * * * * * *r9   r!  c                        e Zd ZdZdZdZej        dz   Zede	de
dede	d	ef
d
            Zdded	ef fdZdded	dfdZd	e
fdZde
d	df fdZ xZS )PropertyDocumenterz9
    Specialized Documenter subclass for properties.
    r  r"  r   r   r   r   r   r3   c                    t          |t                    rot          j        |          rdS t	          |j        di           }|                    |          }t          |t                    ot          j        |j                  S dS )NTr\  F)	r]  r  r$   
ispropertyr+   ra   r|   r  __func__)r   r   r   r   r   r\  r   s          r7   r   z&PropertyDocumenter.can_document_member
  sz     fo.. 	!&)) Yt'z2FFll:..!#{33X8J3<8X8XX5r9   Fr   c                    t                                          |          }|rt          j        | j                  s{t          | j        di           }|                    | j        d                   }t          |t                    r.t          j        |j                  r|j        | _        d| _        dS dS d| _        |S )r  r\  r   TF)r   r   r$   r5  ra   r+   r   r|   r   r]  r  r6  r  )r@   r   r  r\  r   r   s        r7   r   z PropertyDocumenter.import_object
  s     gg##J// 	w)$+66 	#DKR@@H,,t|B/00C#{++ 0B3<0P0P !l%)"tu"
r9   rr  Nc                     d S r5   r6   r  s     r7   r  z#PropertyDocumenter.document_members
  rD   r9   c                 Z    |                      | j        p| j        dd           }|p| j        S r  r  r  s     r7   r	  z#PropertyDocumenter.get_real_modname
  r  r9   r   c                 |   t                                          |           |                                 }t          j        | j                  r|                     d|           | j        r|                     d|           t          | j        dd           r| j        j	        }n%t          | j        dd           r| j        j
        }nd }|r| j        j        dk    r	 t          j        || j        j                  }|j        t           j        urU| j        j        dk    rt'          |j        d          }nt'          |j                  }|                     d	|z   |           d S d S # t(          $ r9}t*                              t/          d
          | j        |           Y d }~d S d }~wt2          $ r Y d S w xY wd S d S )Nr  r  fgetr  r  r  r  ra  r  r  )r   r.  r)  r$   r  ra   r   r  r+   r;  r  r   r   r  r  rR  r   r*  r  r  r  r   r   r!   r   rk   )r@   r   r+  r  r  r  r  r   s          r7   r.  z'PropertyDocumenter.add_directive_header
  s   $$S)))((**
#DK00 	=MM/<<< 	:MM,j999VT22 	;#DD$+vt44 	;#DDD 	DK1V; 	#-d;?;;[] ] ]	.ioE F{;wF R"4Y5PRY"Z"Z"4Y5P"Q"QMM,"8*EEEEEF F    r"QRR#}c3 3 3ttttt   tt	 	 	 	s   BE( (
F72.F&&F76F7r  )rE   rF   rG   rH   r   r  r!  ry  r  r   r   rI   r   r   r  r	  r.  r   r   s   @r7   r3  r3  
  s&         GL #+a/H
 
# 
t 
UX 
!%
 
 
 [
        " D T    ,# , , , ,           r9   r3  c                   Z    e Zd ZdZdZdZej        dz   Zede	de
dede	d	ef
d
            ZdS )NewTypeAttributeDocumenterz
    Specialized Documenter subclass for NewTypes.

    Note: This must be invoked before MethodDocumenter because NewType is a kind of
    function object.
    newvarattributer\  r   r   r   r   r   r3   c                 V    t          |t                     ot          j        |          S r5   )r]  r  r$   r  r   s        r7   r   z.NewTypeAttributeDocumenter.can_document_member
  s(     f&6777UG<Mf<U<UUr9   N)rE   rF   rG   rH   r   r$  r  ry  r  r   r   rI   r   r6   r9   r7   r=  r=  
  s           GM(1,HV V# Vt VUX V!%V V V [V V Vr9   r=  r   r   r   r   c                     | j         j                                        D ]!\  }}t          ||          r |||g|R  c S "t	          ||g|R  S )zAlternative getattr() for types)r   autodoc_attrgettrsrD  r]  r+   )r   r   r   r   r  r  s         r7   r   r   
  sw    \4::<< - -	Tc3 	-4T,G,,,,,,	- T,G,,,,r9   c                    |                      t                     |                      t                     |                      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 )(Nrq  ro   Trn   rp   r  rg   rh   ri   r:  mixedr9  autodoc_default_optionsr  r   r   r  r  r  $autodoc_typehints_description_targetall
documenteddocumented_paramsr  r  r  r   zfully-qualifiedr  r0  r  r8  r  ra  r_  z$sphinx.ext.autodoc.preserve_defaultszsphinx.ext.autodoc.type_commentzsphinx.ext.autodoc.typehints)versionparallel_read_safe)add_autodocumenterr  r  r~  r  r  r  r0  r  r!  r3  r=  add_config_valuer   	add_eventsetup_extensionsphinx__display_version__)r   s    r7   setuprQ  
  s=   +,,,?+++.///>***0111-....///+,,,.///-...5666,gtT&'SY=Z=Z[[[/nj+FFH H H2GT4Q\C]C]^^^2B===6dCCC/T:::,k4k=&&IIK K K?e\3FGGI I I/T:::3We/99; ; ;14>>>5tTBBBMM4555MM-...MM-...MM'(((MM)***>???9:::67771NNNr9   )r   N)NFF)rH   r   rQ  r$   r   r   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   docutils.statemachiner   rO  sphinx.applicationr   sphinx.configr   r   sphinx.deprecationr   sphinx.environmentr   sphinx.ext.autodoc.importerr   r   r   r   sphinx.ext.autodoc.mockr   r   r   sphinx.localer    r!   sphinx.pycoder"   r#   sphinx.utilr%   sphinx.util.docstringsr&   r'   sphinx.util.inspectr(   r)   r*   r+   r,   sphinx.util.typingr-   r.   r/   r0   r  sphinx.ext.autodoc.directiver1   	getLoggerrE   r   r   __subclasses__MethodDescriptorTyper   VERBOSEr   re  r8   r;   rK   rW   r^   ra   r  rb  r  r   rZ   r_   re   rl   rq   rs   rt   rI   rv   r   r  r   r   r  r   tupler   r  r   r  r  r  r  r  r  r0  rI  rJ  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  r!  r3  r=  r   rQ  r6   r9   r7   <module>rg     s?    
			  ( ( ( ( ( ( ( (      6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 - , , , , ,  % % % % % % & & & & & & & & 7 7 7 7 7 7 / / / / / /8 8 8 8 8 8 8 8 8 8 8 8 < < < < < < < < < <         5 5 5 5 5 5 5 5 ( ( ( ( ( ( ( ( G G G G G G G G6 6 6 6 6 6 6 6 6 6 6 6 6 6 B B B B B B B B B B > > > > > > >====== 
	8	$	$
 tD/00  
 z  BJ|,,                     dffVXX vxxFHH	@ @fd3i&7 8 @ @ @ @< <fc#h.>(? < < < <# #c(    PS PXc] P P P PRs Rx} R R R R 6883 3    S T    +$ +4 + + + +$ 3 c S H    8 HM!! !C !x} ! !!&.! ! ! !L	 	 	 	 	d 	 	 	    5   4 d<($uS#X*??@i
+ i
+ i
+ i
+ i
+ i
+ i
+ i
+XN< N< N< N< N<z N< N< N<b) ) ) ) )J ) ) )*) ) ) ) ): ) ) )BK K K K K K K K\2 2 2 2 2#: 2 2 2$| | | | |02G | | |~    ,   *    
|9 |9 |9 |9 |9-/D |9 |9 |9~N N N N N/ N N N        ,- - - - -/ - - -.- - - - -* - - -.)- )- )- )- )-* )- )- )-X&% &% &% &% &%'> &% &% &%Rt* t* t* t* t*&l57Lt* t* t*n4 4 4 4 4N 4 4 4$R% R% R% R% R%.0D R% R% R%j% % % % %4 % % %>4 4 4 4 4( 4 4 4nM% M% M% M% M%$; M% M% M%`4% 4% 4% 4% 4%*A 4% 4% 4%nZ* Z* Z* Z* Z*+\:&(E=?U68LZ* Z* Z*zM M M M M57K M M M`V V V V V!4 V V V$-F - -C -3 -3 - - - -'Ov 'O$sCx. 'O 'O 'O 'O 'O 'Or9   