
    hi^                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZ	ddl
mZ ddlmZmZ ddlmZ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' ddl(m)Z)  G d de%          Z* G d de%          Z+d3dZ,	 d4ddddd5d"Z- G d# d$          Z. ej/        d%d&          Z0 G d' d(e"          Z1d6d*Z2d7d,Z3	 d8d9d2Z4dS ):zTStub generator for C modules.

The public interface is via the mypy.stubgen module.
    )annotationsN)Mapping)FunctionType
ModuleType)AnyCallable)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_type)quote_docstringc                  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_sigsreturnNonec                *    |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      ]/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypy/stubgenc.py__init__z#ExternalSignatureGenerator.__init__-   s     #b$*    doc_dirstrc                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_dir7   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$   r8   r9   inferreds       r%   get_function_sigz+ExternalSignatureGenerator.get_function_sigE   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$   rH   r9   s      r%   get_property_typez,ExternalSignatureGenerator.get_property_typeg   s    tr'   )NN)r   r   r    r   r!   r"   )r(   r)   r!   r   r8   r   r9   r   r!   r:   rH   rI   r9   r   r!   rI   )__name__
__module____qualname__r&   classmethodr7   rG   rM   rL   r'   r%   r   r   ,   sy        [_+ + + + + < < < [<       D     r'   r   c                      e Zd ZddZdd
ZdS )DocstringSignatureGeneratorr8   r   r9   r   r!   r:   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>{   s&    RRR#* = =RRRr'   )r   	docstringr?   )is_pybind11_overloaded_function_docstringrB   rC   rD   rE   s       r%   rG   z,DocstringSignatureGenerator.get_function_sigl   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'   rH   rI   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$   rH   r9   rF   s       r%   rM   z-DocstringSignatureGenerator.get_property_type   s_    =$=cmLLH  8QQH  5cmDDHO4r'   NrN   rO   )rP   rQ   rR   rG   rM   rL   r'   r%   rU   rU   k   s<           (     r'   rU   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(   rh   ri   rj   r"   c                  t           j                            |          }|r3t           j                            |          st          j        |           t          | |||||          }|                                 |                                }	t          |d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.
    rg   wzutf-8)encodingN)
osr2   dirnameisdirmakedirsInspectionStubGeneratorgenerate_moduleoutputr,   write)rk   rl   rm   r(   rh   ri   rj   subdirgenrx   files              r%   generate_stub_for_c_moduler}      s   , W__V$$F bgmmF++ 
F
!'-  C ZZ\\F	fcG	,	,	, 

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_abstractrb   r!   r"   c                0    || _         || _        || _        d S rK   )rP   __doc____abstractmethod__)r$   r?   r   r   s       r%   r&   zCFunctionStub.__init__   s    "-r'   r]   r   c                b    t          |j        |                                d d         |          S N)r   r?   
format_sig)r/   r]   r   s      r%   	_from_sigzCFunctionStub._from_sig   s)    SXs~~'7'7'<kJJJr'   r6   list[FunctionSig]c                t    t          |d         j        d                    d |D                       |          S )Nr   
c              3  N   K   | ] }|                                 d d         V  !d S r   )r   r[   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/   r6   r   s      r%   
_from_sigszCFunctionStub._from_sigs   s<    GL$))#J#JT#J#J#JJJK
 
 	
r'   c                    dS )z
        This exists to make this object look like a method descriptor and thus
        return true for CStubGenerator.ismethod()
        NrL   )r$   s    r%   __get__zCFunctionStub.__get__   s	    
 	r'   N)F)r?   r)   r   r)   r   rb   r!   r"   )r]   r   r   rb   r!   r   )r6   r   r   rb   r!   r   r!   r"   )	rP   rQ   rR   r   r&   rS   r   r   r   rL   r'   r%   r   r      s         . . . . .
 K K K K [K 
 
 
 
 [

     r'   r   _MissingVALUEc                  @    e Zd ZdZ	 	 	 	 	 	 dNdO fdZdPdZdQdZdRdZdSd!ZdTd"Z	dUd#Z
dVd%ZdWd'ZdXd(ZdTd)ZdYd-ZdYd.ZdZd0ZedTd1            ZedYd2            Zed[d5            ZdTd6Zd\d9Zdd:d]d<Zd^d>Zd_d?Z	 d`dadDZdbdGZdcdHZ	 d`dddLZdedMZ xZ S )frv   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).
    rf   NFrk   r)   rm   rn   r(   _all_list[str] | Nonerh   rb   ri   rj   moduleModuleType | Noner!   r"   c	                X   || _         |t          j        |          | _        n|| _        t	          | j                  | _        || _        | j        | _        t                                          ||||           || _	        | j        r | j
                            dg di           d S d S )Ntyping)r   r   ClassVarDictIterableIteratorListLiteral
