o
    tBhH                     @  s  d Z ddlmZ ddlmZ ddlmZmZmZ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mZmZ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# dd
l$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC dcd"d#ZDddd)d*ZEded-d.ZFdfd0d1ZGdgd9d:ZHdhd@dAZIdidDdEZJdjdGdHZKdkdJdKZLdkdLdMZMe	eef ZNG dNdO dOeZOdldPdQZPG dRdS dSeZQG dTdU dUeZRdmdZd[ZSdnd`daZTdbS )oa  Prepare for IR transform.

This needs to run after type checking and before generating IR.

For example, construct partially initialized FuncIR and ClassIR
objects for all functions and classes. This allows us to bind
references to functions and classes before we've generated full IR for
functions or classes.  The actual IR transform will then populate all
the missing bits, such as function bodies (basic blocks).

Also build a mapping from mypy TypeInfos to ClassIR objects.
    )annotations)defaultdict)DefaultDictIterable
NamedTupleTuple)Graph)ARG_STAR	ARG_STAR2CallExprClassDef	Decorator
ExpressionFuncDef
MemberExprMypyFileNameExprOverloadedFuncDefRefExpr
SymbolNodeTypeInfoVar)refers_to_fullname)TraverserVisitor)InstanceTypeget_proper_type)PROPSET_PREFIXget_id_from_name)catch_errors)Errors)ClassIR)FUNC_CLASSMETHODFUNC_NORMALFUNC_STATICMETHODFuncDeclFuncSignature
RuntimeArg)	DeserMaps)	RInstancedict_rprimitivetuple_rprimitive)Mapper)get_func_defget_mypyc_attrsis_dataclassis_extension_classis_trait)CompilerOptionsmapperr,   moduleslist[MypyFile]graphr   typesdict[Expression, Type]optionsr2   errorsr    returnNonec              	     s:  g }|D ] dd  j D }| fdd|D  q|D ]/\ }t|j jt||jjd}	t||	_	|	j	r@|jj
d d  |	_|jsFd |	_|	| j|j< q|D ]7\ }t j|j$ | j|j j	rmt j j|||  n
t j j|||  W d    n1 sw   Y  qO|D ] t D ]
}
t jd |
|  qqd S )Nc                 S  s   g | ]	}t |tr|qS  )
isinstancer   ).0noder=   r=   l/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/irbuild/prepare.py
<listcomp>L   s    z"build_type_map.<locals>.<listcomp>c                   s   g | ]} |fqS r=   r=   )r?   cdefmoduler=   rA   rB   M   s    )is_abstract)defsextendr!   namefullnamer1   inforF   r0   is_ext_classdeletable_attributes	deletableglobal_optschildren
type_to_irr   pathlineprepare_class_defprepare_non_ext_class_defget_module_func_defsprepare_func_def)r3   r4   r6   r7   r9   r:   classesmodule_classesrC   class_irfuncr=   rD   rA   build_type_mapA   s6   	
	r\   r@   r   rE   r   boolc                 C  s   | j |j d | j kS )N.)rJ   rI   )r@   rE   r=   r=   rA   is_from_modulen   s   r_   	deser_ctxr(   c           	      C  s   |D ],}|j  D ]$\}}t|jtr-t|j|r-|j|jj }|| j|j< |j	| j
