
    *e:                    n   d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
mZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ dd	lmZm Z m!Z!m"Z"m#Z#m$Z$  G d
 de"          Z% G d de"          Z&d/dZ'	 d0ddddd1d Z( G d! d"          Z) G d# d$e          Z*d2d&Z+d3d(Z,	 d4d5d.Z-dS )6zTStub generator for C modules.

The public interface is via the mypy.stubgen module.
    )annotationsN)FunctionType
ModuleType)AnyMapping)parse_type_comment)is_c_module)
ArgSigFunctionSigSigfind_unique_signatures!infer_arg_sig_from_anon_docstringinfer_prop_type_from_docstring&infer_ret_type_sig_from_anon_docstring!infer_ret_type_sig_from_docstringinfer_sig_from_docstringparse_all_signatures)BaseStubGenerator	ClassInfoFunctionContextSignatureGeneratorinfer_method_arg_typesinfer_method_ret_typec                  B    e Zd Z	 dddZedd	            ZddZddZdS )ExternalSignatureGeneratorN	func_sigsdict[str, str] | None
class_sigsc                *    |pi | _         |pi | _        dS )z
        Takes a mapping of function/method names to signatures and class name to
        class signatures (usually corresponds to __init__).
        N)r   r   )selfr   r   s      -lib/python3.11/site-packages/mypy/stubgenc.py__init__z#ExternalSignatureGenerator.__init__*   s     #b$*    doc_dirstrreturnc                x   g }g }t          j         | d          D ]W}t          |          5 }t          |                                          \  }}ddd           n# 1 swxY w Y   ||z  }||z  }Xt	          t          |                    }t	          t          |                    }	t          ||	          S )z+Instantiate from a directory of .rst files.z/*.rstN)globopenr   	readlinesdictr   r   )
clsr$   all_sigsall_class_sigspathfloc_sigsloc_class_sigssigsr   s
             r!   from_doc_dirz'ExternalSignatureGenerator.from_doc_dir4   s
    !$&I00011 	- 	-Dd Oq+?+N+N(.O O O O O O O O O O O O O O O Hn,NN*844550@@AA
)$
;;;s   %AA"	%A"	default_sigr   ctxr   list[FunctionSig] | Nonec                   |j         rv|j        dv rm|j        | j        vr_|j         j        | j        v rLt	          |j        t          | j        |j         j                           t          |j                            gS |j        | j        vrd S t	          |j        t          | j        |j                           d           g}|j         r |                     ||j         j                  S |S )N__new__r"   nameargsret_type)	
class_infor<   r   r   r   r   r   remove_self_typeself_varr    r5   r6   inferreds       r!   get_function_sigz+ExternalSignatureGenerator.get_function_sigB   s    
 N	333..#t66 :4?3>K^;_``238<<    84>))4 X6t~ch7OPP  
 > 	((3>3JKKKOr#   default_type
str | Nonec                    d S N )r    rE   r6   s      r!   get_property_typez,ExternalSignatureGenerator.get_property_typed   s    tr#   )NN)r   r   r   r   )r$   r%   r&   r   r5   r   r6   r   r&   r7   rE   rF   r6   r   r&   rF   )__name__
__module____qualname__r"   classmethodr4   rD   rJ   rI   r#   r!   r   r   )   sy        [_+ + + + + < < < [<       D     r#   r   c                      e Zd ZddZdd
ZdS )DocstringSignatureGeneratorr5   r   r6   r   r&   r7   c                V   t          |j        |j                  }|r&|j        J t          |j        |j                  r|d= |j        r_|s=|j        dk    r2t          |j        j        |j        j                  }|rd |D             }|                     ||j        j                  S |S )Nr"   c                :    g | ]}|                     d           S )r"   r<   )_replace.0sigs     r!   
<listcomp>z@DocstringSignatureGenerator.get_function_sig.<locals>.<listcomp>x   s&    RRR#* = =RRRr#   )r   	docstringr<   )is_pybind11_overloaded_function_docstringr?   r@   rA   rB   s       r!   rD   z,DocstringSignatureGenerator.get_function_sigi   s     ,CM38DD 	!=,,,8QQ !RL> 	 SJ 6 63CN4LcnNabb SRRRRRH((3>3JKKKOr#   rE   rF   c                    |j         Lt          |j                   }|r|S t          |j         |j                  }|r|S t	          |j                   }|S dS )z:Infer property type from docstring or docstring signature.N)r\   r   r   r<   r   )r    rE   r6   rC   s       r!   rJ   z-DocstringSignatureGenerator.get_property_type}   s_    =$=cmLLH  8QQH  5cmDDHO4r#   NrK   rL   )rM   rN   rO   rD   rJ   rI   r#   r!   rR   rR   h   s<           (     r#   rR   r\   r%   r<   r&   boolc                2    |                      | d          S )Nz((*args, **kwargs)
Overloaded function.