NamedTupleOptionalTupleUnion)r(   	importlibimport_moduler   r
   rm   resort_memberssuperr&   rk   known_importsupdate)
r$   rk   rm   r(   r   rh   ri   rj   r   	__class__s
            r%   r&   z InspectionStubGenerator.__init__   s     >#1+>>DKK DK&t{33*".>PQQQ& 	 %%       	 	r'   funcobjectr9   r   r   c                Z    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        |j        }|j        d fd	g d fd}dfd} ||           |r0                    t          d|  |                               n$|r"                    t          d                     dfd}	 |||	           |r/                    t          d|  |                               |j        Gt'          d D                       r.t)          |j        |j        j        d D                       }
|
|
 d          pt          |j                  }t          |j        |          S ) Nr>   *argsrY   **kwargskeyr)   r!   rI   c                    | vrd S |          }|dS t          |t                    s                    |          S |S )Nr"   )
isinstancer)   get_type_fullname)r   argtyper   r$   s     r%   get_annotationzHInspectionStubGenerator.get_default_function_sig.<locals>.get_annotation0  sR    +%%t!#&Gvgs++ 7--g666Nr'   r@   rn   get_default_value'Callable[[int, str], object | _Missing]r"   c           	        t          |           D ]\  }} |||          }|t          j        urh|v r	|         }n5
                    |          }|dk    r
                    d          }| d}                    t          ||d                                         t          | 	|          d                     d S )Nr"   _typeshed.Incompletez | NoneT)defaultF)	enumerater   r   get_type_annotationadd_nameappendr   )r@   r   iargdefault_valuer   
incompleter   arglistr   r$   s          r%   add_argszBInspectionStubGenerator.get_default_function_sig.<locals>.add_args=  s     $D// T T3 1 1!S 9 9 66k))"-c"2"&":":="I"I"f,, *.7M)N)NJ)3&<&<&<GNN6#w#E#E#EFFFFNN6#~~c/B/BE#R#R#RSSSS!T Tr'   r   int_argAny | _Missingc                    rK| t                    t                    z
  k    r(| t                    t                    z
  z
           S t          j        S rK   )lenr   r   )r   r   r@   defaultss     r%   get_pos_defaultzIInspectionStubGenerator.get_default_function_sig.<locals>.get_pos_defaultR  sO     &ATS]]!:::SYYX%> ?@@~%r'   *_ir   c                8    r|v r|         S t           j        S rK   )r   r   )r   r   kwonlydefaultss     r%   get_kw_defaultzHInspectionStubGenerator.get_default_function_sig.<locals>.get_kw_defaulta  s(     &#"7"7%c**~%r'   z**c              3  :   K   | ]}|j         d u o|j        du V  d S )NF)typer   r\   r   s     r%   r   zCInspectionStubGenerator.get_default_function_sig.<locals>.<genexpr>n  sF       .
 .
:=CH5!5.
 .
 .
 .
 .
 .
