
    X-Phy                       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'  G d de%          Z( G d de%          Z)d2dZ*	 d3ddddd4d!Z+ G d" d#          Z, ej-        d$d%          Z. G d& d'e"          Z/d5d)Z0d6d+Z1	 d7d8d1Z2dS )9zTStub 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_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_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      M/var/www/html/test/jupyter/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_dir6   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#   r7   r8   inferreds       r$   get_function_sigz+ExternalSignatureGenerator.get_function_sigD   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#   rG   r8   s      r$   get_property_typez,ExternalSignatureGenerator.get_property_typef   s    tr&   )NN)r   r   r   r   r    r!   )r'   r(   r    r   r7   r   r8   r   r    r9   rG   rH   r8   r   r    rH   )__name__
__module____qualname__r%   classmethodr6   rF   rL   rK   r&   r$   r   r   +   sy        [_+ + + + + < < < [<       D     r&   r   c                      e Zd ZddZdd
ZdS )DocstringSignatureGeneratorr7   r   r8   r   r    r9   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>z   s&    RRR#* = =RRRr&   )r   	docstringr>   )is_pybind11_overloaded_function_docstringrA   rB   rC   rD   s       r$   rF   z,DocstringSignatureGenerator.get_function_sigk   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&   rG   rH   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#   rG   r8   rE   s       r$   rL   z-DocstringSignatureGenerator.get_property_type   s_    =$=cmLLH  8QQH  5cmDDHO4r&   NrM   rN   )rO   rP   rQ   rF   rL   rK   r&   r$   rT   rT   j   s<           (     r&   rT   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'   rg   rh   ri   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.
    rf   wzutf-8)encodingN)
osr1   dirnameisdirmakedirsInspectionStubGeneratorgenerate_moduleoutputr+   write)rj   rk   rl   r'   rg   rh   ri   subdirgenrw   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_abstractra   r    r!   c                0    || _         || _        || _        d S rJ   )rO   __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&   r5   list[FunctionSig]c                t    t          |d         j        d                    d |D                       |          S )Nr   
c              3  N   K   | ] }|                                 d d         V  !d S r   )r   rZ   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.   r5   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()
        NrK   )r#   s    r$   __get__zCFunctionStub.__get__   s	    
 	r&   N)F)r>   r(   r   r(   r   ra   r    r!   )r\   r   r   ra   r    r~   )r5   r   r   ra   r    r~   r    r!   )	rO   rP   rQ   r   r%   rR   r   r   r   rK   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 )fru   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).
    re   NFrj   r(   rl   rm   r'   _all_list[str] | Nonerg   ra   rh   ri   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
   rl   resort_memberssuperr%   rj   known_importsupdate)
r#   rj   rl   r'   r   rg   rh   ri   r   	__class__s
            r$   r%   z InspectionStubGenerator.__init__   s     >#1+>>DKK DK&t{33*".>PQQQ& 	 %%       	 	r&   funcobjectr8   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=   *argsrX   **kwargskeyr(   r    rH   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_annotation/  sR    +%%t!#&Gvgs++ 7--g666Nr&   r?   rm   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 rJ   )lenr   r   )r   r   r?   defaultss     r$   get_pos_defaultzIInspectionStubGenerator.get_default_function_sig.<locals>.get_pos_defaultQ  sO     &ATS]]!:::SYYX%> ?@@~%r&   *_ir   c                8    r|v r|         S t           j        S rJ   )r   r   )r   r   kwonlydefaultss     r$   get_kw_defaultzHInspectionStubGenerator.get_default_function_sig.<locals>.get_kw_default`  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>m  sF       .
 .
:=CH5!5.
 .
 .
 .
 .
 .
r&   c                *    g | ]}|j         	|j         S rK   rX   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    rH   )r?   rm   r   r   r    r!   )r   r   r   r(   r    r   )r   r   r   r(   r    r   )r
   inspectgetfullargspec	TypeErrorrA   r   r>   infer_c_method_argsrC   r   r   r?   r   varargsvarkwr   
