
    %^g#                       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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(	 ddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ) G d d      Z* G d de       Z+ddZ,ddZ-	 d	 	 	 	 	 	 	 ddZ.y) zTStub generator for C modules.

The public interface is via the mypy.stubgen module.
    )annotationsN)FunctionType
ModuleType)AnyCallable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                  P    e Zd Z	 d	 	 	 	 	 ddZedd       Z	 	 	 	 	 	 d	dZd
dZy)ExternalSignatureGeneratorNc                0    |xs i | _         |xs i | _        y)z
        Takes a mapping of function/method names to signatures and class name to
        class signatures (usually corresponds to __init__).
        N)	func_sigs
class_sigs)selfr   r   s      -lib/python3.12/site-packages/mypy/stubgenc.py__init__z#ExternalSignatureGenerator.__init__*   s     #b$*    c                8   g }g }t        j                   | d      D ]<  }t        |      5 }t        |j                               \  }}ddd       |z  }|z  }> t	        t        |            }t	        t        |            }	t        ||	      S # 1 sw Y   IxY w)z+Instantiate from a directory of .rst files.z/*.rstN)globopenr   	readlinesdictr   r   )
clsdoc_dirall_sigsall_class_sigspathfloc_sigsloc_class_sigssigsr   s
             r!   from_doc_dirz'ExternalSignatureGenerator.from_doc_dir4   s     !$&II	01Ddq+?+N(.  Hn,N	 2
 *8450@A
)$
;; s   BB	c                b   |j                   r|j                  dv r|j                  | j                  vrx|j                   j                  | j                  v rVt	        |j                  t        | j                  |j                   j                           t        |j                              gS |j                  | j                  vry t	        |j                  t        | j                  |j                           d       g}|j                   r&| j                  ||j                   j                        S |S )N__new__r"   nameargsret_type)	
class_infor7   r   r   r   r   r   remove_self_typeself_var)r    default_sigctxinferreds       r!   get_function_sigz+ExternalSignatureGenerator.get_function_sigB   s    
 NN33.##t6 :4??3>>K^K^;_`2388<  884>>) XX6t~~chh7OP
 >>((3>>3J3JKKOr#   c                     y N )r    default_typer>   s      r!   get_property_typez,ExternalSignatureGenerator.get_property_typed   s    r#   )NN)r   dict[str, str] | Noner   rF   returnNone)r*   strrG   r   r=   r   r>   r   rG   zlist[FunctionSig] | NonerD   
str | Noner>   r   rG   rL   )__name__
__module____qualname__r"   classmethodr2   r@   rE   rC   r#   r!   r   r   )   sY    [_+.+CX+	+ < < & -< 	! Dr#   r   c                  (    e Zd Z	 	 	 	 	 	 ddZddZy)DocstringSignatureGeneratorc                   t        |j                  |j                        }|r1|j                  J t        |j                  |j                        r|d= |j                  r|sd|j                  dk(  rUt        |j                  j                  |j                  j                        }|r|D cg c]  }|j                  d       }}| j                  ||j                  j                        S |S c c}w )Nr"   r7   )r   	docstringr7   )is_pybind11_overloaded_function_docstringr:   _replacer;   r<   )r    r=   r>   r?   sigs        r!   r@   z,DocstringSignatureGenerator.get_function_sigi   s     ,CMM388D==,,,8QRL>>J 63CNN4L4LcnnNaNabIQR#* =HR((3>>3J3JKKO  Ss   +C.c                    |j                   Tt        |j                         }|r|S t        |j                   |j                        }|r|S t	        |j                         }|S y)z:Infer property type from docstring or docstring signature.N)rV   r   r   r7   r   )r    rD   r>   r?   s       r!   rE   z-DocstringSignatureGenerator.get_property_type}   sT    ==$=cmmLH8QH5cmmDHOr#   NrJ   rK   )rM   rN   rO   r@   rE   rC   r#   r!   rR   rR   h   s$    &-<	!(r#   rR   c                *    | j                  | d      S )Nz((*args, **kwargs)
Overloaded function.