r'   c                *    g | ]}|j         	|j         S rL   rY   r   s     r%   r^   zDInspectionStubGenerator.get_default_function_sig.<locals>.<listcomp>r  s#    3\3\3\SVS[3\CH3\3\3\r'   )r   r)   r!   rI   )r@   rn   r   r   r!   r"   )r   r   r   r)   r!   r   )r   r   r   r)   r!   r   )r
   inspectgetfullargspec	TypeErrorrB   r   r?   infer_c_method_argsrD   r   r   r@   r   varargsvarkwr   
kwonlyargsr   r   allr   )r$   r   r9   argspecr   kwargsr   r   r   r   new_argsrA   r   r   r@   r   r   r   s   `           @@@@@@r%   get_default_function_sigz0InspectionStubGenerator.get_default_function_sig  s    	!066    ?~)",SXs~7NOO238<<    # g...J0G0G0GH!    |#/)'
 /	 	 	 	 	 	 	 !#	T 	T 	T 	T 	T 	T 	T 	T 	T*	& 	& 	& 	& 	& 	& 	& 	'''  	(NN6-g--1H1HIIJJJJ 	(NN6#;;'''	& 	& 	& 	& 	& 	& 	^,,,  	JNN6-v--1G1GHHIII >%# .
 .
AH.
 .
 .
 +
 +
% .#.13\3\3\3\3\ H #"!>(++N/DSX/N/N38Wh777s   ' 
44list[SignatureGenerator]c                    | j         sg S t                      g}| j        r3|                    dt                              | j                             |S Nr   )r
   rU   r(   insertr   r7   )r$   sig_generatorss     r%   get_sig_generatorsz*InspectionStubGenerator.get_sig_generatorsz  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   )rk   r	   print_annotationrm   )r$   r   local_modulesparsed_types       r%   strip_or_importz'InspectionStubGenerator.strip_or_import  sX     $T%56(Aq$??B&&	&&&$$[$2DmTTTr'   objrI   c                $    t          |dd          S )z!Return module name of the object.rQ   Ngetattrr$   r   s     r%   get_obj_modulez&InspectionStubGenerator.get_obj_module  s    sL$///r'   c                J    |                      |          }|du p
|| j        k    S )z<Check if object is considered defined in the current module.N)r   rk   )r$   r   r   s      r%   is_defined_in_modulez,InspectionStubGenerator.is_defined_in_module  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                            |           |                     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               nt7          |          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   rL   xs    r%   <lambda>z9InspectionStubGenerator.generate_module.<locals>.<lambda>  s
    ! r'   r   .r   F)name_is_aliasc                @    h | ]\  }}t          j        |          |S rL   )r   ismodule)r\   r?   r   s      r%   	<setcomp>z:InspectionStubGenerator.generate_module.<locals>.<setcomp>  s-    ]]]swGWX[G\G\]]]]r'   )rx   r   classrW       def)get_membersr   r   sortedr   r  rP   rm   re   rk   rsplitr   import_trackeradd_import_fromreexport
add_importr   r   r   should_reexportset_defined_namesis_functiongenerate_function_stubisclassgenerate_class_stubgenerate_variable_stub_outputr   check_undefined_names)r$   	all_itemsitemsr?   r   rk   pkg_namemod_name
rel_moduleobj_module_name	functionstypes	variablesrx   liner   s                   r%   rw   z'InspectionStubGenerator.generate_module  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:::]]i]]]^^^ 	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__rQ   __weakref____annotations____firstlineno____static_attributes____annotate__)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   r1  r   AttributeError)r$   r   obj_dictresultsr?   values         r%   r  z#InspectionStubGenerator.get_members  s    &-c:&>&> 		. 		.D((.. .T** e}---- "    s   A
A#"A#c                v   ||t          d          u rdS t          j        |          rd|                     |           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.
        Nr"   ztype[]ztyping.Callableztypes.ModuleTypeF)require)r   r   r  r   r   r   r   r   r   s     r%   r   z+InspectionStubGenerator.get_type_annotation  s    
 ;#d++6_S!! 	59411#669999\** 	5==!2333Z(( 	5==!3U=CCC))$s))444r'   c                `    | j         rt          j        |          S t          j        |          S rK   )r
   r   	isbuiltin
