
    5 f`                    n   d 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
 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.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZD ddlEmFZF dad#ZGdbd)ZHdcd,ZIddd.ZJded6ZKdfd<ZLdgd?ZMdhdAZNdidCZOdjdDZPdkdGZQdldKZRdmdLZSdmdMZTdndNZUdidOZVeeef         ZW G dP dQe          ZXdodRZY G dS dTe          ZZ G dU dVe          Z[dpd[Z\dqd_Z]d`S )ra  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)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RTypedict_rprimitivenone_rprimitivetuple_rprimitive)Mapper)get_func_defget_mypyc_attrsis_dataclassis_extension_classis_trait)CompilerOptions)is_same_typemapperr.   moduleslist[MypyFile]graphr   typesdict[Expression, Type]optionsr4   errorsr    returnNonec                   g }|D ]4d j         D             }|                    fd|D                        5|D ]\  }t          |j        j        t          |          |j        j                  }	t          |          |	_	        |	j	        r#|j        j
                                        |	_        |j        sd |	_        |	| j        |j        <   |D ]\  }t!          j        |j                  5  | j        |j                 j	        rt'          j        j        |||            nt)          j        j        |||            d d d            n# 1 swxY w Y   |D ]:\  }| j        |j                 }	|	j	        rt+          |j        |	j        |            ;|D ]+t-                    D ]}
t/          j        d |
|            ,|D ]\  }| j        |j                 }	|	j        D ]}|	j        dd          D ]}||j        v r|t5          |	j        |         |j        |                   sV|j        j        |         j        }|J |j        rdnd}|                    d| d| d	|j         d
j        |j                   d S )Nc                <    g | ]}t          |t                    |S  )
isinstancer   ).0nodes     K/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/irbuild/prepare.py
<listcomp>z"build_type_map.<locals>.<listcomp>M   s'    UUU4*T8:T:TU$UUU    c                    g | ]}|fS rB   rB   )rD   cdefmodules     rF   rG   z"build_type_map.<locals>.<listcomp>N   s    BBB4BBBrH   )is_abstract   traitclassz	Type of "z%" is incompatible with definition in z "")defsextendr!   namefullnamer3   inforL   r2   is_ext_classdeletable_attributescopy	deletableglobal_optschildren
type_to_irr   pathlineprepare_class_defprepare_non_ext_class_def#prepare_implicit_property_accessorsget_module_func_defsprepare_func_def
attributesmror5   namesrE   error)r6   r7   r9   r:   r<   r=   classesmodule_classesrJ   class_irfuncattrbase_irrE   kindrK   s                  @rF   build_type_mapro   B   s    G D DUU6;UUUBBBB>BBBCCCC   
0 
0IvDIDY
 
 
 !34 8 8  	G!%!?!D!D!F!FH" 	% $H'/$)$$   ^ ^&+ty11 	^ 	^ +8 ^!&+vffUUUU)&+vfV\]]]		^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^ 	^   ^ ^$TY/  	^/	8V_V\]]]
  B B(00 	B 	BDV_dD&AAAA	B    $TY/' 	 	D#<+  7---'(;D(A7CUVZC[\\ 	#yt49#///*1*:GwwE E E-1E E5<\E E E"K I	  	 s   3AEE	E	rE   r   rK   r   boolc                8    | j         |j         dz   | j        z   k    S )N.)rT   rS   )rE   rK   s     rF   is_from_modulers      s    =FOc1DI===rH   	deser_ctxr(   c                   |D ]}|j                                         D ]n\  }}t          |j        t                    rOt          |j        |          r:|j        |j        j                 }|| j        |j        <   |j	        | j
        |j        <   o|D ]N}t          |          D ]<}t          |j        |j        |j                  }|j        |         j        | j
        |<   =OdS )z>Populate a Mapper with deserialized IR from a list of modules.N)rf   itemsrC   rE   r   rs   rh   rT   r\   ctorfunc_to_declrb   r   rS   r^   	functionsdecl)	r6   r7   rt   rK   rS   rE   irrk   func_ids	            rF   load_type_mapr}      s    9 9 ,,,.. 	9 	9JD$$)X.. 9>$)V3T3T 9&ty'9:/1!$),13#DI.		9  J J(00 	J 	JD&ty$-KKG(1(;G(D(IF%%	JJ JrH   Iterable[FuncDef]c              #     K   | j                                         D ]W\  }}t          |j        t          t
          t          f          r+t          |j        |           rt          |j                  V  XdS )z?Collect all of the (non-method) functions declared in a module.N)	rf   rv   rC   rE   r   r   r   rs   r/   )rK   rS   rE   s      rF   rb   rb      s      l((** * *
d di'96G!HII 	*nIvO
 O
 	* ty)))))* *rH   module_namestr