startswith)rV   r7   s     r!   rW   rW      s    4&(S TUUr#   Finclude_privateexport_lessinclude_docstringsc               x   t         j                  j                  |      }|r4t         j                  j                  |      st        j                  |       t        | |||||      }|j                          |j                         }	t        |dd      5 }
|
j                  |	       ddd       y# 1 sw Y   yxY w)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.
    r^   wzutf-8)encodingN)
osr-   dirnameisdirmakedirsInspectionStubGeneratorgenerate_moduleoutputr&   write)module_nametargetknown_modulesr*   r_   r`   ra   subdirgenrk   files              r!   generate_stub_for_c_modulers      s    , WW__V$FbggmmF+
F
!'-C ZZ\F	fcG	,

6 
-	,	,s   B00B9c                  J    e Zd ZdZdddZedd	d       Zedd
d       ZddZy)CFunctionStubzR
    Class that mimics a C function in order to provide parseable docstrings.
    c                .    || _         || _        || _        y rB   )rM   __doc____abstractmethod__)r    r7   docis_abstracts       r!   r"   zCFunctionStub.__init__   s    "-r#   c                R    t        |j                  |j                         d d |      S N)ru   r7   
format_sig)r)   rY   rz   s      r!   	_from_sigzCFunctionStub._from_sig   s#    SXXs~~'7'<kJJr#   c                b    t        |d   j                  dj                  d |D              |      S )Nr   
c              3  B   K   | ]  }|j                         d d   y wr|   )r~   ).0rY   s     r!   	<genexpr>z+CFunctionStub._from_sigs.<locals>.<genexpr>   s     #JTcCNN$4Sb$9Ts   )ru   r7   join)r)   r1   rz   s      r!   
_from_sigszCFunctionStub._from_sigs   s-    GLL$))#JT#JJK
 	
r#   c                     y)z
        This exists to make this object look like a method descriptor and thus
        return true for CStubGenerator.ismethod()
        NrC   )r    s    r!   __get__zCFunctionStub.__get__   s    
 	r#   N)F)r7   rI   ry   rI   rz   boolrG   rH   )rY   r   rz   r   rG   ru   )r1   list[FunctionSig]rz   r   rG   ru   rG   rH   )	rM   rN   rO   rw   r"   rP   r   r   r   rC   r#   r!   ru   ru      s;    .
 K K 
 

r#   ru   c                      e Zd ZdZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d  fdZd!dZd"dZd#dZd$dZd%dZ	d&d	Z
d'd
Zd(dZd)dZd%dZd*dZd*dZd+dZed%d       Zed*d       Zed,d       Zd%dZd-dZdd	 	 	 	 	 	 	 	 	 d.dZd/dZ	 	 	 	 	 	 	 	 d0dZ	 d1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2dZd3dZd4dZ	 d1	 	 	 	 	 	 	 	 	 d5dZd6dZ xZ S )7ri   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).
    Nc	                J   || _         |t        j                  |      | _        n|| _        t	        | j                        | _        || _        | j                  | _        t        	| !  ||||       || _	        | j                  r | j                  j                  dg di       y y )Ntyping)r   r   ClassVarDictIterableIteratorListLiteral
NamedTupleOptionalTupleUnion)r*   	importlibimport_modulemoduler
   ro   resort_memberssuperr"   rm   known_importsupdate)
r    rm   ro   r*   _all_r_   r`   ra   r   	__class__s
            r!   r"   z InspectionStubGenerator.__init__   s     >#11+>DK DK&t{{3*"..>PQ& %%  r#   c                    d } j                   s	 t        j                  |      }||j                  St        |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} ||       |r%j%                  t        d	|  |                   n|rj%                  t        d	             dfd
}	 |||	       |r$j%                  t        d|  |                   |j                  ft'        d D              rTt)        |j                  |j                  j                  D 
cg c]  }
|
j                  s|
j                   c}
      }|| d      xs t        |j                        }t        |j                  |      S # t        $ r Y 7w xY wc c}