isfunctionr   s     r%   r  z#InspectionStubGenerator.is_function  s/     	+$S)))%c***r'   rB   r   r?   c                   | j         rmt          j        |          pXt          |          t          t          j                  t          t          j                  t          t          j                  fv S t          j        |          S rK   )	r
   r   ismethoddescriptorr   r)   index__add__r=   r=  r$   rB   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)rS   classmethod_descriptor)r
   r   r<  r   rP   ismethodrB  s       r%   is_classmethodz&InspectionStubGenerator.is_classmethod/  sN     	)$S)) T#YY-? D . 
 #C(((r'   ClassInfo | Nonec                    |dS | j         r@t          |j        d          }|                    ||          }t	          |t
                    S t	          t          j        |j        |          t
                    S )NFr'  )r
   r   r/   getr   staticmethodr   getattr_static)r$   rB   r?   r   
raw_lookup	raw_values         r%   is_staticmethodz'InspectionStubGenerator.is_staticmethod8  sl    5 	Z,3JNJ,O,OJ"tS11Ii666g4Z^TJJLYYYr'   c                $    t          | dd          S )Nr   Fr   )r   s    r%   is_abstract_methodz*InspectionStubGenerator.is_abstract_methodB  s    s0%888r'   c                J    t          j        |          pt          |d          S )Nfget)r   isdatadescriptorhasattr)rB   r?   r   s      r%   is_propertyz#InspectionStubGenerator.is_propertyF  s"    ',,DV0D0DDr'   propr   c                4    t          | d          o| j        d u S )Nfset)rU  rY  )rW  s    r%   is_property_readonlyz,InspectionStubGenerator.is_property_readonlyJ  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   rP   r   s     r%   is_static_propertyz*InspectionStubGenerator.is_static_propertyN  s'     	99%)WWW5r'   rF   r   c                    t          |          D ]m\  }}|j        D ](}|j        |                     |j                  |_        )|j        1|                    |                     |j                            ||<   nd S )N)rA   )r   r@   r   r   rA   rZ   )r$   rF   r   r]   r   s        r%   process_inferred_sigsz-InspectionStubGenerator.process_inferred_sigsV  s    )) 	X 	XFAsx > >8'#33CH==CH|'!llD4H4H4V4VlWW	X 	Xr'   )rB   rx   c               8   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           |j        r|                     |j                  nd}|                    |                     ||	|                     |                     |||           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   rB   r   z@{}ztyping.overloadzabc.abstractmethodz@staticmethodr   )r$   r/   rY   r/   z@classmethod)
decoratorsr_   )r   r   r)   r   rk   rQ  is_private_namefullnameis_not_in_allrecord_namer?   r   get_signaturesr   r`  r   r   formatr   r   rO  r@   r   r   rD   r_   _indent_docstringextendformat_func_def	_fix_iter)r$   r?   r   rx   rB   r_   r9   r8   rF   rc  r]   s              r%   r  z.InspectionStubGenerator.generate_function_stub^  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=@]TD**3=999PT	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 rK   )re   strip)r\   r!  indents     r%   r   z<InspectionStubGenerator._indent_docstring.<locals>.<genexpr>  s?      UUttv..Bdjjll2BUUUUUUr'   NrW   r   rf   )	
splitlines_indentr   r   r   rr  endswithr   r   )r$   r_   linesr   r!  rs  s        @r%   rj  z)InspectionStubGenerator._indent_docstring  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__rW   r   z&def __iter__(self) -> typing.Iterator[z]
rx   rB   )	rB   r/   r?   r'  r@   r   rA   r   r  )r$   r9   rF   rx   	item_typer]   r   s          r%   rm  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 |r|j        r|                     |j                  nd}|                    | j         d           t+          |t-          d          g||          }|                    |                    | j        | 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   NrS  r   Frb  typing.ClassVarz  # read-onlyrf   r   : [] = ...z	@propertyr$   )r_   )rs  rj   )r   r   rk   rd  re  rf  rg  r?   r^  rZ  r   r   r   rA   rM   r   r   r   ru  r_   rj  r   r   r   _include_docstrings)r$   r?   r}  r   r~  r  r  rB   r_   rS  
alt_docstrr9   staticreadonlyrA   r8   inferred_typeclassvartrailing_commentr]   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EH]\D223=AAAX\	$$%?%?%?@@@!$(8-S\]]]$$NN#|@X #       !($(MM2H$I$IM$$%Md%M%Mm%M%MNNNNNr'   typr   c                    |t           u rdS t          |d|j                  }|                     |          }|dS |dk    r| d| }|S )z,Given a type, return a string representationr   rR   Nr   r   r   )r   r   rP   r   )r$   r  typenamerk   s       r%   r   z)InspectionStubGenerator.get_type_fullname  sg    #::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 )NrW   pybind11_objectr   c              3  8   K   | ]}t          |          V  d S rK   )
issubclass)r\   bbases     r%   r   z9InspectionStubGenerator.get_base_types.<locals>.<genexpr>   s-      ::qz!T**::::::r'   c                `    g | ]*}                                         |                    +S rL   )r   r   )r\   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   rP   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/   parent_classc           
        t          |d          }|                     |          }| j        rt          |d           }d |D             }g }g }	g }
