o
    tBh/J                     @  sv  U 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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 d	Zd
ed< 		dTdUddZdVddZdWddZdWdd ZdWd!d"ZdWd#d$Z dXd'd(Z!dWd)d*Z"dYd-d.Z#				dZd[d5d6Z$d\d8d9Z%dWd:d;Z&		dTd]dBdCZ'		dTd^dEdFZ(d_dGdHZ)d`dJdKZ*dadMdNZ+dadOdPZ,dbdcdRdSZ-dS )dzTStub generator for C modules.

The public interface is via the mypy.stubgen module.
    )annotationsN)
ModuleType)AnyMapping)Final)is_c_module)ArgSigFunctionSig!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)
r   CallableClassVarDictIterableIteratorListOptionalTupleUnionr   _DEFAULT_TYPING_IMPORTSmodule_namestrtargetsigsdict[str, str] | None
class_sigsreturnNonec              
   C  s  t | }t|sJ |  dtj|}|r#tj|s#t| g }g }t }t	|j
 dd d}	|	D ]\}
}t|rNt||
||||d ||
 q7g }|	D ]#\}
}|
drb|
drbqSt|rvt||
|||||d ||
 qSg }|	D ],\}
}|
dr|
drq{|
|vrt|sttt|||}||
 d|  q{t	t|}|D ]}|| q|D ]}|d	r|r|d
 r|d || q|r|r|d |D ]}|| qt|}t|d}|D ]
}|| d qW d   dS 1 sw   Y  dS )a8  Generate stub for C module.

    This combines simple runtime introspection (looking for docstrings and attributes
    with simple builtin types) and signatures inferred from .rst documentation (if given).

    If directory for target doesn't exist it will be created. Existing stub
    will be overwritten.
    z is not a C modulec                 S  s   | d S Nr    xr"   r"   d/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/stubgenc.py<lambda>A   s    z,generate_stub_for_c_module.<locals>.<lambda>key)importsr   __r)   r   r   : class w
N)	importlibimport_moduler   ospathdirnameisdirmakedirssetsorted__dict__itemsis_c_functiongenerate_c_function_stubadd
startswithendswith	is_c_typegenerate_c_type_stubinspectismodulestrip_or_importget_type_fullnametypeappendadd_typing_importopenwrite)r   r   r   r   modulesubdirr)   	functionsdoner<   nameobjtypes	variablestype_stroutputlinefiler"   r"   r%   generate_stub_for_c_module+   sb   





$rY   rV   	list[str]c                   sV   g }t D ] t fdd| D r|  q|r%dd| dg|  S | dd S )zJAdd typing imports for collections/types that occur in the generated stub.c                 3  s     | ]}t d   |V  qdS )z\b%s\bN)research).0rW   rQ   r"   r%   	<genexpr>k   s    z$add_typing_import.<locals>.<genexpr>zfrom typing import , r/   N)r   anyrI   join)rV   namesr"   r^   r%   rJ   g   s   
rJ   rR   objectboolc                 C     t | pt| ttu S N)rD   	isbuiltinrH   ordrR   r"   r"   r%   r=   s      r=   c                 C  s.   t | pt| ttjttjttjfv S rg   )rD   ismethoddescriptorrH   r   index__add____new__rj   r"   r"   r%   is_c_methodw   s
   rp   c                 C  s   t | pt| jdv S )N)classmethodclassmethod_descriptor)rD   rh   rH   __name__rj   r"   r"   r%   is_c_classmethod   s   rt   c                 C  s   t | p	t| dS )Nfget)rD   isdatadescriptorhasattrrj   r"   r"   r%   is_c_property      rx   propr   c                 C  s   t | do	| jd u S )Nfset)rw   r{   )rz   r"   r"   r%   is_c_property_readonly   ry   r|   c                 C  rf   rg   )rD   isclassrH   intrj   r"   r"   r%   rB      rk   rB   docstrrQ   c                 C  s   |  | dd S )Nz(*args, **kwargs)
zOverloaded function.