startswith)r\   r<   s     r!   r]   r]      s    4 T T TUUUr#    Finclude_privateexport_lessinclude_docstringsmodule_nametargetknown_modules	list[str]r$   re   rf   rg   Nonec                  t           j                            |          }|r3t           j                            |          st          j        |           t          | |||||          }|                                 |                                }	t          |d          5 }
|
	                    |	           ddd           dS # 1 swxY w Y   dS )a  Generate stub for C module.

    Signature generators are called in order until a list of signatures is returned.  The order
    is:
    - signatures inferred from .rst documentation (if given)
    - simple runtime introspection (looking for docstrings and attributes
      with simple builtin types)
    - fallback based special method names or "(*args, **kwargs)"

    If directory for target doesn't exist it will be created. Existing stub
    will be overwritten.
    rd   wN)
osr/   dirnameisdirmakedirsInspectionStubGeneratorgenerate_moduleoutputr)   write)rh   ri   rj   r$   re   rf   rg   subdirgenru   files              r!   generate_stub_for_c_modulerz      s   , W__V$$F bgmmF++ 
F
!'-  C ZZ\\F	fc		 d

6                 s   "CC	C	c                  X    e Zd ZdZdddZeddd            Zeddd            ZddZdS )CFunctionStubzR
    Class that mimics a C function in order to provide parseable docstrings.
    Fr<   r%   docis_abstractr_   c                0    || _         || _        || _        d S rH   )rM   __doc____abstractmethod__)r    r<   r}   r~   s       r!   r"   zCFunctionStub.__init__   s    "-r#   rZ   r   r&   c                b    t          |j        |                                d d         |          S N)r|   r<   
format_sig)r,   rZ   r~   s      r!   	_from_sigzCFunctionStub._from_sig   s)    SXs~~'7'7'<kJJJr#   r3   list[FunctionSig]c                t    t          |d         j        d                    d |D                       |          S )Nr   
c              3  N   K   | ] }|                                 d d         V  !d S r   )r   rX   s     r!   	<genexpr>z+CFunctionStub._from_sigs.<locals>.<genexpr>   s5      #J#JcCNN$4$4SbS$9#J#J#J#J#J#Jr#   )r|   r<   join)r,   r3   r~   s      r!   
_from_sigszCFunctionStub._from_sigs   s<    GL$))#J#JT#J#J#JJJK
 
 	
r#   rl   c                    dS )z
        This exists to make this object look like a method descriptor and thus
        return true for CStubGenerator.ismethod()
        NrI   )r    s    r!   __get__zCFunctionStub.__get__   s	    
 	r#   N)F)r<   r%   r}   r%   r~   r_   )rZ   r   r~   r_   r&   r|   )r3   r   r~   r_   r&   r|   r&   rl   )	rM   rN   rO   r   r"   rP   r   r   r   rI   r#   r!   r|   r|      s         . . . . .
 K K K K [K 
 
 
 
 [

     r#   r|   c                  <    e Zd ZdZ	 	 	 	 	 	 dMdN fdZdOdZdPdZdQdZdRd!ZdSd"Z	dTd#Z
dUd%ZdVd'ZdWd(ZdSd)ZdXd-ZdXd.ZdYd0ZedSd1            ZedXd2            ZedZd5            ZdSd6Zd[d9Zdd:d\d<Zd]d>Zd^d?Z	 d_d`dDZdadGZdbdHZdcdKZdddLZ xZ S )ers   zStub generator that does not parse code.

    Generation is performed by inspecting the module's contents, and thus works
    for highly dynamic modules, pyc files, and C modules (via the CStubGenerator
    subclass).
    rc   NFrh   r%   rj   rk   r$   _all_list[str] | Nonere   r_   rf   rg   moduleModuleType | Noner&   rl   c	                X   || _         |t          j        |          | _        n|| _        t	          | j                  | _        || _        | j        | _        t                                          ||||           || _	        | j        r | j
                            dg di           d S d S )Ntyping)r   CallableClassVarDictIterableIteratorList