w )Nr6   *argsrU   **kwargsrG   c                d    | vry |    }|yt        |t              sj                  |      S |S )NrH   )
isinstancerI   get_type_fullname)keyargtyper   r    s     r!   get_annotationzHInspectionStubGenerator.get_default_function_sig.<locals>.get_annotation*  s@    +%!#&Ggs+--g66Nr#   c           	     0   t        |       D ]  \  }} |||      }|T|v r|   }n,
j                  |      }|dk(  r
j                  d      }| d}j                  t	        ||d             ej                  t	        | 	|      d              y )NrH   _typeshed.Incompletez | NoneT)defaultF)	enumerateget_type_annotationadd_nameappendr   )r8   get_default_valueiargdefault_valuer   
incompleter   arglistr   r    s          r!   add_argszBInspectionStubGenerator.get_default_function_sig.<locals>.add_args7  s     $D/3 1!S 9 ,k)"-c"2"&":":="I"f, *.7M)NJ)3G&<GNN6#w#EFNN6#~c/BE#RS! *r#   c                x    r7| t              t              z
  k\  r| t              t              z
  z
     S y rB   )len)r   _argr8   defaultss     r!   get_pos_defaultzIInspectionStubGenerator.get_default_function_sig.<locals>.get_pos_defaultL  s:    ATS]!::SYX%> ?@@r#   *c                ,    rj                  |      S y rB   )get)_ir   kwonlydefaultss     r!   get_kw_defaultzHInspectionStubGenerator.get_default_function_sig.<locals>.get_kw_default[  s    %))#..r#   z**c              3  X   K   | ]"  }|j                   d u xr |j                  du  $ y w)NF)typer   )r   r   s     r!   r   zCInspectionStubGenerator.get_default_function_sig.<locals>.<genexpr>h  s.      .
AH#CHH5!55s   (*)r   rI   rG   rL   )r8   	list[str]r   z#Callable[[int, str], object | None]rG   rH   )r   intr   rI   rG   
Any | None)r   r   r   rI   rG   r   )r
   inspectgetfullargspec	TypeErrorr:   r   r7   infer_c_method_argsr<   r   r   r8   r   varargsvarkwr   