|j< q	q|D ]}t|D ]}t|j|j|j}|j| j| j
|< q7q1dS )z>Populate a Mapper with deserialized IR from a list of modules.N)namesitemsr>   r@   r   r_   rX   rJ   rQ   ctorfunc_to_declrV   r   rI   rS   	functionsdecl)	r3   r4   r`   rE   rI   r@   irr[   func_idr=   r=   rA   load_type_mapr   s   ri   Iterable[FuncDef]c                 c  sD    | j  D ]\}}t|jtttfrt|j| rt|jV  qdS )z?Collect all of the (non-method) functions declared in a module.N)	ra   rb   r>   r@   r   r   r   r_   r-   )rE   rI   r@   r=   r=   rA   rV      s   rV   module_namestr
class_name
str | Nonefdefr   r%   c                 C  s>   |j rtn|jr
tnt}t|j|| |||}||j|< |S N)		is_staticr$   is_classr"   r#   r%   rI   fdef_to_sigrd   )rk   rm   ro   r3   kindrf   r=   r=   rA   rW      s   
rW   rg   r!   rC   r   FuncDef | Decoratorc                 C  s   t |trt||j||| j|j< d S t |trjt||j|j|}|js+|| j|j< n!t |jd trL|jd jdkrLt	|j |_d|_
|| jt	|j < |jjrl|jjs]J d|j dd|_|jj| j|j< d S d S d S )Nr   setterTz.Expected return type annotation for property '')r>   r   rW   rI   method_declsr   r[   
decoratorsr   r   is_prop_setteris_propertytypeis_prop_gettersigret_typeproperty_types)rg   rk   rC   r3   r@   rf   r=   r=   rA   prepare_method_def   s    

 r   propr   c                 C  st   t | jdkr8| jd }| jd }t|tr8t|tr8|jjr8t |jdkr8t|jd tr8|jd jdkr8dS dS )N   r      rv   TF)	lenrb   r>   r   r[   r{   ry   r   rI   )r   getterrv   r=   r=   rA   is_valid_multipart_property_def   s   

r   builtin_basec                 C  s   | dv S )N)zbuiltins.Exceptionzbuiltins.LookupErrorzbuiltins.IndexErrorzbuiltins.Warningzbuiltins.UserWarningzbuiltins.ValueErrorbuiltins.objectr=   )r   r=   r=   rA   can_subclass_builtin   s   r   rR   c                   s   j |j }|j}t|}|ddu rd|_|ddu r!d|_t|j D ]u\}}	|	j	r0q(t
|	jtrS|	jjs@J d| |	jjsR|dvrR |	jj|j|< q(t
|	jttfret||| |	j q(t
|	jtr|	jjrt|	jr|	jjD ]
}
t||| |
 qxq(|d| |j q(|	jjsJ t||| |	jj q(|jD ]'}|jdkrd|_q|jd	krd
|_q|jdrt|js|d| |j q|jr|j  |jd j}|j s6|js6t
|tr6 !|} j |j}|d u s|j"r|jd j	r|jjdkrt#|j$d t%dt&t't%dt(t)g|j*}t#|j$dd  t+|}t,|j-d |||_.|j. j/|j<  fdd|j0D }t1dd |dd  D sV|d| |j dd |D |_2g }g }|jD ]3}| j vrx|jdkrvd|_3qe j | }|j s|4| |4| |j5j6s|j"sd|_3qe|j sdnd}t7||kr|| |_8||_||_9|D ]}|j:d ur|j:4| qt;|rd|_<d S d S )Nallow_interpreted_subclassesTserializablezClass member %s missing type)	__slots____deletable__(Unsupported property decorator semanticszbuiltins.BaseExceptionPyBaseExceptionObjectzbuiltins.dictPyDictObjectz	builtins.z3Inheriting from most builtin types is unimplemented__init__r   r   argskwargsr   c                   s$   g | ]}|j  jv r j|j  qS r=   )r|   rQ   )r?   baser3   r=   rA   rB   (  s   $ z%prepare_class_def.<locals>.<listcomp>c                 s  s    | ]}|j V  qd S rp   r1   r?   cr=   r=   rA   	<genexpr>)  s    z$prepare_class_def.<locals>.<genexpr>z0Non-trait bases must appear first in parent listc                 S  s   g | ]}|j r|qS r=   r   r   r=   r=   rA   rB   +  s    )=rQ   rK   r.   getr   _serializablesortedra   rb   plugin_generatedr>   r@   r   r|   is_classvartype_to_rtype
attributesr   r   r   r   r{   r   errorrS   implmrorJ   r   
startswithr   clearr1   rs   rL   r&   r   r'   r+   r	   r*   r
   r   r)   r%   rI   rc   rd   basesalltraitsinherits_pythonappenddefnremoved_base_type_exprsr   r   base_mrorP   r/   is_augmented)rR   rk   rC   r:   r3   rg   rK   attrsrI   r@   itemcls	init_nodeinit_sigdefining_irctor_sigr   r   r   base_irbase_idxr   r=   r   rA   rT      s   









	






rT   c           
        s    j |j }|j}|j D ]H\}}t|jttfr$t||| |j qt|jt	rV|jj
rKt|js;|d| |j |jjD ]
}	t||| |	 q?qt||| t|j qt fdd|jD rm|d| |j d S d S )Nr   c                 3  s&    | ]}| j v o j | jV  qd S rp   )rQ   rL   )r?   r   r   r=   rA   r   _  s   $ z,prepare_non_ext_class_def.<locals>.<genexpr>z<Non-extension classes may not inherit from extension classes)rQ   rK   ra   rb   r>   r@   r   r   r   r   r{   r   r   rS   r-   anyr   )
rR   rk   rC   r:   r3   rg   rK   rI   r@   r   r=   r   rA   rU   J  s&   
rU   c                   @     e Zd ZU ded< ded< dS )SingledispatchInfoz%dict[FuncDef, list[RegisterImplInfo]]singledispatch_implszdict[FuncDef, list[int]]decorators_to_removeN__name__
__module____qualname____annotations__r=   r=   r=   rA   r   h     
 r   c                 C  s2   t |}| D ]}|j|_|| qt|j|jS rp   )SingledispatchVisitorrR   current_pathacceptr   r   r   )r4   r:   visitorrE   r=   r=   rA   "find_singledispatch_register_implsm  s
   r   c                      s6   e Zd ZU ded< d fddZd fddZ  ZS )r   rl   r   r:   r    r;   r<   c                   s$   t    tt| _i | _|| _d S rp   )superr   r   listr   r   r:   )selfr:   	__class__r=   rA   r   z  s   


zSingledispatchVisitor.__init__decr   c                   s   |j r^|j  }g }d }t|D ]E\}}t||j}|d urA| j|j |j|jf || |d ur@| j	
d| j|| j qt|drS|| | j|jg  |}q|r^|| j|j< t | d S )Nz:Calling decorator after registering function not supportedzfunctools.singledispatch)ry   copy	enumerate%get_singledispatch_register_call_infor[   r   singledispatch_funcr   dispatch_typer:   r   r   rS   r   
setdefaultr   r   visit_decorator)r   r   decorators_to_storer   last_non_registeridr   r   r=   rA   r     s2   




z%SingledispatchVisitor.visit_decorator)r:   r    r;   r<   )r   r   r;   r<   )r   r   r   r   r   r   __classcell__r=   r=   r   rA   r   w  s   
 r   c                   @  r   )RegisteredImplr   r   r   r   Nr   r=   r=   r=   rA   r     r   r   	decoratorr   r[   RegisteredImpl | Nonec                 C  s   t | tr0t| jdkr0t | jd tr0| j}| jd j}t |ts$d S t |tr.t	||S d S t | trR|j
s:d S t|j
d jj}t |tsJd S |j}t	| |S d S )Nr   r   )r>   r   r   r   r   calleer@   r   r   +registered_impl_from_possible_register_call	argumentsr   variabler|   r   )r   r[   r   r   arg_typerK   r=   r=   rA   r     s*   





r   exprr   r   r   c                 C  s8   | j dkrt| jtr| jj}t|trt|j|S d S )Nregister)rI   r>   r   r   r@   r   r   r[   )r   r   r@   r=   r=   rA   r     s
   
r   N)r3   r,   r4   r5   r6   r   r7   r8   r9   r2   r:   r    r;   r<   )r@   r   rE   r   r;   r]   )r3   r,   r4   r5   r`   r(   r;   r<   )rE   r   r;   rj   )
rk   rl   rm   rn   ro   r   r3   r,   r;   r%   )rg   r!   rk   rl   rC   r   r3   r,   r@   ru   r;   r<   )r   r   r;   r]   )r   rl   r;   r]   )rR   rl   rk   rl   rC   r   r:   r    r3   r,   r;   r<   )r4   r5   r:   r    r;   r   )r   r   r[   r   r;   r   )r   r   r   r   r;   r   )U__doc__
__future__r   collectionsr   typingr   r   r   r   
mypy.buildr   
mypy.nodesr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   mypy.semanalr   mypy.traverserr   
mypy.typesr   r   r   mypyc.commonr   r   mypyc.crashr   mypyc.errorsr    mypyc.ir.class_irr!   mypyc.ir.func_irr"   r#   r$   r%   r&   r'   mypyc.ir.opsr(   mypyc.ir.rtypesr)   r*   r+   mypyc.irbuild.mapperr,   mypyc.irbuild.utilr-   r.   r/   r0   r1   mypyc.optionsr2   r\   r_   ri   rV   rW   r   r   r   rT   rU   RegisterImplInfor   r   r   r   r   r   r=   r=   r=   rA   <module>   sH    D 

-







{

8
 