g }g }g }|                     |           |                                  t          |dt          |dd          ||          }|D ]D\  }}|                    ||          }|                     |||          s| 	                    |||          rl|d	k    rd
|v rUd
}| 
                    |||          rd|_        n&| 	                    |||          rd|_        nd|_        |                     ||||           |                     |||          r|                     ||||
|||           t          j        |          r0|                     |          r|                     |||	|           -|                    ||f           F|D ]p\  }}|dk    r||                     |                     |                    }|                     d          }|
                    | j         | d| d| d           q|                                  |                     |          }|rdd                    |          z  }nd}|j        rQ| j        rJt;          |                     |j                            }d| j         | }|                    d          }ng }|s|	s	|
s|s|s|r|                    | j         d| | d           |                     |           |	D ]}|rq|d         ri|d         !                                "                    d          s<|!                                "                    d          r|                    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                    h | ]
}|d          S )r   rL   )r\   r   s     r%   r  z>InspectionStubGenerator.generate_class_stub.<locals>.<setcomp>0  s    %%%!1%%%r'   rf   r   N)parentr=   r&   r/   r$   r{  )r  __hash__r  r  r  r  z(%s)z, r  Fro  zclass :rW   r  z: ...)#r   r  r   r	  rg  rs  r   rJ  rC  rG  rO  rD   r  rV  r  r   r  r   r  r   r   r   r   ru  dedentr  r   r_   r  r   rj  rt  rk  rr  re   )r$   r  r/   rx   r  rM  r  namesmethodsr  r~  r  r  attrsrB   r"  r7  rN  prop_type_namer  r  	bases_strr   r_   r!  s                            r%   r  z+InspectionStubGenerator.generate_class_stub$  s     )0Z(@(@
  %% 	L5&J&JKKKE%%u%%%')#%#%')$$$GCD993|
 
 

 ! #	, #	,KD%"tU33I~~j$66  ,$:M:MD%; ;  , 9$$!U** !%D''