kwonlyargsr   r   allr   )r    funcr>   argspecr   kwargsr   r   r   r   r   new_argsr9   r   r   r8   r   r   r   s   `            @@@@@@r!   get_default_function_sigz0InspectionStubGenerator.get_default_function_sig  sB   !006 ?~~)",SXXs~~7N7NO2388<  # g.J0GH!  ||##//))''
 //	 !#	T	T0S	T	T 	T*	 	' NN6AgY-1HIJNN6#;'	 	^, NN6Bvh-1GHI >>%# .
AH.
 +
 .#..113\SVS[S[CHH3\H #"!(+N/DSXX/N388Wh77I  | 4]s   I 6I'I'	I$#I$c                    | j                   sg S t               g}| j                  r/|j                  dt        j                  | j                               |S Nr   )r
   rR   r*   insertr   r2   )r    sig_generatorss     r!   get_sig_generatorsz*InspectionStubGenerator.get_sig_generatorst  sK    I8S8U7VN||%%a)C)P)PQUQ]Q])^_!!r#   c                    d| j                   g}t        |ddd      d   }|J |       | 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   )rm   r	   print_annotationro   )r    	type_namelocal_modulesparsed_types       r!   strip_or_importz'InspectionStubGenerator.strip_or_import~  sU     $T%5%56(Aq$?B&1	1&$$[$2D2DmTTr#   c                    t        |dd      S )z!Return module name of the object.rN   Ngetattrr    objs     r!   get_obj_modulez&InspectionStubGenerator.get_obj_module  s    sL$//r#   c                N    | j                  |      }|du xs || j                  k(  S )z<Check if object is considered defined in the current module.N)r   rm   )r    r   r   s      r!   is_defined_in_modulez,InspectionStubGenerator.is_defined_in_module  s,    $$S)~;4+;+;!;;r#   c           	     .	   | j                  | j                        }| j                  rt        |d       }g }|D ]  \  }}t	        j
                  |      r|j                  | j                  v r|j                  }|j                  | j                  dz         rl|j                  dd      \  }}|t        | j                        d  xs d}| j                  j                  |||fg       | j                  j                  |       | j                  j                  ||       | j                  j                  |       | j!                  |      r*t	        j
                  |      s|j#                  ||f       >| j%                  |      }	|	sS| j                  j                  |	|d fg       | j'                  ||	d      s| j                  j                  |        | j)                  |D ch c]  \  }}t	        j
                  |      r| c}}       | j                  rg }
g }g }ng }|x}
x}}|D ]i  \  }}| j+                  |      r| j-                  |||
       ,t	        j.                  |      r| j1                  |||       V| j3                  |||       k g | _        | j                  r|D ]   }| j4                  j#                  |dz          " |D ]g  }|j                  d	      r6| j4                  r*| j4                  d
   r| j4                  j#                  d       | j4                  j#                  |dz          i | j4                  r|
r| j4                  j#                  d       |
D ]   }| j4                  j#                  |dz          " nt7              D ]  \  }}| j4                  rW|j                  d	      rF| j4                  d
   j                  d	      rct        |      |dz   kD  r||dz      j                  d      s;| j4                  rJ| j4                  d
   j                  d      r,|j                  d      s| j4                  j#                  d       | j4                  j#                  |dz           | j9                          y c c}}w )Nc                    | d   S r   rC   xs    r!   <lambda>z9InspectionStubGenerator.generate_module.<locals>.<lambda>  s    !r#   r   .r   F)name_is_alias)rk   r   classrT       def)get_membersr   r   sortedr   ismodulerM   ro   r]   rm   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itemsr7   r   rm   pkg_namemod_name
rel_moduleobj_module_name	functionstypes	variablesrk   liner   s                   r!   rj   z'InspectionStubGenerator.generate_module  s   $$T[[1	yn=I"ID#$9K9K)K!ll))$*:*:S*@A)4););C)C&Hh!)#d.>.>*?*A!B!IcJ''77
hPTEUDVW''006 ''22;E''006**3/8H8H8MdC[) #'"5"5c":"''774QU,X++D/QV+W++44T:- #0 	i]iswGWGWX[G\i]^#%I!E#%I "F,22I2	ID#$++D#i+H%((s5(A++D#i+H  !##D4K0 "??7+bAQLL''-##D4K0  ||	##D)!##D4K0 " %V,4LL0 LL,77@K!a%/F1q5M4L4LV4T LLR(33E: OOE2LL''-##D4K0 - 	""$_  ^s   0R
R
c                r    |dv xs2 || j                   v xs" t        |      xs t        j                  |      S )N)r   __getattribute____str____repr__rw   __dict__rN   __weakref____annotations____firstlineno____static_attributes____annotate__)IGNORED_DUNDERSis_pybind_skipped_attributekeyword	iskeyword)r    attrs     r!   is_skipped_attributez,InspectionStubGenerator.is_skipped_attribute  sM     ' t+++'  +40!'"   &%	
r#   c                    t        |d      }g }|D ]4  }| j                  |      r	 t        ||      }|j                  ||f       6 |S # t        $ r Y Dw xY w)Nr  )r   r   r   AttributeError)r    r   obj_dictresultsr7   values         r!   r   z#InspectionStubGenerator.get_members  sl    &-c:&>D((..T* e}-  	 " s   A

	AAc                2   ||t        d      u ryt        j                  |      rd| j                  |       dS t	        |t
              r| j                  d      S t	        |t              r| j                  dd      S | j                  t        |            S )	z
        Given an instance, return a string representation of its type that is valid
        to use as a type annotation.
        NrH   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+__S!411#67q99\*==!233Z(==!3U=CC))$s)44r#   c                n    | j                   rt        j                  |      S t        j                  |      S rB   )r
   r   	isbuiltin
isfunctionr   s     r!   r   z#InspectionStubGenerator.is_function  s-    $$S))%%c**r#   c                   | j                   rlt        j                  |      xsU t        |      t        t        j
                        t        t        j                        t        t        j                        fv S t        j                  |      S rB   )	r
   r   ismethoddescriptorr   rI   index__add__r5   r+  r    r:   r7   r   s       r!   	is_methodz!InspectionStubGenerator.is_method  sj    --c2 d3iSYYS[[!S[[!D 7  %%c**r#   c                    | j                   r.t        j                  |      xs t        |      j                  dv S t        j
                  |      S )N)rP   classmethod_descriptor)r
   r   r*  r   rM   ismethodr0  s       r!   is_classmethodz&InspectionStubGenerator.is_classmethod)  sM    $$S) T#Y-?-? D . 
 ##C((r#   c                    |y| j                   r8t        |j                  d      }|j                  ||      }t	        |t
              S t	        t        j                  |j                  |      t
              S )NFr  )r
   r   r)   r   r   staticmethodr   getattr_static)r    r:   r7   r   
raw_lookup	raw_values         r!   is_staticmethodz'InspectionStubGenerator.is_staticmethod2  s_    ,3JNNJ,OJ"tS1Ii66g44Z^^TJLYYr#   c                    t        | dd      S )Nrx   Fr   )r   s    r!   is_abstract_methodz*InspectionStubGenerator.is_abstract_method<  s    s0%88r#   c                H    t        j                  |      xs t        |d      S )Nfget)r   isdatadescriptorhasattr)r:   r7   r   s      r!   is_propertyz#InspectionStubGenerator.is_property@  s    '',DV0DDr#   c                :    t        | d      xr | j                  d u S )Nfset)rA  rD  )props    r!   is_property_readonlyz,InspectionStubGenerator.is_property_readonlyD  s    tV$:d)::r#   c                J    | j                   rt        |      j                  dv S y)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_propertyH  s$    9%%)WWWr#   c                   t        |      D ]~  \  }}|j                  D ]/  }|j                  | j                  |j                        |_        1 |j                  Q|j                  | j                  |j                              ||<    y )N)r9   )r   r8   r   r   r9   rX   )r    r?   r   rY   r   s        r!   process_inferred_sigsz-InspectionStubGenerator.process_inferred_sigsP  sr    )FAsxx88'#33CHH=CH   ||'!llD4H4H4VlW *r#   )r:   c                  t        |dd      }t        |t              sd}t        | j                  ||| j                  |      |      }| j                  ||j                        s| j                  |      ry| j                  |j                         | j                  ||      }| j                  || j                  |      }| j                  |       g }	t        |      dkD  r/|	j!                  dj#                  | j%                  d                   |j&                  r/|	j!                  dj#                  | j%                  d                   || j)                  |||      r|	j!                  d       n|D ]Z  }
|
j*                  r|
j*                  d	   j                  d
vs+|
j*                  j-                  d	t/        |j0                               \ |d	   j*                  r0|d	   j*                  d	   j                  dk(  r|	j!                  d       |r| j3                  |      }|j5                  | j7                  ||	|             | j9                  |||       y)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'.
        rw   NrV   rz   r:   r   z@{}ztyping.overloadzabc.abstractmethodz@staticmethodr   )r    r)   rU   r)   z@classmethod)
decoratorsrV   )r   r   rI   r   rm   r=  is_private_namefullnameis_not_in_allrecord_namer7   r   get_signaturesr   rL  r   r   formatr   rz   r;  r8   r   r   r<   _indent_docstringextendformat_func_def	_fix_iter)r    r7   r   rk   r:   rV   r>   r=   r?   rO  rY   s              r!   r  z.InspectionStubGenerator.generate_function_stubX  s    !i6	)S)I//4!
 cll3t7I7I$7O"33C=&&{D4G4GM""8,
x=1ell4==9J+KLM??ell4==9M+NOP!##Jc:!!/2#C88sxx{'7'7'N6z7J7J+KL $ A;##(8(8(;(@(@E(I%%n5..y9Id**8
V_*`asHf-r#   c                   |j                  d      }| j                  dz   t        |      dkD  rFt        fd|D              s2t	        |dd       D ]!  \  }}|j                         s|z   ||dz   <   # |d   j                  d      r+t        |      dkD  r|j                         n|d   dd |d<   d	j                  |      S )
zQFix indentation of docstring extracted from pybind11 or other binding generators.T)keependsr   r   c              3  f   K   | ](  }|j                        xs |j                           * y wrB   )r]   strip)r   r  indents     r!   r   z<InspectionStubGenerator._indent_docstring.<locals>.<genexpr>  s,     Uuttv.Bdjjl2BBus   .1NrT   r    )	
splitlines_indentr   r   r   r]  endswithr   r   )r    rV   linesr   r  r^  s        @r!   rV  z)InspectionStubGenerator._indent_docstring  s    $$d$3&u:>UuUU(qr3GAtzz|'-}a!e  4 9d#5zA~V$!"IcrNb	wwu~r#   c                   |j                   r|j                   j                  |j                  dk(  rd|j                   j                  j                  vrsd}|D ]9  }|j                  s|j                  d   j
                  dk(  s-|j                  } n |yt        dd| d      }| j                  d|||j                          yyyyy)	zqEnsure that objects which implement old-style iteration via __getitem__
        are considered iterable.
        N__getitem____iter__rT   r   z&def __iter__(self) -> typing.Iterator[z]