NamedTupleOptionalTupleUnion)r$   	importlibimport_moduler   r	   rj   resort_memberssuperr"   rh   known_importsupdate)
r    rh   rj   r$   r   re   rf   rg   r   	__class__s
            r!   r"   z InspectionStubGenerator.__init__   s     >#1+>>DKK DK&t{33*".>PQQQ& 	 %%       	 	r#   funcobjectr6   r   r   c           	     ~    d } j         s&	 t          j        |          }n# t          $ r Y nw xY w||j        Ft          |j        t          |j        |j        j                  t          |j                            S t          |j        t          d          t          d          gd           S |j        }|j        }|j        }|j        }|j        d fd	}g }	t!          |          D ]\  }
}|r|
t#          |          t#          |          z
  k    r||
t#          |          t#          |          z
  z
           }|v r	|         }n5                     |          }|d
k    r                     d          }| d}|	                    t          ||d                     |	                    t          | ||          d                     |r/|	                    t          d|  ||                               |r/|	                    t          d|  ||                               |j        Gt+          d |	D                       r.t-          |j        |j        j        d |	D                       }||}	 |d          pt          |j                  }t          |j        |	|          S )Nr;   *argsrV   **kwargskeyr%   r&   rF   c                    | vrd S |          }|dS t          |t                    s                    |          S |S )Nrl   )
isinstancer%   get_type_fullname)r   argtyper   r    s     r!   get_annotationzHInspectionStubGenerator.get_default_function_sig.<locals>.get_annotation'  sR    +%%t!#&Gvgs++ 7--g666Nr#   rl   _typeshed.Incompletez | NoneT)defaultF*z**c              3  :   K   | ]}|j         d u o|j        du V  d S NF)typer   rY   args     r!   r   zCInspectionStubGenerator.get_default_function_sig.<locals>.<genexpr>M  sF       .
 .
:=CH5!5.
 .
 .
 .
 .
 .
r#   c                *    g | ]}|j         	|j         S rI   rV   r   s     r!   r[   zDInspectionStubGenerator.get_default_function_sig.<locals>.<listcomp>Q  s#    3\3\3\SVS[3\CH3\3\3\r#   )r   r%   r&   rF   )r	   inspectgetfullargspec	TypeErrorr?   r   r<   infer_c_method_argsrA   r   r
   r=   defaultsvarargsvarkwr   	enumeratelenget_type_annotationadd_nameappendallr   )r    r   r6   argspecr=   r   r   kwargsr   arglistir   default_valuer   
incompletenew_argsr>   r   s   `                @r!   get_default_function_sigz0InspectionStubGenerator.get_default_function_sig  s@    	!066    ?~)",SXs~7NOO238<<    # g...J0G0G0GH!    |#/)	 	 	 	 	 	 	 !#oo 	P 	PFAs PATS]]!::: (c$ii#h--.G)H I+%%)#.GG"66}EEG&(( &*]]3I%J%J
%/"8"8"8vc7DAAABBBBvc>>#+>+>NNNOOOO  	KNN6-g--1H1HIIJJJ  	JNN6-v--1G1GHHIII >%# .
 .
AH.
 .
 .
 +
 +
% .#.13\3\3\3\3\ H #"!>(++N/DSX/N/N38Wh777s   " 
//list[SignatureGenerator]c                    | j         sg S t                      g}| j        r3|                    dt                              | j                             |S Nr   )r	   rR   r$   insertr   r4   )r    sig_generatorss     r!   get_sig_generatorsz*InspectionStubGenerator.get_sig_generatorsY  sZ     	"I8S8U8U7VN| `%%a)C)P)PQUQ])^)^___!!r#   	type_namec                    d| j         g}t          |ddd          d         }|
J |            |                     || j        |          S )a  Strips unnecessary module names from typ.

        If typ represents a type that is inside module or is a type coming from builtins, remove
        module declaration from it. Return stripped name of the type.

        Arguments:
            typ: name of the type
        builtinsr   N   )rh   r   print_annotationrj   )r    r   local_modulesparsed_types       r!   strip_or_importz'InspectionStubGenerator.strip_or_importc  sX     $T%56(Aq$??B&&	&&&$$[$2DmTTTr#   objrF   c                $    t          |dd          S )z!Return module name of the object.rN   Ngetattrr    r   s     r!   get_obj_modulez&InspectionStubGenerator.get_obj_moduleq  s    sL$///r#   c                J    |                      |          }|du p
|| j        k    S )z<Check if object is considered defined in the current module.N)r   rh   )r    r   r   s      r!   is_defined_in_modulez,InspectionStubGenerator.is_defined_in_moduleu  s,    $$S))~;4+;!;;r#   c                   |                      | j                  }| j        rt          |d           }g }|D ]\  }}t	          j        |          r|j        | j        v r|j        }|                    | j	        dz             rp|
                    dd          \  }}|t          | j	                  d          pd}| j                            |||fg           | j                            |           | j                            ||           | j                            |           |                     |          r-t	          j        |          s|                    ||f           4|                     |          }	|	rP| j                            |	|d fg           |                     ||	d          r| j                            |           |                     t+          d |D                                  | j        rg }