class_name
str | Nonefdefr   r%   c                    |j         rt          n|j        rt          nt          }t          |j        || |                    |          |          }||j        |<   |S N)		is_staticr$   is_classr"   r#   r%   rS   fdef_to_sigrx   )r   r   r   r6   rn   rz   s         rF   rc   rc      sd    
 >	B"&-@[ 	
 DIz;8J8J48P8PRVWWD $FKrH   r{   r!   rJ   r   FuncDef | Decoratorc                   t          |t                    r&t          ||j        ||          | j        |j        <   d S t          |t
                    rt          ||j        |j        |          }|j        s|| j        |j        <   nt          |j        d         t                    r_|j        d         j        dk    rIt          |j        z   |_        d|_
        d|j        j        d         _        || j        t          |j        z   <   |j        j        rC|j        j        sJ d|j         d            d|_        |j        j        | j        |j        <   d S d S d S )Nr   setterTrM   z.Expected return type annotation for property '')rC   r   rc   rS   method_declsr   rk   
decoratorsr   r   is_prop_settersigargspos_onlyis_propertytypeis_prop_getterret_typeproperty_types)r{   r   rJ   r6   rE   rz   s         rF   prepare_method_defr      sU    $   =%5k49dTZ%[%[	"""	D)	$	$ =  TY	6JJ 
	?)-BODI&&*J77 	?DOA<N<SW_<_<_ '2DI"&D(,DHM!%:>BONTY679  	=9>``#`TXT]#`#`#```>"&D+/8+<Bdi((('= = 	= 	=rH   propr   c                r   t          | j                  dk    rdS | j        d         }| j        d         }t          |t                    ont          |t                    oY|j        j        oMt          |j                  dk    o5t          |j        d         t                    o|j        d         j        dk    S )N   Fr   rM   r   )	lenrv   rC   r   rk   r   r   r   rS   )r   getterr   s      rF   is_valid_multipart_property_defr      s    
4:!uZ]FZ]F 	69%% 	2vy))	2K#	2 !""a'	2 v(+Z88		2
 a %1rH   builtin_basec                
    | dv S )N)zbuiltins.Exceptionzbuiltins.LookupErrorzbuiltins.IndexErrorzbuiltins.Warningzbuiltins.UserWarningzbuiltins.ValueErrorbuiltins.objectrB   )r   s    rF   can_subclass_builtinr      s    	

 
rH   r]   c                   j         |j                 }|j        }t          |          }|                    d          du rd|_        |                    d          du rd|_        |j        D ]r}|j        dk    rd|_        |j        dk    rd|_        (|j        	                    d          r0t          |j                  s|                    d	| |j                   sfd
|j        D             }	t          |	          dk    rBt          d |	D                       r)|	d         j        r|                    d| |j                   d |	D             |_        g }
g }|j        D ]v}|j         vr|j        dk    rd|_        j         |         }|j        s|                    |           |
                    |           |j        j        s|j        sd|_        w|j        sdnd}t          |          |k    r||         |_        |
|_        ||_        t3          ||| ||           t5          |||           |	D ]#}|j        |j                            |           $t9          |          r	d|_        dS dS )zPopulate the interface-level information in a class IR.

    This includes attribute and method declarations, and the MRO, among other things, but
    method bodies are generated in a later pass.
    allow_interpreted_subclassesTserializablezbuiltins.BaseExceptionPyBaseExceptionObjectzbuiltins.dictPyDictObjectz	builtins.z3Inheriting from most builtin types is unimplementedc                P    g | ]"}|j         j        v j        |j                  #S rB   )r   r\   )rD   baser6   s     rF   rG   z%prepare_class_def.<locals>.<listcomp>  s3    cccdDIQWQbDbDbVty)DbDbDbrH   rM   c              3  &   K   | ]}|j          V  d S r   r3   rD   cs     rF   	<genexpr>z$prepare_class_def.<locals>.<genexpr>  s&      <<!*n<<<<<<rH   r   z/Non-trait base must appear first in parent listc                     g | ]}|j         	|S rB   r   r   s     rF   rG   z%prepare_class_def.<locals>.<listcomp>  s    000qQZ0000rH   r   N)r\   rU   r0   getr   _serializablere   rT   r   
startswithr   rg   r^   basesr   anyr3   traitsinherits_pythonappenddefnremoved_base_type_exprsrV   r   base_mroprepare_methods_and_attributesprepare_init_methodr[   r1   is_augmented)r]   r   rJ   r=   r6   r{   rU   attrsclsr   re   r   rm   base_idxr   s       `          rF   r_   r_      s    
	49	%B9DD!!Eyy/00D88*.'yy  D(( x   <3335BOO\_,,,BOO\$$[11 	'55 
 I4QUQZ  
 dcccdjcccE
5zzA~~#<<e<<<<<~qAR~
 	FdiXXX00E000BI
CHx & &f'''|000%)"#C( 	%OOG$$$

78+ 	&73G 	&!%B*qqH
8}}x8$BFBK"4T;OOOb+v666 % %=$M  $$$D  rH   c           	        | j         }|j                                        D ]\  }}|j        rt	          |j        t                    r|j        j        sJ d|z              |j        j        s_|dvr[|	                    |j        j                  }	|j
        r+|	j        r$t          |||	|           t          |||	|           |	|j        |<   t	          |j        t          t           f          rt#          ||| ||j                   t	          |j        t$                    r|j        j        rVt)          |j                  r$|j        j        D ]}
t#          ||| ||
           E|                    d|| j                   c|j        j        sJ t#          ||| ||j        j                   |j        r|j                                         dS dS )z+Populate attribute and method declarations.zClass member %s missing type)	__slots____deletable__(Unsupported property decorator semanticsN)rU   rf   rv   plugin_generatedrC   rE   r   r   is_classvartype_to_rtyper3   error_overlapadd_getter_declarationadd_setter_declarationrd   r   r   r   r   r   r   rg   r^   implr   clear)rJ   r{   r]   r   r=   r6   rU   rS   rE   
attr_rtypeitems              rF   r   r   >  s    9Dj&&(( R R
d  	di%% 	R9>HH#AD#HHH>9( 	1T9W-W-W#11$).AA
; N:#; N
 +2tZMMM*2tZMMM&0d#	GY#788 	Rr;fdiHHHH	#455 	Ry$ 
R249== ^ $	 P P*2{D&$OOOOP LL!KTSWS\]]]] y~%%~"2{D&$).QQQ	 
 rH   rU   r   c           
     f   t                      }|j        D ]J}|j                                        D ].\  }}|                    |           t          | |||||           /K|j        dd          D ]@}|j        r7|j                                        D ]\  }}||vrt          | |||||           Ad S )NrM   )setr   rd   rv   add,add_property_methods_for_attribute_if_neededre   r3   )rU   r{   r   r6   concrete_attributesr   rS   r   s           rF   ra   ra   h  s     %%   $ 5 5 7 7 	 	D*##D)))8b$
K   	
 qrr
  = 	$(O$9$9$;$;   j222@b$
K  	 rH   	attr_namer   r*   c                    | j         dd         D ]}||j        v r|j        |         }|j                            |          }|5|j        }	t          |	t                    r!|	j        |j        vrt          ||||           rt          |	t                    r4t          |	          r%t          ||||           t          ||||           |j        r+|j        r$t          ||||           t          ||||           dS )zAdd getter and/or setter for attribute if defined as property in a base class.

    Only add declarations. The body IR will be synthesized later during irbuild.
    rM   N)re   r\   rf   r   rE   rC   r   rS   r   r   r   r   r   r3   r   )
rU   r{   r   r   r   r6   r   rm   nrE   s
             rF   r   r   {  s1     O O6$$$'-G
y))Ay6D$	** 	Oty/O/O&r9j+NNNND"344 O9XY]9^9^ O&r9j+NNN&r9j+NNNN! Oj&> O&r9j+NNN&r9j+NNN!O OrH   c                    t          dt          |           d          }t          |g|          }t          || j        ||t
                    }d|_        d|_        || j        |<   || j	        |<   d S )NselfTr   )
r'   r)   r&   r%   rS   r#   r   implicitr   r   )r{   r   r   r   self_argr   rz   s          rF   r   r     st     &)B--$???H

J
/
/CIrwS+FFDDDM!%BOI#-Bi   rH   c                   t          dt          |           d          }t          d|d          }t          ||gt                    }t          |z   }t          || j        ||t                    }d|_        d|_	        || j
        |<   d S )Nr   Tr   value)r'   r)   r&   r,   r   r%   rS   r#   r   r   r   )	r{   r   r   r   r   	value_argr   setter_namerz   s	            rF   r   r     s     &)B--$???H7J>>>I
9-
?
?C 9,KK+sKHHDDDM#'BOK   rH   c           	        | j         d         j        }|j        sJ|j        sDt	          |t
                    r0|                    |          }|j                            |j                   }||j	        r| j         d         j
        re|j         j        dk    rUt          |j        d         t          dt          t                     t          dt"          t$                    g|j                  }t)          |j                  |j        z
  }t          |j        d|         t-          |                    }t/          | j        d ||          |_        |j        |j        | j         <   d S d S d S d S )N__init__r   r   r   kwargsrM   )rU   rE   r3   r   rC   r   r   r\   r   rV   r   rT   r&   r   r'   r-   r	   r+   r
   r   r   num_bitmap_argsr)   r%   rS   rw   rx   )	rJ   r{   r   r6   	init_nodeinit_sigdefining_irlast_argctor_sigs	            rF   r   r     sb   	*%*I; 1r 1:i3Q3Q 1%%i00'++IN;;
 +  y$5   n%):::$M!$v'7BBx)DD
 ! H x}%%(@@ qz!:IbMMJJ49dKBB)+DI&&&11 1 1 1 1 1rH   c           
        j         |j                 }|j        }|j                                        D ]\  }}t	          |j        t          t          f          rt          ||||j                   ?t	          |j        t                    r|j        j
        rSt          |j                  s|                    d| |j                   |j        j        D ]}	t          ||||	           t          |||t          |j                             t          fd|j        D                       r|                    d| |j                   d S d S )Nr   c              3  N   K   | ]}|j         v oj         |         j        V   d S r   )r\   rV   )rD   r   r6   s     rF   r   z,prepare_non_ext_class_def.<locals>.<genexpr>  s<      
`
`PS3&##K(9#(>(K
`
`
`
`
`
`rH   z<Non-extension classes may not inherit from extension classes)r\   rU   rf   rv   rC   rE   r   r   r   r   r   r   rg   r^   r/   r   re   )
r]   r   rJ   r=   r6   r{   rU   rS   rE   r   s
       `     rF   r`   r`     sz    
	49	%B9Dj&&(( [ [
ddi'9!566 	[r;fdiHHHH	#455 		[y$ [6tyAA ^LL!KTSWS\]]] IO L LD&r;fdKKKKL #2{D&,tyBYBYZZZ

`
`
`
`W[W_
`
`
``` 
JDRVR[	
 	
 	
 	
 	

 
rH   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__rB   rH   rF   r   r     s*         ????222222rH   r   c                    t          |          }| D ]#}|j        |_        |                    |           $t	          |j        |j                  S r   )SingledispatchVisitorr]   current_pathacceptr   r   r   )r7   r=   visitorrK   s       rF   "find_singledispatch_register_implsr     sU     $F++G  %{gg:G<XYYYrH   c                  8     e Zd ZU ded<   d fdZd fd
Z xZS )r   r   r   r=   r    r>   r?   c                    t                                                       t          t                    | _        i | _        || _        d S r   )superr   r   listr   r   r=   )r   r=   	__class__s     rF   r   zSingledispatchVisitor.__init__   sD     S^^bRcRc! ?A!$rH   decr   c                   |j         r|j                                         }g }d }t          |          D ]\  }}t          ||j                  }|u| j        |j                                     |j        |j        f           |                    |           |,| j	        
                    d| j        ||         j                   t          |d          r5|                    |           | j                            |j        g            |}|r|| j        |j        <   t!                                          |           d S )Nz:Calling decorator after registering function not supportedzfunctools.singledispatch)r   rX   	enumerate%get_singledispatch_register_call_infork   r   singledispatch_funcr   dispatch_typer=   rg   r   r^   r   
setdefaultr   r   visit_decorator)	r   r   decorators_to_storer   last_non_registeridr   r   s	           rF   r  z%SingledispatchVisitor.visit_decorator  sj   > $	K"%."5"5"7"7.0  -1!"566 * *1<QII#-d.FGNN+SX6   )//222(4
 ))X -/0ABG   *!-GHH K,33A666 1<<SXrJJJ()%%# K 7K)#(3$$$$$rH   )r=   r    r>   r?   )r   r   r>   r?   )r   r   r   r   r   r  __classcell__)r   s   @rF   r   r     si         	% 	% 	% 	% 	% 	%'% '% '% '% '% '% '% '% '% '%rH   r   c                  $    e Zd ZU ded<   ded<   dS )RegisteredImplr   r  r   r  Nr   rB   rH   rF   r  r  5  s*             rH   r  	decoratorr   rk   RegisteredImpl | Nonec                ,   t          | t                    rt          | j                  dk    rvt          | j        d         t                    rV| j        }| j        d         j        }t          |t                    sd S t          |t                    rt          ||          S npt          | t                    r[|j
        sd S t          |j
        d         j        j                  }t          |t                    sd S |j        }t          | |          S d S )NrM   r   )rC   r   r   r   r   calleerE   r   r   +registered_impl_from_possible_register_call	argumentsr   variabler   r   )r  rk   r  r  arg_typerU   s         rF   r  r  :  s    	9h''L	1$$y~a('22 % !!q).-22 	4fj)) 	V>v}UUU	V 
Iz	*	* 	L ~ 	4"4>!#4#=#BCC(H-- 	4}:9dKKK4rH   exprr   r  c                    | j         dk    rPt          | j        t                    r6| j        j        }t          |t
                    rt          |j        |          S d S )Nregister)rS   rC   r  r   rE   r   r  rk   )r  r  rE   s      rF   r  r  Z  sT     yJ:di#B#By~dI&& 	<!$)];;;4rH   N)r6   r.   r7   r8   r9   r   r:   r;   r<   r4   r=   r    r>   r?   )rE   r   rK   r   r>   rp   )r6   r.   r7   r8   rt   r(   r>   r?   )rK   r   r>   r~   )
r   r   r   r   r   r   r6   r.   r>   r%   )r{   r!   r   r   rJ   r   r6   r.   rE   r   r>   r?   )r   r   r>   rp   )r   r   r>   rp   )r]   r   r   r   rJ   r   r=   r    r6   r.   r>   r?   )rJ   r   r{   r!   r]   r   r   r   r=   r    r6   r.   r>   r?   )
rU   r   r{   r!   r   r   r6   r.   r>   r?   )rU   r   r{   r!   r   r   r   r*   r   r   r6   r.   r>   r?   )
r{   r!   r   r   r   r*   r   r   r>   r?   )
rJ   r   r{   r!   r   r   r6   r.   r>   r?   )r7   r8   r=   r    r>   r   )r  r   rk   r   r>   r  )r  r   r  r   r>   r  )^__doc__
__future__r   collectionsr   typingr   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+   r,   r-   mypyc.irbuild.mapperr.   mypyc.irbuild.utilr/   r0   r1   r2   r3   mypyc.optionsr4   mypyc.sametyper5   ro   rs   r}   rb   rc   r   r   r   r_   r   ra   r   r   r   r   r`   RegisterImplInfor   r   r   r  r  r  rB   rH   rF   <module>r/     s    # " " " " " # # # # # # . . . . . . . . . .                                       " , + + + + + + + + + + + 6 6 6 6 6 6 6 6 6 6 9 9 9 9 9 9 9 9 $ $ $ $ $ $       % % % % % %                # " " " " " ` ` ` ` ` ` ` ` ` ` ` ` ` ` ' ' ' ' ' '              * ) ) ) ) ) ' ' ' ' ' 'B B B BJ> > > >J J J J	* 	* 	* 	*
 
 
 
= = = =6   $   L L L L^' ' ' 'T   &O O O O>	. 	. 	. 	.
( 
( 
( 
(1 1 1 1<
 
 
 
4 7*+ 3 3 3 3 3 3 3 3
Z Z Z Z5% 5% 5% 5% 5%, 5% 5% 5%p    Z   
   @     rH   