D%@@ 1*,J''((T5AA 1*/J''*0J'++D%T^+____!!*dI>> ,++%!!    '' ,D,E,Ee,L,L ,((ue*(UUUU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 	D$< 	!$"8"89M"N"NOOC,,s,,C66III 	O 	O!2 	Om 	Ow 	OR_ 	OMMT\IIIYIIIJJJMM)$$$ $ $&r
& #2J,,..99'BB& 

//88	& MM"%%%d####MM+,,,MM-(((MM'"""MM-(((((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   Nr  )rd  rk   rf  rg  r   r   r   )r$   r?   r   rx   type_strs        r%   r  z.InspectionStubGenerator.generate_variable_stub  s     )9&B&BD&B&BCC 	tGYGYZ^G_G_ 	F''(@(@(E(EFF++++,,,,,r'   )rf   NFFFN)rk   r)   rm   rn   r(   r)   r   r   rh   rb   ri   rb   rj   rb   r   r   r!   r"   )r   r   r9   r   r!   r   )r!   r   )r   r)   r!   r)   )r   r   r!   rI   )r   r   r!   rb   r   r"  r)   r!   rb   )r   r   r!   r2  )r   r   r!   r)   )rB   r   r?   r)   r   r   r!   rb   )rB   rH  r?   r)   r   r   r!   rb   )rW  r   r!   rb   )rF   r   r!   r"   )
r?   r)   r   r   rx   rn   rB   rH  r!   r"   )r_   r)   r!   r)   )r9   r   rF   r   rx   rn   r!   r"   rK   )r?   r)   r}  r   r   r   r~  rn   r  rn   r  rn   rB   rH  r!   r"   )r  r   r!   r)   )r   r   r!   rn   )
r  r)   r/   r   rx   rn   r  rH  r!   r"   )r?   r)   r   r   rx   rn   r!   r"   )!rP   rQ   rR   r   r&   r   r   r   r   r   rw   r1  r  r   r  rC  rG  rO  rK  rQ  rV  rZ  r^  r`  r  rj  rm  r  r   r  r  r  __classcell__)r   s   @r%   rv   rv      s         "& %!#($() ) ) ) ) ) )Vj8 j8 j8 j8X" " " "U U U U0 0 0 0< < < <
L% L% L% L%\
 
 
 
,   5 5 5 5 + + + +	+ 	+ 	+ 	+) ) ) )Z Z Z Z 9 9 9 \9 E E E \E ; ; ; \;   X X X X \`1. 1. 1. 1. 1. 1.f   $c c c c@ (,FO FO FO FO FOP   V V V V& _chO hO hO hO hOT
- 
- 
- 
- 
- 
- 
- 
-r'   rv   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.
    r<   r   __   r   )re   rv  rY   s    r%   r  r    sR    
 &&&$wt t!4!4 $wd7Nr'   r"  c                ,    |                      d          S )N__pybind11_module_local_rd   )r"  s    r%   r.  r.    s    ??5666r'   r$   rD   	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getinitargsr   floattrunccomplexrb   absbytesdirr   reversedroundr@  entergetitemr@  rY   setitemr   )delattrr   r?   setattrr7  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invertrJ  instanceownerset	reduce_exprotocolexitr   ztype[BaseException] | NonezBaseException | None	tracebackztypes.TracebackType | Noner   r   )re   rv  r   r   )r?   rD   r  r@   s       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!   rb   )rf   )rk   r)   rl   r)   rm   rn   r(   r)   rh   rb   ri   rb   rj   rb   r!   r"   )r?   r)   r!   r  r  )r$   N)r?   r)   rD   r)   r  r   r!   r  )5r   
__future__r   enumr+   r   r   r/  os.pathrr   collections.abcr   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   	mypy.utilr   r   rU   r`   r}   r   Enumr   rv   r  r.  r   rL   r'   r%   <module>r     s   
 # " " " " "          # # # # # # * * * * * * * *                 - - - - - - * * * * * *                                       & % % % % %< < < < <!3 < < <~! ! ! ! !"4 ! ! !HV V V V 	& "$& & & & & &R       8 49Z))}
- }
- }
- }
- }
-/ }
- }
- }
-@	 	 	 	7 7 7 7
 FJk k k k k k kr'   