kwonlyargsr   r   allr   )r#   r   r8   argspecr   kwargsr   r   r   r   new_argsr@   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
   rT   r'   insertr   r6   )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   )rj   r	   print_annotationrl   )r#   r   local_modulesparsed_types       r$   strip_or_importz'InspectionStubGenerator.strip_or_import  sX     $T%56(Aq$??B&&	&&&$$[$2DmTTTr&   objrH   c                $    t          |dd          S )z!Return module name of the object.rP   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   rj   )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   rK   xs    r$   <lambda>z9InspectionStubGenerator.generate_module.<locals>.<lambda>  s
    ! r&   r   .r   F)name_is_aliasc                @    h | ]\  }}t          j        |          |S rK   )r   ismodule)r[   r>   r   s      r$   	<setcomp>z:InspectionStubGenerator.generate_module.<locals>.<setcomp>  s-    ]]]swGWX[G\G\]]]]r&   )rw   r   classrV       def)get_membersr   r   sortedr   r  rO   rl   rd   rj   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   rj   pkg_namemod_name
rel_moduleobj_module_name	functionstypes	variablesrw   liner   s                   r$   rv   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__rP   __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   r0  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 rJ   )r
   r   	isbuiltin
isfunctionr   s     r$   r  z#InspectionStubGenerator.is_function  s/     	+$S)))%c***r&   rA   r   r>   c                   | j         rmt          j        |          pXt          |          t          t          j                  t          t          j                  t          t          j                  fv S t          j        |          S rJ   )	r
   r   ismethoddescriptorr   r(   index__add__r<   r<  r#   rA   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)rR   classmethod_descriptor)r
   r   r;  r   rO   ismethodrA  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#   rA   r>   r   
raw_lookup	raw_values         r$   is_staticmethodz'InspectionStubGenerator.is_staticmethod7  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_methodA  s    s0%888r&   c                J    t          j        |          pt          |d          S )Nfget)r   isdatadescriptorhasattr)rA   r>   r   s      r$   is_propertyz#InspectionStubGenerator.is_propertyE  s"    ',,DV0D0DDr&   propr   c                4    t          | d          o| j        d u S )Nfset)rT  rX  )rV  s    r$   is_property_readonlyz,InspectionStubGenerator.is_property_readonlyI  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   rO   r   s     r$   is_static_propertyz*InspectionStubGenerator.is_static_propertyM  s'     	99%)WWW5r&   rE   r   c                    t          |          D ]m\  }}|j        D ](}|j        |                     |j                  |_        )|j        1|                    |                     |j                            ||<   nd S )N)r@   )r   r?   r   r   r@   rY   )r#   rE   r   r\   r   s        r$   process_inferred_sigsz-InspectionStubGenerator.process_inferred_sigsU  s    )) 	X 	XFAsx > >8'#33CH==CH|'!llD4H4H4V4VlWW	X 	Xr&   )rA   rw   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   rA   r   z@{}ztyping.overloadzabc.abstractmethodz@staticmethodr   )r#   r.   rX   r.   z@classmethod)
decoratorsr^   )r   r   r(   r   rj   rP  is_private_namefullnameis_not_in_allrecord_namer>   r   get_signaturesr   r_  r   r   formatr   r   rN  r?   r   r   rC   _indent_docstringextendformat_func_def	_fix_iter)r#   r>   r   rw   rA   r^   r8   r7   rE   rb  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 	:..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 rJ   )rd   strip)r[   r   indents     r$   r   z<InspectionStubGenerator._indent_docstring.<locals>.<genexpr>  s?      UUttv..Bdjjll2BUUUUUUr&   NrV   r   re   )	
splitlines_indentr   r   r   rp  endswithr   r   )r#   r^   linesr   r   rq  s        @r$   ri  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__rV   r   z&def __iter__(self) -> typing.Iterator[z]
rw   rA   )	rA   r.   r>   r&  r?   r   r@   r~   r  )r#   r8   rE   rw   	item_typer\   r   s          r$   rl  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   NrR  r   Fra  typing.ClassVarz  # read-onlyre   r   : [] = ...z	@propertyr#   )rq  )r   r   rj   rc  rd  re  rf  r>   r]  rY  r   r   r   r@   rL   r   r   r   rs  r   r   r   )r#   r>   r{  r   r|  r}  r~  rA   r^   rR  
alt_docstrr8   staticreadonlyr@   r7   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$$%?%?%?@@@!$(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                  }|                     |          }|dS |dk    r| d| }|S )z,Given a type, return a string representationr   rQ   Nr   r   r   )r   r   rO   r   )r#   r  typenamerj   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 )NrV   pybind11_objectr   c              3  8   K   | ]}t          |          V  d S rJ   )
issubclass)r[   bbases     r$   r   z9InspectionStubGenerator.get_base_types.<locals>.<genexpr>  s-      ::qz!T**::::::r&   c                `    g | ]*}                                         |                    +S rK   )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   rO   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}|	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                    h | ]
}|d          S )r   rK   )r[   r   s     r$   r  z>InspectionStubGenerator.generate_class_stub.<locals>.<setcomp>+  s    %%%!1%%%r&   re   r   N)parentr<   r%   r.   r#   ry  )r  __hash__r  r  r  r  z(%s)z, zclass :rV   r  z: ...)r   r  r   r  rf  rq  r   rI  rB  rF  rN  rC   r  rU  r  r   r  r   r  r   r   r   r   rs  dedentr  r   rp  rd   )r#   r  r.   rw   r  rL  r  namesmethodsr  r|  r}  r~  attrsrA   r!  r6  rM  prop_type_namer  r  	bases_strr   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 	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   Nr  )rc  rj   re  rf  r   r   r   )r#   r>   r   rw   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&   )re   NFFFN)rj   r(   rl   rm   r'   r(   r   r   rg   ra   rh   ra   ri   ra   r   r   r    r!   )r   r   r8   r   r    r   )r    r   )r   r(   r    r(   )r   r   r    rH   )r   r   r    ra   r   r!  r(   r    ra   )r   r   r    r1  )r   r   r    r(   )rA   r   r>   r(   r   r   r    ra   )rA   rG  r>   r(   r   r   r    ra   )rV  r   r    ra   )rE   r   r    r!   )
r>   r(   r   r   rw   rm   rA   rG  r    r!   )r^   r(   r    r(   )r8   r   rE   r   rw   rm   r    r!   rJ   )r>   r(   r{  r   r   r   r|  rm   r}  rm   r~  rm   rA   rG  r    r!   )r  r   r    r(   )r   r   r    rm   )
r  r(   r.   r   rw   rm   r  rG  r    r!   )r>   r(   r   r   rw   rm   r    r!   )!rO   rP   rQ   r   r%   r   r   r   r   r   rv   r0  r  r   r  rB  rF  rN  rJ  rP  rU  rY  r]  r_  r  ri  rl  r  r   r  r  r  __classcell__)r   s   @r$   ru   ru      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 \`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& _ccO cO cO cO cOJ
- 
- 
- 
- 
- 
- 
- 
-r&   ru   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   )rd   rt  rX   s    r$   r  r    sR    
 &&&$wt t!4!4 $wd7Nr&   r!  c                ,    |                      d          S )N__pybind11_module_local_rc   )r!  s    r$   r-  r-    s    ??5666r&   r#   rC   	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complexra   absbytesdirr   reversedroundr?  entergetitemr?  rX   setitemr   )delattrr   r>   setattrr6  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invertrI  instanceownerset	reduce_exprotocolexitr   ztype[BaseException] | NonezBaseException | None	tracebackztypes.TracebackType | Noner   r   )rd   rt  r   r   )r>   rC   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    ra   )re   )rj   r(   rk   r(   rl   rm   r'   r(   rg   ra   rh   ra   ri   ra   r    r!   )r>   r(   r    r  r  )r#   N)r>   r(   rC   r(   r  r   r    r  )3r   
__future__r   enumr*   r   r   r.  os.pathrq   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   r   rT   r_   r|   r~   Enumr   ru   r  r-  r   rK   r&   r$   <module>r     s   
 # " " " " "          # # # # # # * * * * * * * *                 - - - - - - * * * * * *                                      < < < < <!3 < < <~! ! ! ! !"4 ! ! !HV V V V 	& "$& & & & & &R       8 49Z))t
- t
- t
- t
- t
-/ t
- t
- t
-n	 	 	 	7 7 7 7
 FJk k k k k k kr&   