r@   )r   rQ   r"   r"   r%   )is_pybind11_overloaded_function_docstring   ry   r   rM   r   r)   self_var
str | None
class_namec	              
   C  s  |du ri }|du ri }|dkr|rdnd}	|dv r1||vr1|r1||v r1t |t|| |	dg}
nYt|dd}t||}
|
rL|dusDJ t||rL|
d= |
so|r`||vr`t |t|||	d	g}
n*t |t||d
|	dg}
n|r|r|
d j}|r|d j|kr|	dt
|d |
rt|
dknd}|r|d |
r|
D ]Q}g }|jD ]-}|j|kr|}n|j}|dkrd}|jr|dt|j| | 7 }|jr|d7 }|| q|r|d |dj|d|t|j| |d qdS 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'.
    N__init__r    r   ro   r   )rQ   argsret_type__doc__r.   )r   r   z(*args, **kwargs)r   r^      Fzfrom typing import overload_noner,   z = ...z	@overloadz$def {function}({args}) -> {ret}: ...r`   )functionr   ret)r	   r
   getattrr   r   infer_method_siggetr   rQ   insertr   lenrI   rH   rF   defaultformatrb   r   )rM   rQ   rR   rV   r)   r   r   r   r   r   inferredr   r   is_overloaded	signaturesigargarg_defr"   r"   r%   r>      s   



	




r>   typc                   s    }t  fdddD r0td D ]
}t| || q|r/tdt|jd  d }n:|rF |jd rF t	|jd d	 }n$d v rj d	 
d }|d
krb t	d
d d	 }n|d|  |dkrpd}|S )at  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
        module: in which this type is used
        imports: list of import statements (may be modified during the call)
    c                 3  s    | ]}| v V  qd S rg   r"   )r]   cr   r"   r%   r_     s    z"strip_or_import.<locals>.<genexpr>z[,z[\[,\]]z(^|[\[, ]+).z\1r   Nbuiltinszimport NoneTyper    )ra   r[   splitrF   stripsubescapers   r@   r   rindexrI   )r   rM   r)   stripped_typesubtyp
arg_moduler"   r   r%   rF      s"   rF   c                 C  s   t | jdkS )Npybind11_static_property)rH   rs   rj   r"   r"   r%   is_static_property  s   r   static_propertiesrw_propertiesro_propertiesreadonlyModuleType | Nonelist[str] | Nonec                   s   d fdd}t  rdS |t|dd}	|	s%t|dd}
|t|
dd}	|	s)d	}	|dur7|dur7t|	||}	t|rP|r?d
nd}|  d|	 d|  dS |re|d |d  d|	 d dS |  d|	  dS )zGenerate property stub using introspection of 'obj'.

    Try to infer type from docstring, append resulting lines to 'output'.
    r   r   r   c                   s2   | durt | }|st|  }|st| }|S dS )z:Infer property type from docstring or docstring signature.N)r   r   r   )r   r   r^   r"   r%   infer_prop_type*  s   
z1generate_c_property_stub.<locals>.infer_prop_typeNr   ru   r   z  # read-onlyr/   z: ClassVar[z] = ...z	@propertyzdef z
(self) -> : ...r,   )r   r   r   r   )is_skipped_attributer   rF   r   rI   )rQ   rR   r   r   r   r   rM   r)   r   r   ru   trailing_commentr"   r^   r%   generate_c_property_stub  s$   
r   rH   c                   s  t |d}t| dd d}g }	g }
g }g }g }t }|D ]h\}}t|s*t|rZ|| t|sY|dkr>d|v r<qd}t|rJ|	d d}nd	}t	|||	||||d
	 qt
|rr|| t|||||t|d qt|rt|||
||d || q|D ]\}}t|rq||vr|d|ttt| qt|}|d tu r|d= |r|d jdkr|d= |dd }g }|D ] t fdd|D s|  q|rddfdd|D  }nd}|
s|s|s|	s|rk|d| | d |
D ]%}|r(|d r(|d ds(|dr(|d |d|  q|D ]}|d|  q3|D ]}|d|  qA|	D ]}|d|  qO|D ]}|d|  q]dS |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                 S  s   t | d S r!   )method_name_sort_keyr#   r"   r"   r%   r&   `  s    z&generate_c_type_stub.<locals>.<lambda>r'   ro   r   z@classmethodclsself)r)   r   r   r   r   )rM   r)   r+   z{}: ClassVar[{}] = ...r.   pybind11_objectr   Nc                 3  s    | ]}t | V  qd S rg   )
issubclass)r]   b)baser"   r%   r_     s    z'generate_c_type_stub.<locals>.<genexpr>z(%s)r`   c                 3  s     | ]}t t| V  qd S rg   )rF   rG   )r]   r   )r)   rM   r"   r%   r_     s    
r/   zclass :r-   z    r   )r   r:   r<   r9   rp   rt   r?   r   rI   r>   rx   r   r|   rB   rC   r   rF   rG   rH   mrord   rs   ra   rb   r@   )rM   r   rR   rV   r)   r   r   obj_dictr<   methodsrS   r   r   r   rP   attrvaluer   	all_basesbases	bases_strrW   r"   )r   r)   rM   r%   rC   O  s   