g }g }ng }|x}
x}}|D ]x\  }}|                     |          r|                     |||
           3t	          j        |          r|                     |||           `|                     |||           yg | _        | j        r|D ]}| j                            |d	z               |D ]b}|                    d
          r.| j        r'| j        d         r| j                            d	           | j                            |d	z              c| j        r|
r| j                            d	           |
D ]}| j                            |d	z               nt9          |          D ]\  }}| j        ri|                    d
          rT| j        d                             d
          rpt          |          |dz   k    r||dz                                d          s<| j        rO| j        d                             d          r/|                    d          s| j                            d	           | j                            |d	z              |                                  d S )Nc                    | d         S r   rI   xs    r!   <lambda>z9InspectionStubGenerator.generate_module.<locals>.<lambda>}  s
    ! r#   r   .r   F)name_is_aliasc                @    g | ]\  }}t          j        |          |S rI   )r   ismodule)rY   r<   r   s      r!   r[   z;InspectionStubGenerator.generate_module.<locals>.<listcomp>  s-    #a#a#aYT37K[\_K`K`#aD#a#a#ar#   )ru   r   classrT       def)get_membersr   r   sortedr   r   rM   rj   rb   rh   rsplitr   import_trackeradd_import_fromreexport
add_importr   r   r   should_reexportset_defined_namessetis_functiongenerate_function_stubisclassgenerate_class_stubgenerate_variable_stub_outputr   check_undefined_names)r    	all_itemsitemsr<   r   rh   pkg_namemod_name
rel_moduleobj_module_name	functionstypes	variablesru   liner   s                   r!   rt   z'InspectionStubGenerator.generate_modulez  s   $$T[11	 	>ynn===I" 	; 	;ID#$$ ;9K)K)K!l))$*:S*@AA 	7)4););C)C)C&Hh!)#d.>*?*?*A*A!B!IcJ'77
hPTEUDVWWW'006666 '22;EEE'006666**3// 	;8H8M8M 	;dC[)))) #'"5"5c":":" ;'774QU,XXX++D/QV+WW ;+44T:::s#a#a)#a#a#abbccc 	3#%I!E#%II "F,22I2	 	I 	IID#$$ I++D#i+HHHH%% I((s5(AAAA++D#i+HHHH 	1! 1 1##D4K0000 1 1??7++ . .bAQ .L''---##D4K0000| *	 *##D)))! 1 1##D4K00001 %V,, 1 14L.00. !L,77@@	.
  KK!a%//F1q5M4L4LV4T4T/ L 0 R(33E::	 0
 !OOE22 0 L''---##D4K0000""$$$$$r#   attrc                b    |dv p+|| j         v p"t          |          pt          j        |          S )N)	r   __getattribute____str____repr__r   __dict__rN   __weakref____annotations__)IGNORED_DUNDERSis_pybind_skipped_attributekeyword	iskeyword)r    r  s     r!   is_skipped_attributez,InspectionStubGenerator.is_skipped_attribute  sM    
 ' t++' +400'  &&	
r#   list[tuple[str, Any]]c                    t          |d          }g }|D ]P}|                     |          r	 t          ||          }|                    ||f           A# t          $ r Y Mw xY w|S )Nr  )r   r  r   AttributeError)r    r   obj_dictresultsr<   values         r!   r   z#InspectionStubGenerator.get_members  s    &-c:&>&> 		. 		.D((.. .T** e}---- "    s   A
A#"A#c                   ||t          d          u rdS t          j        |          r(d                    |                     |                    S t          |t                    r|                     d          S t          |t                    r|                     dd          S |                     t          |                    S )z
        Given an instance, return a string representation of its type that is valid
        to use as a type annotation.
        Nrl   ztype[{}]ztyping.Callableztypes.ModuleTypeF)require)	r   r   r  formatr   r   r   r   r   r   s     r!   r   z+InspectionStubGenerator.get_type_annotation  s    
 ;#d++6_S!! 	5$$T%;%;C%@%@AAA\** 	5==!2333Z(( 	5==!3U=CCC))$s))444r#   c                `    | j         rt          j        |          S t          j        |          S rH   )r	   r   	isbuiltin