rk   r:   )	r:   r)   r7   r  r8   r   r9   ru   r  )r    r>   r?   rk   	item_typerY   r   s          r!   rY  z!InspectionStubGenerator._fix_iter  s     NN"".M)#.."4"4"="==$(I88 1 1U : #I    DYKsSC ''
CSVSaSa'b > * / r#   c           
     >   t        |dd      }t        |dd      }	|	rt        |	dd      }
|
r|r	|d|
z   z  }n|
r|
}t        | j                  ||d|      }| j                  ||j                        s| j                  |      ry| j                  |j                         | j                  |      }| j                  |      }|r!| j                  | j                  |            }n| j                  ||      }|j                  }| j                  || j                  |      }|| j                  |      }|rS| j!                  d      }|rdnd	}|| j!                  d
      }|j#                  | j$                   | d| d| d|        y|ra|j#                  | j$                   d       t'        |t)        d      g|      }|j#                  |j+                  | j$                               y|| j!                  d
      }|j#                  | j$                   | d|        y)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
        rw   Nr?  r   FrN  typing.ClassVarz  # read-onlyr_  r   : [] = ...z	@propertyr    )r^  )r   r   rm   rP  rQ  rR  rS  r7   rJ  rF  r   r   r   r9   rE   r   r   r   ra  r   r   r~   )r    r7   raw_objr   static_propertiesrw_propertiesro_propertiesr:   rV   r?  