rC   c                 C  s   | j  dt| d| j S )Nr   __qualname__)
__module__r   rs   r   r"   r"   r%   rG     rk   rG   tuple[int, str]c                 C  s4   | 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*      r   )r@   rA   r^   r"   r"   r%   r     s
   r   r   c                 C  s
   |  dS )N__pybind11_module_local_r   r   r"   r"   r%   is_pybind_skipped_attribute  s   
r   c                 C  s   | dv pt | S )N)__getattribute____str____repr__r   r;   r   __weakref__)r   r   r"   r"   r%   r     s
   r   list[ArgSig]c                 C  s  d }|  dr| dr| dd } | dv rg }n| dkr$tddg}n| dkr3tddtd	dg}ny| d
v r>tddg}nn| dkrMtddtddg}n_| dkrTg }nX| dkr_tddg}nM| dv rjtddg}nB| dv rqg }n;| dkrtddtddg}n,| dkrtddtddg}n| dkrtddg}n| dkrtddtddtddg}|d u rtddtddg}t|pddg| S ) Nr*   r   )hashiternextsizeofcopydeepcopyreducegetinitargsr~   floattrunccomplexre   absbytesdirr   reversedroundrm   entergetitemrm   r^   setitemrd   )delattrr   rQ   setattrr   getstatesetstatestate).eqneltlegtger?   raddr   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other)negposinvertr   instanceownerr9   	reduce_exprotocolexitrH   	tracebackz*argsz**kwargsr   )r@   rA   r   )rQ   r   r   r"   r"   r%   r     s@   0r   )NN)
r   r   r   r   r   r   r   r   r   r    )rV   rZ   r   rZ   )rR   rd   r   re   )rz   r   r   re   )r   r   rQ   r   r   re   )NNNN)rM   r   rQ   r   rR   rd   rV   rZ   r)   rZ   r   r   r   r   r   r   r   r   r   r    )r   r   rM   r   r)   rZ   r   r   )rQ   r   rR   rd   r   rZ   r   rZ   r   rZ   r   re   rM   r   r)   r   r   r    )rM   r   r   r   rR   rH   rV   rZ   r)   rZ   r   r   r   r   r   r    )r   rH   r   r   )rQ   r   r   r   )r   r   r   re   rg   )rQ   r   r   r   r   r   ).r   
__future__r   r2   rD   os.pathr4   r[   rS   r   typingr   r   typing_extensionsr   mypy.moduleinspectr   mypy.stubdocr   r	   r
   r   r   r   r   r   __annotations__rY   rJ   r=   rp   rt   rx   r|   rB   r   r>   rF   r   r   rC   rG   r   r   r   r   r"   r"   r"   r%   <module>   sR   $
<








c
:
{