isfunctionr   s     r!   r   z#InspectionStubGenerator.is_function  s/     	+$S)))%c***r#   r?   r   r<   c                   | j         rmt          j        |          pXt          |          t          t          j                  t          t          j                  t          t          j                  fv S t          j        |          S rH   )	r	   r   ismethoddescriptorr   r%   index__add__r:   r(  r    r?   r<   r   s       r!   	is_methodz!InspectionStubGenerator.is_method   sp     	+-c22 d3iiSYS[!!S[!!D 7  %c***r#   c                    | j         r*t          j        |          pt          |          j        dv S t          j        |          S )N)rP   classmethod_descriptor)r	   r   r'  r   rM   ismethodr-  s       r!   is_classmethodz&InspectionStubGenerator.is_classmethod  sN     	)$S)) T#YY-? D . 
 #C(((r#   ClassInfo | Nonec                v    | j         rdS |d uo,t          t          j        |j        |          t
                    S r   )r	   r   r   getattr_staticr,   staticmethodr-  s       r!   is_staticmethodz'InspectionStubGenerator.is_staticmethod  sD     	5T) j&z~t<<l/ / r#   c                $    t          | dd          S )Nr   Fr   )r   s    r!   is_abstract_methodz*InspectionStubGenerator.is_abstract_method  s    s0%888r#   c                J    t          j        |          pt          |d          S )Nfget)r   isdatadescriptorhasattr)r?   r<   r   s      r!   is_propertyz#InspectionStubGenerator.is_property   s"    ',,DV0D0DDr#   propr   c                4    t          | d          o| j        d u S )Nfset)r=  rA  )r?  s    r!   is_property_readonlyz,InspectionStubGenerator.is_property_readonly$  s    tV$$:d)::r#   c                @    | j         rt          |          j        dv S dS )z=For c-modules, whether the property behaves like an attribute)pybind11_static_propertyStaticPropertyF)r	   r   rM   r   s     r!   is_static_propertyz*InspectionStubGenerator.is_static_property(  s'     	99%)WWW5r#   rC   r   c                    t          |          D ]m\  }}|j        D ](}|j        |                     |j                  |_        )|j        1|                    |                     |j                            ||<   nd S )N)r>   )r   r=   r   r   r>   rW   )r    rC   r   rZ   r   s        r!   process_inferred_sigsz-InspectionStubGenerator.process_inferred_sigs0  s    )) 	X 	XFAsx > >8'#33CH==CH|'!llD4H4H4V4VlWW	X 	Xr#   )r?   ru   c                   t          |dd          }t          |t                    sd}t          | j        |||                     |          |          }|                     ||j                  s|                     |          rdS | 	                    |j
                   |                     ||          }|                     || j        |          }|                     |           g }	t          |          dk    r;|	                    d                    |                     d                               |j        r;|	                    d                    |                     d                               ||                     |||          r|	                    d           n|D ]K}
|
j        r|
j        d	         j
        d
vr.|
j                            d	t/          |j                             L|d	         j        r1|d	         j        d	         j
        dk    r|	                    d           |r|                     |          }|                    |                     ||	|                     |                     |||           dS )a(  Generate stub for a single function or method.

        The result (always a single line) will be appended to 'output'.
        If necessary, any required names will be added to 'imports'.
        The 'class_name' is used to find signature of __init__ or __new__ in
        'class_sigs'.
        r   Nr\   r~   r?   r   z@{}ztyping.overloadzabc.abstractmethodz@staticmethodr   )r    r,   rV   r,   z@classmethod)