alt_docstrr>   staticreadonlyr9   r=   inferred_typeclassvartrailing_commentrY   s                       r!   generate_property_stubz.InspectionStubGenerator.generate_property_stub  s   $ GY5	w- y$7JiTJ..	&	diUWa
 cll3t7I7I$7O"((1,,W5#'#7#78P8PQT8U#VH77EK"++H..x9L9LcR$ 00?M}}%67H2:$ $.D E$$<<.b
!M?'JZI[\ $$~Y%?@!$(8-H$$S^^4<<^%HI ($(MM2H$IM$$~dV2m_%MNr#   c                    |t         u ryt        |d|j                        }| j                  |      }|J |       |dk7  r| d| }|S )z,Given a type, return a string representationr   rO   r   r   )r   r   rM   r   )r    typtypenamerm   s       r!   r   z)InspectionStubGenerator.get_type_fullname  s\    #:3=))#.&++&*$%az2Hr#   c                F   t         j                  |      }|d   t        u r|d= |r|d   j                  dk(  r|d= |dd  }g }|D ](  t	        fd|D              r|j                         * |D cg c]"  }| j                  | j                  |            $ c}S c c}w )NrT   pybind11_objectr   c              3  6   K   | ]  }t        |        y wrB   )
issubclass)r   bbases     r!   r   z9InspectionStubGenerator.get_base_types.<locals>.<genexpr>  s     :Eqz!T*Es   )r   mroobjectrM   anyr   r   r   )r    r   	all_basesbasesr  s       `r!   get_base_typesz&InspectionStubGenerator.get_base_types  s    HHSM	R=F"" 2//3DD"abM	D:E::T"  PUUut$$T%;%;D%ABuUUUs   4'Bc           
        t        |d      }| j                  |      }| j                  rt        |d       }|D ch c]  }|d   	 }}g }	g }
g }g }g }g }| j	                  |       | j                          t        |dt        |dd      ||      }|D ]  \  }}|j                  ||      }| j                  |||      s| j                  |||      r_|d	k(  rd
|v rId
}| j                  |||      rd|_        n"| j                  |||      rd|_        nd|_        | j                  |||	|       | j                  |||      r| j                  |||||||       t        j                   |      r(| j#                  |      r| j%                  |||
|       |j'                  ||f        |D ]d  \  }}|dk(  r|| j)                  | j+                  |            }| j-                  d      }|j'                  | j.                   | d| d| d       f | j1                          | j3                  |      }|rddj5                  |      z  }nd}|
s|s|s|	s|r|j'                  | j.                   d| | d       |
D ]l  }|rW|d   rR|d   j7                         j9                  d      s0|j7                         j9                  d      r|j'                  d       |j'                  |       n |D ]  }|j'                  |        |D ]  }|j'                  |        |	D ]  }|j'                  |        |D ]  }|j'                  |        y|j'                  | j.                   d| | d       yc c}w )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    0DQqT0Jr#   r   r   r_  rw   N)parentr5   r"   r)   r    rg  )parent_class__hash__rj  rk  rl  rm  z(%s)z, zclass :rT   r   z: ...)r   r   r   r   rS  r^  r   r   r1  r5  r;  r<   r  rB  rx  r   r  r   r  r   r   r   r   ra  dedentr  r   r]  r]   )r    
class_namer)   rk   r  r9  r  r   namesmethodsr  ro  rp  rq  attrsr:   r  r%  r:  prop_type_namerv  r  	bases_strr  s                           r!   r  z+InspectionStubGenerator.generate_class_stub  s    )0Z(@
  %5&JKE$%u!1u%')#%#%')$GCD93|

 !KD%"tU3I~~j$6$:M:MD%; 9$!U* !%D''
D%@*,J'((T5A*/J'*0J'++D%T^+_!!*dI>++%!! 'D,E,Ee,L((ue*(UdE]+G !J !KD%z!em!11$2J2J52QRN}}%67H$$~dV2hZqHXX_%`a ! 	##C(5!11II%']MMT\\N&YKqIJr
"2J,,.99'B