decoratorsr\   )r   r   r%   r   rh   r9  is_private_namefullnameis_not_in_allrecord_namer<   r   get_signaturesr   rH  r   r   r%  r   r~   r7  r=   r   r
   rA   _indent_docstringextendformat_func_def	_fix_iter)r    r<   r   ru   r?   r\   r6   r5   rC   rK  rZ   s              r!   r   z.InspectionStubGenerator.generate_function_stub8  s    !i66	)S)) 	I//44!
 
 
 cl33 	t7I7I$7O7O 	F"""33C==&&{D4GMM""8,,,
x==1ell4==9J+K+KLLMMM? 	Qell4==9M+N+NOOPPP!##Jc:: 6!!/2222# M MC8 Msx{'7'N'N6z7J+K+K+KLLLA;# 6(8(;(@E(I(I%%n555 	:..y99Id**8
V_*``aaasHf-----r#   r\   c                   |                     d          }| j        dz   t          |          dk    rWt          fd|D                       s<t	          |dd                   D ]$\  }}|                                r|z   ||dz   <   %|d                             d          r<t          |          dk    r|                               n|d         dd         |d<   d	                    |          S )
zQFix indentation of docstring extracted from pybind11 or other binding generators.T)keependsr   r   c              3  l   K   | ].}|                               p|                                 V  /d S rH   )rb   strip)rY   r  indents     r!   r   z<InspectionStubGenerator._indent_docstring.<locals>.<genexpr>q  s?      UUttv..Bdjjll2BUUUUUUr#   NrT   r   rc   )	
splitlines_indentr   r   r   rX  endswithr   r   )r    r\   linesr   r  rY  s        @r!   rQ  z)InspectionStubGenerator._indent_docstringl  s   $$d$33&u::>>UUUUuUUUUU 5(qrr33 5 5GAtzz|| 5'-}a!e9d## 	+5zzA~~V$$$$!"IcrcNb	wwu~~r#   c                >   |j         r|j         j        |j        dk    r|d|j         j        j        vrkd}|D ](}|j        r|j        d         j        dk    r	|j        } n)|dS t          dd| d          }|                     d|||j                    dS dS dS dS dS )	zqEnsure that objects which implement old-style iteration via __getitem__
        are considered iterable.
        N__getitem____iter__rT   intz&def __iter__(self) -> typing.Iterator[z]
ru   r?   )	r?   r,   r<   r  r=   r   r>   r|   r   )r    r6   rC   ru   	item_typerZ   r   s          r!   rT  z!InspectionStubGenerator._fix_iter~  s     N	c".M))#."4"===$(I  8  1U : : #IE SYSSS C ''
CSVSa'bbbbb!	c 	c..))==r#   raw_objstatic_propertiesrw_propertiesro_propertiesc           
        t          |dd          }t          |dd          }	|	r"t          |	dd          }
|
r|r	|d|
z   z  }n|
r|
}t          | j        ||d|          }|                     ||j                  s|                     |          rdS |                     |j                   |                     |          }| 	                    |          }|r)| 
                    |                     |                    }n|                     ||          }|j        }|                     || j        |          }|| 
                    |          }|r[|                     d          }|rdnd	}||                     d
          }|                    | j         | d| d| d|            dS |rl|                    | j         d           t'          |t)          d          g|          }|                    |                    | j                             dS ||                     d
          }|                    | j         | d|            dS )a  Generate property stub using introspection of 'obj'.

        Try to infer type from docstring, append resulting lines to 'output'.

        raw_obj : object before evaluation of descriptor (if any)
        obj : object after evaluation of descriptor
        r   Nr;  r   FrJ  typing.ClassVarz  # read-onlyrc   r   : [] = ...z	@propertyr    )rY  )r   r   rh   rL  rM  rN  rO  r<   rF  rB  r   r   r   r>   rJ   r   r   r   r[  r   r
   r   )r    r<   rd  r   re  rf  rg  r?   r\   r;  
alt_docstrr6   staticreadonlyr>   r5   inferred_typeclassvartrailing_commentrZ   s                       r!   generate_property_stubz.InspectionStubGenerator.generate_property_stub  s   $ GY55	w-- 	' y$77J 'i 'TJ..		 '&	diUWa
 
 
 cl33 	t7I7I$7O7O 	F"""((11,,W55 	,#'#7#78P8PQT8U8U#V#VHH77EEK"+H..x9LcRR$ 00??M 	O}}%677H2:B$ $.D E E$$<\\\\\M\\JZ\\      O$$%?%?%?@@@!$(8-HH$$S^^4<^%H%HIIIII ($(MM2H$I$IM$$%Md%M%Mm%M%MNNNNNr#   typr   c                    |t           u rdS t          |d|j                  }|                     |          }|
J |            |dk    r| d| }|S )z,Given a type, return a string representationr   rO   Nr   r   )r   r   rM   r   )r    rt  typenamerh   s       r!   r   z)InspectionStubGenerator.get_type_fullname  sm    #::53==))#..&&&&&*$$%2222Hr#   c                (    t                               |          }|d         t          u r|d= |r|d         j        dk    r|d= |dd          }g }|D ]2t	          fd|D                       s|                               3 fd|D             S )NrT   pybind11_objectr   c              3  8   K   | ]}t          |          V  d S rH   )
issubclass)rY   bbases     r!   r   z9InspectionStubGenerator.get_base_types.<locals>.<genexpr>  s-      ::qz!T**::::::r#   c                `    g | ]*}                                         |                    +S rI   )r   r   )rY   r|  r    s     r!   r[   z:InspectionStubGenerator.get_base_types.<locals>.<listcomp>  s5    UUUt$$T%;%;D%A%ABBUUUr#   )r   mror   rM   anyr   )r    r   	all_basesbasesr|  s   `   @r!   get_base_typesz&InspectionStubGenerator.get_base_types  s    HHSMM	R=F"""  	2/3DDD"abbM	 	# 	#D::::E::::: #T"""UUUUuUUUUr#   
class_namer,   c           
        t          |d          }|                     |          }| j        rt          |d           }t	          d |D                       }g }g }g }	g }
g }g }|                     |           |                                  t          |dt          |dd          |          }|D ]#\  }}|                    ||          }| 	                    |||          s| 
                    |||          rM|dk    rd	|v rUd	}| 
                    |||          rd
|_        nd|_        |                     ||||           |                     |||          r|                     ||||	|
||           t          j        |          r.|                     |          r|                     |||           |                    ||f           %|D ]p\  }}|dk    r||                     |                     |                    }|                     d          }|	                    | j         | d| d| d           q|                                  |                     |          }|rdd                    |          z  }nd}|s	|	s|
s|s|r|                    | j         d| | d           |D ]}|rq|d         ri|d                                                             d          s<|                                                    d          r|                    d           |                    |           |	D ]}|                    |           |
D ]}|                    |           |D ]}|                    |           |D ]}|                    |           dS |                    | j         d| | d           dS )zGenerate stub for a single class using runtime introspection.

        The result lines will be appended to 'output'. If necessary, any
        required names will be added to 'imports'.
        r  c                ,    t          | d                   S r   )method_name_sort_keyr   s    r!   r   z=InspectionStubGenerator.generate_class_stub.<locals>.<lambda>  s    0DQqT0J0J r#   r   c              3  &   K   | ]}|d          V  dS )r   NrI   )rY   r   s     r!   r   z>InspectionStubGenerator.generate_class_stub.<locals>.<genexpr>   s&      ((QAaD((((((r#   rc   r   Nr:   r"   r,   r    rb  __hash__ri  rj  rk  rl  z(%s)z, zclass :rT   r   z: ...)r   r   r   r   r   rO  rY  r   getr.  r2  rA   r   r>  rs  r   r  r   r  r   r   r   r   r[  dedentr  r   rX  rb   )r    r  r,   ru   
raw_lookupr  namesmethodsr  re  rf  rg  attrsr?   r  r"  	raw_valueprop_type_namerq  r  	bases_strr  s                         r!   r  z+InspectionStubGenerator.generate_class_stub  s    S*--
  %% 	L5&J&JKKKE((%(((((')#%#%')$$$z2wsIt/L/LcRR
  !	, !	,KD%"tU33I~~j$66 ,$:M:MD%; ; , 9$$!U** !%D&&z4?? 1*/J''*0J'++D%T^+____!!*dI>> ,++%!!    '' ,D,E,Ee,L,L ,((ue<<<<dE]++++  	b 	bKD%z!!em!11$2J2J52Q2QRRN}}%677H$$%`d%`%`h%`%`%`%`%`aaaa##C(( 	5!1!11III 	O% 	O 	O' 	O] 	OMMT\IIIYIIIJJJ $ $&r
& #2J,,..99'BB& 

//88	& MM"%%%d####) $ $d####% $ $d#### $ $d####% $ $d####$ $ MMT\MMMYMMMNNNNNr#   c                "   |                      || j         d|           s|                     |          rdS |                     |           |                     |                     |                    }|                    | d|            dS )zGenerate stub for a single variable using runtime introspection.

        The result lines will be appended to 'output'. If necessary, any
        required names will be added to 'imports'.
        r   Nrj  )rL  rh   rN  rO  r   r   r   )r    r<   r   ru   type_strs        r!   r  z.InspectionStubGenerator.generate_variable_stubU  s     )9&B&BD&B&BCC 	tGYGYZ^G_G_ 	F''(@(@(E(EFF++++,,,,,r#   )rc   NFFFN)rh   r%   rj   rk   r$   r%   r   r   re   r_   rf   r_   rg   r_   r   r   r&   rl   )r   r   r6   r   r&   r   )r&   r   )r   r%   r&   r%   )r   r   r&   rF   )r   r   r&   r_   r   r  r%   r&   r_   )r   r   r&   r  )r   r   r&   r%   )r?   r   r<   r%   r   r   r&   r_   )r?   r3  r<   r%   r   r   r&   r_   )r?  r   r&   r_   )rC   r   r&   rl   )
r<   r%   r   r   ru   rk   r?   r3  r&   rl   )r\   r%   r&   r%   )r6   r   rC   r   ru   rk   r&   rl   rH   )r<   r%   rd  r   r   r   re  rk   rf  rk   rg  rk   r?   r3  r&   rl   )rt  r   r&   r%   )r   r   r&   rk   )r  r%   r,   r   ru   rk   r&   rl   )r<   r%   r   r   ru   rk   r&   rl   )!rM   rN   rO   r   r"   r   r   r   r   r   rt   r  r   r   r   r.  r2  r7  r6  r9  r>  rB  rF  rH  r   rQ  rT  rs  r   r  r  r  __classcell__)r   s   @r!   rs   rs      s         "& %!#($(( ( ( ( ( ( (TP8 P8 P8 P8d" " " "U U U U0 0 0 0< < < <
L% L% L% L%\
 
 
 