//8MM"%d#  *d# *%d# &d#  %d# & MMT\\N&YKuMNo &s   M6c                    | j                  || j                   d|       s| j                  |      ry| j                  |       | j	                  | j                  |            }|j                  | d|        y)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   Nrk  )rP  rm   rR  rS  r   r   r   )r    r7   r   rk   type_strs        r!   r  z.InspectionStubGenerator.generate_variable_stub{  sw     )9)9(:!D6&BCtGYGYZ^G_''(@(@(EFb
+,r#   )r_  NFFFN)rm   rI   ro   r   r*   rI   r   list[str] | Noner_   r   r`   r   ra   r   r   zModuleType | NonerG   rH   )r   r  r>   r   rG   r   )rG   zlist[SignatureGenerator])r   rI   rG   rI   )r   r  rG   rL   )r   r  rG   r   r   r  rI   rG   r   )r   r  rG   zlist[tuple[str, Any]])r   r  rG   rI   )r:   r   r7   rI   r   r  rG   r   )r:   ClassInfo | Noner7   rI   r   r  rG   r   )rE  r   rG   r   )r?   r   rG   rH   )
r7   rI   r   r  rk   r   r:   r  rG   rH   )rV   rI   rG   rI   )r>   r   r?   r   rk   r   rG   rH   rB   )r7   rI   rn  r  r   r  ro  r   rp  r   rq  r   r:   r  rG   rH   )rz  r   rG   rI   )r   r   rG   r   )
r  rI   r)   r   rk   r   r  r  rG   rH   )r7   rI   r   r  rk   r   rG   rH   )!rM   rN   rO   rw   r"   r   r   r   r   r   rj   r   r   r   r   r1  r5  r;  r7  r=  rB  rF  rJ  rL  r  rV  rY  rx  r   r  r  r  __classcell__)r   s   @r!   ri   ri      s+    "& %!#($()) !) 	)
  ) ) ) !) ") 
)Vj8X"U0<
L%\
,5 +	+)Z 9 9 E E ; ;X \`2.2.$2.1:2.HX2.	2.h$c"c.?cIRc	c@ (,AOAO AO 	AO
 %AO !AO !AO %AO 
AOF	V& _ccOcO$(cO2;cOK[cO	cOJ
-r#   ri   c                f    | dv rd| fS | j                  d      r| j                  d      rd| fS d| fS )ziSort methods in classes in a typical order.

    I.e.: constructor, normal methods, special methods.
    r4   r   __   r   )r]   rb  rU   s    r!   r  r    s?    
 &&$wtt!4$wd7Nr#   c                $    | j                  d      S )N__pybind11_module_local_r\   )r  s    r!   r  r    s    ??566r#   c                &   d }| j                  d      rB| j                  d      r0| dd } | dv rg }n#| dk(  rt        d      g}n| dk(  rt        d      t        d	      g}n| 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 }nz| dk(  rt        d      t        d      g}n\| dk(  rt        d      t        d      g}n>| dk(  rt        d      g}n+| dk(  r&t        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complexr   absbytesdirr   reversedroundr.  entergetitemr.  rU   setitemr  )delattrr   r7   setattrr%  getstatesetstatestate)eqneltlegtgeother)r7   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ownerset	reduce_exprotocolexitr   ztype[BaseException] | NonezBaseException | None	tracebackztypes.TracebackType | Noner   r   )r]   rb  r   r   )r7   r<   	arg_namesr8   s       r!   r   r     s    !%Dtt!4Abz 
 
. DY()DY(&h*?@D++'(DY'W)=>DZDZ()D99h78D )
 )
T ()D--DU]
+V-ABDU]
+V-ABD[ 
+,DV^F)EFG*@AK.JKD
 |%dHi@H%&-|G$f*&=>Kr#   )rV   rI   r7   rI   rG   r   )r_  )rm   rI   rn   rI   ro   r   r*   rI   r_   r   r`   r   ra   r   rG   rH   )r7   rI   rG   ztuple[int, str]r  )r    N)r7   rI   r<   rI   r  r  rG   zlist[ArgSig])/rw   
__future__r   r%   r   r   r  os.pathre   r  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   rW   rs   ru   ri   r  r  r   rC   r#   r!   <module>r     s$  
 #      * ) ) - *   <!3 <~!"4 !HV 	& "$&&& & 	& & & & 
&R 8p
-/ p
-f	7
 FJk
kk2Bkkr#   