&   5 5 5 5 + + + +	+ 	+ 	+ 	+) ) ) )    9 9 9 \9 E E E \E ; ; ; \;   X X X X \`2. 2. 2. 2. 2. 2.h   $c c c c@ (,AO AO AO AO AOF	 	 	 	V V V V$]O ]O ]O ]O~
- 
- 
- 
- 
- 
- 
- 
-r#   rs   tuple[int, str]c                v    | dv rd| fS |                      d          r|                     d          rd| fS d| fS )ziSort methods in classes in a typical order.

    I.e.: constructor, normal methods, special methods.
    r9   r   __   r   )rb   r\  rV   s    r!   r  r  b  sR    
 &&&$wt t!4!4 $wd7Nr#   r  c                ,    |                      d          S )N__pybind11_module_local_ra   )r  s    r!   r  r  n  s    ??5666r#   r    rA   	arg_namesr   list[ArgSig]c                   d }|                      d          r|                     d          r| dd         } | dv rg }nr| dk    rt          d          g}nY| dk    r"t          d          t          d	          g}n1| d
v rt          d          g}n| dk    r!t          d          t          d          g}n| dk    rg }n| dk    rt          d          g}n| dv rt          dd	          g}n| dv rt          d          g}n| dv rg }n| dk    r!t          d          t          d          g}nw| dk    r!t          d          t          d          g}nP| dk    rt          d          g}n8| dk    r2t          dd          t          dd          t          d d!          g}|t          | ||          }nt          |          g|z   }| t          d"          t          d#          g}|S )$Nr  r  )hashiternextsizeofcopydeepcopyreducegetinitargsra  floattrunccomplexr_   absbytesdirr   reversedroundr+  entergetitemr+  rV   setitemr   )delattrr   r<   setattrr"  getstatesetstatestate)eqneltlegtgeother)r<   r   )(addraddsubrsubmulrmulmodrmodfloordiv	rfloordivtruedivrtruedivdivmodrdivmodpowrpowxorrxororrorandrandlshiftrlshiftrshiftrrshiftcontainsdelitemiaddiand	ifloordivilshiftimodimulioripowirshiftisubitruedivixor)negposinvertr  instanceownerr   	reduce_exprotocolexitr   ztype[BaseException] | NonezBaseException | None	tracebackztypes.TracebackType | Noner   r   )rb   r\  r
   r   )r<   rA   r  r=   s       r!   r   r   r  s    !%Dt `t!4!4 `AbDz 
 
 
. DDY((()DDY(((&h*?*?*?@DD+++'''(DDY'''W)=)=)=>DDZDDZ((()DD999h7778DD )
 )
 )
T ((()DD---DDU]]
+++V-A-A-ABDDU]]
+++V-A-A-ABDD[  
+++,DDV^^F)EFFFG*@AAAK.JKKKD
 |%dHi@@H%%%&-|G$$$f*&=&=&=>Kr#   )r\   r%   r<   r%   r&   r_   )rc   )rh   r%   ri   r%   rj   rk   r$   r%   re   r_   rf   r_   rg   r_   r&   rl   )r<   r%   r&   r  r  )r    N)r<   r%   rA   r%   r  r   r&   r  ).r   
__future__r   r(   r   r   r  os.pathro   r  r   r   r   r   r   mypy.fastparser   mypy.moduleinspectr	   mypy.stubdocr
   r   r   r   r   r   r   r   r   r   mypy.stubutilr   r   r   r   r   r   r   rR   r]   rz   r|   rs   r  r  r   rI   r#   r!   <module>r     s   
 # " " " " "         * * * * * * * *         - - - - - - * * * * * *                                      < < < < <!3 < < <~! ! ! ! !"4 ! ! !HV V V V 	& "$& & & & & &R       8J
- J
- J
- J
- J
-/ J
- J
- J
-Z	 	 	 	7 7 7 7
 FJk k k k k k kr#   