
    \j                       U d Z ddlmZ ddlmZ ddlmZ ddl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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'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZL dZMdeNd<   drd'ZOdsd-ZPdtd0ZQdud2ZRdvd:ZS	 dwdxd>ZTdydCZUdzdEZVd{dHZWd|dJZXd}dMZYd~dNZZddPZ[ddQZ\ddRZ]ddUZ^ddYZ_ddZZ`dd[Zadd_Zbdd`ZcddaZdeeeef         Zf G db dce	          ZgdddZh G de dfe           Zi G dg dhe	          ZjddlZkddoZlddpZmdqS )a  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)Final
NamedTuple)Graph)ARG_STAR	ARG_STAR2CallExprClassDef	Decorator
ExpressionFuncDef	IndexExpr
MemberExprMypyFileNameExprOverloadedFuncDefRefExpr
SymbolNodeTypeInfoVar)refers_to_fullname)TraverserVisitor)InstanceTypeget_proper_type)FAST_PREFIXPROPSET_PREFIX	SELF_NAMEget_id_from_name)catch_errors)Errors)ClassIR)FUNC_CLASSMETHODFUNC_NORMALFUNC_STATICMETHODFuncDeclFuncSignature
RuntimeArg)	DeserMaps)	RInstanceRTypedict_rprimitivenone_rprimitiveobject_pointer_rprimitiveobject_rprimitivetuple_rprimitive)Mapper)get_func_defget_mypyc_attrsis_dataclassis_extension_classis_trait)CompilerOptions)is_same_type__mypyc_generator_helper__r   GENERATOR_HELPER_NAMEmapperr3   moduleslist[MypyFile]graphr   typesdict[Expression, Type]optionsr9   errorsr#   returnNonec                   g }|D ]4d j         D             }|                    fd|D                        5|D ]\  }t          |j        j        t          |          |j        j        |j        j                  }	t          j
        ||          |	_        |	j        r#|j        j                                        |	_        |j        sd |	_        |	| j        |j        <   | j                            |	j                   |j        j        ot+          |j        j                  dk    |	_        |D ]\  }t/          j
        |j                  5  | j        |j                 j        rt3          j
        j        ||| |           nt5          j
        j        ||| |           d d d            n# 1 swxY w Y   |D ]e\  }t/          j
        |j                  5  | j        |j                 j        rt7          j
        |||            d d d            n# 1 swxY w Y   f|D ]:\  }| j        |j                 }	|	j        rt9          |j        |	j        |            ;|D ],t;                    D ]}
t=          j        d |
| |           -|D ]\  }| j        |j                 }	|	j        D ]}|	j         dd          D ]}||j        v r|tC          |	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     Y/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypyc/irbuild/prepare.py
<listcomp>z"build_type_map.<locals>.<listcomp>Y   s'    UUU4*T8:T:TU$UUU    c                    g | ]}|fS rI   rI   )rK   cdefmodules     rM   rN   z"build_type_map.<locals>.<listcomp>Z   s    BBB4BBBrO   )is_abstractis_final_classr      traitclassz	Type of "z%" is incompatible with definition in z "")%defsextendr$   namefullnamer8   inforS   is_finalr7   pathis_ext_classdeletable_attributescopy	deletableglobal_optschildren
type_to_irsymbol_fullnamesaddis_enumlenenum_membersr"   lineprepare_class_defprepare_non_ext_class_defvalidate_acyclic_class_bases#prepare_implicit_property_accessorsget_module_func_defsprepare_func_def
attributesmror:   namesrL   error)r=   r>   r@   rA   rC   rD   classesmodule_classesrQ   class_irfuncattrbase_irrL   kindrR   s                  @rM   build_type_mapr~   N   s    G D DUU6;UUUBBBB>BBBCCCC   Q QIOTNN	-9-
 
 
 !36;f M M  	G!%!?!D!D!F!FH" 	% $H'/$)$##H$56669,PTY5K1L1Lq1P    &+ty11 	 	 +8 !&+vffV]^^^^)K$  		 	 	 	 	 	 	 	 	 	 	 	 	 	 	   P P&+ty11 	P 	P +8 P,V[$OOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P
   ^ ^$TY/  	^/	8V_V\]]]
  K K(00 	K 	KDV_dD&'JJJJ	K    $TY/' 	 	D#<+  7---'(;D(A7CUVZC[\\ 	#yt49#///*1*:GwwE E E-1E E5<\E E E"K I	  	 s%   AF33F7	:F7	 /HH	"H	rL   r   rR   r   boolc                8    | j         |j         dz   | j        z   k    S )N.)r\   r[   )rL   rR   s     rM   is_from_moduler      s    =FOc1DI===rO   	deser_ctxr+   c                   |D ]}|j                                         D ]}t          |j        t                    rt          |j        |          r|j        j        s|j        j        s|j        j        ||j	        
                    |j        j                  }|||| j        |j        <   | j                            |j        j                   |j        s|j        s|j        | j        |j        <   Ҍ|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)ru   valuesrJ   rL   r   r   
is_newtypeis_named_tupletypeddict_typerw   getr\   rf   rg   rh   r8   builtin_basectorfunc_to_declrq   r!   r[   rl   	functionsdecl)r=   r>   r   rR   rL   irrz   func_ids           rM   load_type_mapr      sm    = =L'')) 	= 	=D49h//="49f55= 	,= 	0	=
 I,4 &**49+=>>:/1!$),'++DI,>???
 { =2? =57WF'	2-	=0  J J(00 	J 	JD&ty$-KKG(1(;G(D(IF%%	JJ JrO   Iterable[FuncDef]c              #     K   | j                                         D ]T}t          |j        t          t
          t          f          r+t          |j        |           rt          |j                  V  UdS )z?Collect all of the (non-method) functions declared in a module.N)	ru   r   rJ   rL   r   r   r   r   r4   )rR   rL   s     rM   rq   rq      s~      ##%% * * di'96G!HII 	*nIvO
 O
 	* ty)))))* *rO   module_namestr
class_name
str | Nonefdefr   r(   c           	         |j         rt          n|j        rt          nt          }|                    ||j                  }t          |j        || |||j	        |j
                  }||j        |<   |S )N)is_generatoris_coroutine)is_classr%   	is_staticr'   r&   fdef_to_sigstrict_dunders_typingr(   r[   r   r   r   )r   r   r   r=   rC   r}   sigr   s           rM   rr   rr      s     =	D#'>B{ 	
 

T7#@
A
AC	&&  D !%FKrO    name_suffixr$   c                >   |j         s	|j        sJ d                    d |j        |fD                       dz   |z   }t	          || d|du           }d|_        ||j        |<   t          t          t          t                    t          dt                    t          dt                    t          d	t                    t          d
t                    t          dt                    ft                    }t          t          || |d          }||j        |j        <   |S )zFor a generator/async function, declare a generator class.

    Each generator and async function gets a dedicated class that implements the
    generator protocol with generated methods.
    _c              3     K   | ]}||V  	d S NrI   )rK   xs     rM   	<genexpr>z2create_generator_class_for_func.<locals>.<genexpr>   s'      <<!!<A<<<<<<rO   _genTN)is_generatedrT   typevalue	tracebackargstop_iter_ptr)internal)r   r   joinr[   r$   reuse_freed_instancefdef_to_generatorr)   r*   r    r1   r0   r(   r<   method_decls)	r   r   r   r=   r   r[   cir
helper_sighelper_fn_decls	            rM   create_generator_class_for_funcr      s    1 111188<<	:6<<<<<vESD
$$zUYGY
Z
Z
ZC#C%(FT"y"344v011w 122{$566u/00(ABB	
 	 J 3T;
]abbbN,:C^()JrO   r   rQ   r   FuncDef | Decoratorc                   t          |t                    r't          ||j        |||          | j        |j        <   d S t          |t
                    r t          ||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   setterTrU   z.Expected return type annotation for property '')rJ   r   rr   r[   r   r   rz   
decoratorsr   r   is_prop_setterr   argspos_onlyis_propertyr   is_prop_getterret_typeproperty_types)r   r   rQ   r=   rL   rC   r   s          rM   prepare_method_defr     s`    $   =%5D&'&
 &
	""" 
D)	$	$ =  TY	67SS 
	?)-BODI&&*J77 	?DOA<N<SW_<_<_ '2DI"&D(,DHM!%:>BONTY679  	=9>``#`TXT]#`#`#````"&D+/8+<Bdi((('= = 	= 	=rO   SymbolNode | Nonec                .   | j         rt          |t                    r|j        rdS |j        }t          |t
                    sdS t          |j        z   }|                    ||j	                  }t          ||j        ||t                    }|| j        |<   dS )z?Add fast (direct) variants of methods in non-extension classes.N)ri   rJ   r   r   implr   r   r[   r   r   r(   r&   r   )	r   r   rQ   r=   rL   rC   r[   r   r   s	            rM   prepare_fast_pathr   /  s     
z % d-.. 	 9D$(( 	F
 TY&  w'DEEdic;GG $
FrO   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   rU   r   )	rj   itemsrJ   r   rz   r   r   r   r[   )r   getterr   s      rM   is_valid_multipart_property_defr   M  s    
4:!uZ]FZ]F 	69%% 	2vy))	2K#	2 !""a'	2 v(+Z88		2
 a %1rO   r   c                
    | dv S )N)zbuiltins.Exceptionzbuiltins.LookupErrorzbuiltins.IndexErrorzbuiltins.Warningzbuiltins.UserWarningzbuiltins.ValueErrorbuiltins.objectrI   )r   s    rM   can_subclass_builtinr   _  s    	

 
rO   exprr   c                v    t          | t                    r| j        } t          | t                    r| j        S d S r   )rJ   r   baser   r\   )r   s    rM   get_removed_base_fullnamer   n  s:    $	"" y$   }4rO   c                    | j         rdS | j        D ]}t          |          x}r|c S  dS | j        j        dd          D ]:}|j        dk    r|j                            |          }||j        r2|j        c S d S )Nztyping.Genericza removed base classrU   r   )		type_argsremoved_base_type_exprsr   r]   rt   r\   rf   r   
is_acyclic)rQ   r=   r   r\   r   r|   s         rM   find_non_acyclic_baser   v  s    ~  , & &06668 	OOO%%%	abb!  =---#''--7#5}4rO   r_   c                    |j         |j                 }|j        sd S t          ||          x}r"|                    d| d| |j                   d S d S )NzH"acyclic" can't be used in a class that inherits from non-acyclic type "rX   )rf   r]   r   r   rv   rl   )r_   rQ   rD   r=   r   r\   s         rM   ro   ro     sz     
	49	%B= (v666x 
cX`cccI	
 	
 	
 	
 	

 
rO   c           	        j         |j                 }|j        }t          || |          \  }}	|                    d          du rd|_        |                    d          du rd|_        |                    d          du rd|_        |j        D ]}
|
j        dk    rd|_	        |
j        dk    rd|_	        (|
j        
                    d	          rht          |
j                  sT|                    d
| |j                   |                    d| |j                   |                    d| |j                   |                    d          }||	d         }|j        r|                    d| |           |j        r|                    d| |           |j	        r|                    d| |           |dk    rd|_        n|                    d| | |           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||         |_        ||_        ||_        t9          ||| |||           t;          |||           |D ]#}|j        |j                            |           $t?          |          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serializableacycliczbuiltins.BaseExceptionPyBaseExceptionObjectzbuiltins.dictPyDictObject	builtins.z3Inheriting from most builtin types is unimplementedzEPotential workaround: @mypy_extensions.mypyc_attr(native_class=False)zVhttps://mypyc.readthedocs.io/en/stable/native_classes.html#defining-non-native-classesfree_list_lenNz)"free_list_len" can't be used with traitszK"free_list_len" can't be used in a class that allows interpreted subclasseszK"free_list_len" can't be used in a class that inherits from a built-in typerU   z'Unsupported value for "free_list_len": c                P    g | ]"}|j         j        v j        |j                  #S rI   )r   rf   )rK   r   r=   s     rM   rN   z%prepare_class_def.<locals>.<listcomp>  s3    cccdDIQWQbDbDbVty)DbDbDbrO   c              3  &   K   | ]}|j          V  d S r   r8   rK   cs     rM   r   z$prepare_class_def.<locals>.<genexpr>  s&      <<!*n<<<<<<rO   r   z/Non-trait base must appear first in parent listc                     g | ]}|j         	|S rI   r   r   s     rM   rN   z%prepare_class_def.<locals>.<listcomp>  s    000qQZ0000rO   r   )!rf   r]   r5   r   r   _serializabler   rt   r\   r   
startswithr   rv   rl   noter8   r   basesrj   anytraitsinherits_pythonappenddefnr   r`   r   base_mroprepare_methods_and_attributesprepare_init_methodre   r6   is_augmented)r_   r   rQ   rD   r=   rC   r   r]   attrsattrs_linesclsr   rl   r   rt   r   r|   base_idxr   s       `              rM   rm   rm     s    
	49	%B9D(tV<<E;yy/00D88*.'yy  D((yyt## x   <3335BOO\_,,,BOO\$$[11 	'55 
 I4QUQZ   [I  
 lI   IIo..M ?+; 	SLLEtTRRR* 	LL^  
 ? 	LL^  
 A&*B##LLR=RRTXZ^___ 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;PWXXXb+v666 % %=$M  $$$D  rO   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        rWt)          |	j                  r%|	j        j        D ]}t#          ||| |||           G|                    d|| j                   e|	j        j        s|                    d|| 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 semanticsz2Overloads without implementation are not supportedN)r]   ru   r   plugin_generatedrJ   rL   r   r   is_classvartype_to_rtyper8   error_overlapadd_getter_declarationadd_setter_declarationrs   r   r   r   r   r   r   rv   rl   r   r   clear)rQ   r   r_   r   rD   r=   rC   r]   r[   rL   
attr_rtypeitems               rM   r   r     s3    9Dj&&(( #_ #_
d  	di%% 	_9>HH#AD#H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;fdiQQQQ	#455 	_y$ _249== ^ $	 Y Y*2{D&$PWXXXXY LL!KTSWS\]]]] y~ _LLLdTXT]    'r;fdinV]^^^	 
 rO   r]   r   c           
     f   t                      }|j        D ]J}|j                                        D ].\  }}|                    |           t          | |||||           /K|j        dd          D ]@}|j        r7|j                                        D ]\  }}||vrt          | |||||           Ad S NrU   )setr   rs   r   rh   ,add_property_methods_for_attribute_if_neededrt   r8   )r]   r   r   r=   concrete_attributesr   r[   r  s           rM   rp   rp   F  s     %%   $ 5 5 7 7 	 	D*##D)))8b$
K   	
 qrr
  = 	$(O$9$9$;$;   j222@b$
K  	 rO   	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.
    rU   N)rt   rf   ru   r   rL   rJ   r   r[   r   r  r   r   r  r8   r  )
r]   r   r  r  r   r=   r   r|   nrL   s
             rM   r  r  Y  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rO   c                    t          dt          |           d          }t          |g|          }t          || j        ||t
                    }d|_        d|_        || j        |<   || j	        |<   d S )NselfTr   )
r*   r,   r)   r(   r[   r&   r   implicitr   r   )r   r  r  r   self_argr   r   s          rM   r  r  x  st     &)B--$???H

J
/
/CIrwS+FFDDDM!%BOI#-Bi   rO   c                   t          dt          |           d          }t          d|d          }t          ||gt                    }t          |z   }t          || j        ||t                    }d|_        d|_	        || j
        |<   d S )Nr  Tr  r   )r*   r,   r)   r/   r   r(   r[   r&   r   r  r   )	r   r  r  r   r  	value_argr   setter_namer   s	            rM   r  r    s     &)B--$???H7J>>>I
9-
?
?C 9,KK+sKHHDDDM#'BOK   rO   init_sigr)   new_sigc                ,   t          | j                  | j        z
  }t          |j                  |j        z
  }||k    rdS t          d|          D ]B}| j        |         }|j        |         }|j        |j        k    r dS |j        |j        k    r dS CdS )NFrU   T)rj   r   num_bitmap_argsranger   r}   )r  r  num_init_argsnum_new_argsidxinit_argnew_args          rM   check_matching_argsr#    s    &&)AAMw|$$w'>>L$$uQ&&  =%,s#=GL((55=GL((55 ) 4rO   c           	     8   | j         d         j        }d }| j                             d          }|r(|j        r!|j                            d          s|j        }t          |t          t          f          rt          |          }|j	        s|j
        st          |t                    rp|                    |d          }d}t          |t                    r&|                    |d          }	t          ||	          }|j                            |j                   }
|
|
j        r| j         d         j        r|j         j        dk    s|sUt#          |j        d         t'          dt(          t*                    t'          dt,          t.                    g|j                  }t3          |j                  |j        z
  }t#          |j        d	|         t7          |                    }t9          | j        d ||          |_        |j        |j        | j         <   d S d S d S d S )
N__init____new__r   Tr   r   r   kwargsrU   ) r]   rL   r   r\   r   rJ   r   r   r4   r8   r   r   r   r#  rf   r`   r   r)   r   r*   r2   r	   r.   r
   r   rj   r  r,   r(   r[   r   r   )rQ   r   r   r=   	init_nodenew_node
new_symbolr  
args_matchr  defining_irlast_argctor_sigs                rM   r   r     s   	*%*I"&Hy))J
  #j) #*2E2P2PQ\2]2] #?(Y(9:;; *)); 1r 1:i3Q3Q 1%%i66
h(( 	@((488G,Xw??J'++IN;; #"/ $9Z(9 $ '+<<< =$M!$v'7BBx)DD
 ! H x}%%(@@ qz!:IbMMJJ49dKBB)+DI&&&?1 1 1 1 1 1rO   c           
        j         |j                 }|j        }|j                                        D ]}t	          |j        t          t          f          rt          ||||j        |           nt	          |j        t                    r|j        j
        rTt          |j                  s|                    d| |j                   |j        j        D ]}	t          ||||	|           n&t          |||t          |j                  |           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   )rf   r`   )rK   r   r=   s     rM   r   z,prepare_non_ext_class_def.<locals>.<genexpr>  s<      
`
`PS3&##K(9#(>(K
`
`
`
`
`
`rO   z<Non-extension classes may not inherit from extension classes)rf   r]   ru   r   rJ   rL   r   r   r   r   r   r   rv   rl   r   r4   r   r   rt   )
r_   r   rQ   rD   r=   rC   r   r]   rL   r  s
       `     rM   rn   rn     s    
	49	%B9D
!!## M Mdi'9!566 	dr;fdiQQQQ	#455 		dy$ d6tyAA ^LL!KTSWS\]]] IO U UD&r;fdGTTTTU #2{D&,tyBYBY[bccc"k4GLLLL

`
`
`
`W[W_
`
`
``` 
JDRVR[	
 	
 	
 	
 	

 
rO   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__rI   rO   rM   r2  r2    s*         ????222222rO   r2  c                    t          |          }| D ]#}|j        |_        |                    |           $t	          |j        |j                  S r   )SingledispatchVisitorr_   current_pathacceptr2  r3  r4  )r>   rD   visitorrR   s       rM   "find_singledispatch_register_implsr?    sU     $F++G  %{gg:G<XYYYrO   c                  D     e Zd ZU ded<   d fdZd fd
Zd fdZ xZS )r;  r   r<  rD   r#   rE   rF   c                    t                                                       t          t                    | _        i | _        || _        d| _        d S )Nr   )superr%  r   listr3  r4  rD   func_stack_depth)r  rD   	__class__s     rM   r%  zSingledispatchVisitor.__init__	  sN     S^^bRcRc! ?A!$ !rO   or   c                    | xj         dz  c_         t                                          |           | xj         dz  c_         d S r
  )rD  rB  visit_func_def)r  rF  rE  s     rM   rH  z$SingledispatchVisitor.visit_func_def  sI    "q!!!"rO   decr   c                N   |j         rz|j                                         }g }d }t          |          D ];\  }}t          ||j                  }|| j        dk    r&| j                            d| j        |j	                   | j
        |j                                     |j        |j        f           |                    |           |,| j                            d| j        ||         j	                   t          |d          rf| j        dk    r&| j                            d| j        |j	                   |                    |           | j
                            |j        g            |}=|r|| j        |j        <   t#                                          |           d S )Nr   z*Registering nested functions not supportedz:Calling decorator after registering function not supportedzfunctools.singledispatchz-Nested singledispatch functions not supported)r   rb   	enumerate%get_singledispatch_register_call_inforz   rD  rD   rv   r<  rl   r3  singledispatch_funcr   dispatch_typer   
setdefaultr4  rB  visit_decorator)	r  rI  decorators_to_storer4  last_non_registeridr   rE  s	           rM   rP  z%SingledispatchVisitor.visit_decorator  s   > .	K"%."5"5"7"7.0  -1!"566 "* "*1<QII#,q00))H$J[]^]c   -d.FGNN+SX6   )//222(4
 ))X -/0ABG   *!-GHH K0144 K-- O $ 1 !  
 -33A666 1<<SXrJJJ()%%# K 7K)#(3$$$$$rO   )rD   r#   rE   rF   )rF  r   rE   rF   )rI  r   rE   rF   )r6  r7  r8  r9  r%  rH  rP  __classcell__)rE  s   @rM   r;  r;    s         
" 
" 
" 
" 
" 
"# # # # # #
1% 1% 1% 1% 1% 1% 1% 1% 1% 1%rO   r;  c                  $    e Zd ZU ded<   ded<   dS )RegisteredImplr   rM  r   rN  Nr5  rI   rO   rM   rW  rW  N  s*             rO   rW  	decoratorrz   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 )NrU   r   )rJ   r   rj   r   r   calleerL   r   r   +registered_impl_from_possible_register_call	argumentsr   variabler   r   )rX  rz   r[  rN  arg_typer]   s         rM   rL  rL  S  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4rO   r   rN  c                    | j         dk    rPt          | j        t                    r6| j        j        }t          |t
                    rt          |j        |          S d S )Nregister)r[   rJ   r   r   rL   r   rW  rz   )r   rN  rL   s      rM   r\  r\  s  sT     yJ:di#B#By~dI&& 	<!$)];;;4rO   c                   g }| j                                         D ]D\  }}t          |t                    r(|j        s|j        rt          |j        |j        ||           }|j	        s|j
        }d}|j        s| j        |j                 }|                                }|d}nJ|j        rd}n@|D ]:}	||	j        v r/|	j        |         }
|
j        |j        k    s|
j        |j        k    rd};nd}|rot!          |          |j        _        |j        rt!          |          |j        _        |4|                    |          rd|_        |                    |||f           Fi }|D ]q\  }}}|                                }|U|                    |          r@|                    |          }t          |j        t                     r|j        j        }|||<   r|                                D ]i\  }}|j        |j                            |           	 |j                            |           |j                            |           ||vrn	||         }BjdS )zMake optimizations and adjustments to generated generator classes of methods.

    This is a separate pass after type map has been built, since we need all classes
    to be processed to analyze class hierarchies.
    TNF)r   r   rJ   r   r   r   r   r   r   is_decoratedr[   rf   r]   
subclassesr8   r   r,   r   r   	bound_sigis_method_finalrT   r   	real_base
has_method
method_sigry   re   rt   r   )r=   generator_methodsr   fn_irgen_irr[   precise_ret_typery   subclssm	new_basesgenr   base_sigbase_genderivs                    rM   #adjust_generator_classes_of_methodsrv  }  s    *0022 +K +KedG$$ *	K$*; *	Kt?P *	K4!5#3T6 F $ %Kz#' #/%0;H%0022F~+0((!* = ,1((!' 	= 	=A#q~55$%N4$8$%Ne6H$H$H'(~9K'K'K 8=$4	=  $H# 
K *36):):EI& E3<V3D3D0+#33D99 948F1)00$&1IJJJI0 	. 	.h !!##t$$ .??400h/;; .'09H%-IcN !(( # #t=$M  '''	#IT"""N!!$'''9$$T?D	# # #rO   N)r=   r3   r>   r?   r@   r   rA   rB   rC   r9   rD   r#   rE   rF   )rL   r   rR   r   rE   r   )r=   r3   r>   r?   r   r+   rE   rF   )rR   r   rE   r   )r   r   r   r   r   r   r=   r3   rC   r9   rE   r(   )r   )r   r   r   r   r   r   r=   r3   r   r   rE   r$   )r   r$   r   r   rQ   r   r=   r3   rL   r   rC   r9   rE   rF   )r   r$   r   r   rQ   r   r=   r3   rL   r   rC   r9   rE   rF   )r   r   rE   r   )r   r   rE   r   )r   r   rE   r   )rQ   r   r=   r3   rE   r   )
r_   r   rQ   r   rD   r#   r=   r3   rE   rF   )r_   r   r   r   rQ   r   rD   r#   r=   r3   rC   r9   rE   rF   )rQ   r   r   r$   r_   r   r   r   rD   r#   r=   r3   rC   r9   rE   rF   )
r]   r   r   r$   r   r   r=   r3   rE   rF   )r]   r   r   r$   r  r   r  r-   r   r   r=   r3   rE   rF   )
r   r$   r  r   r  r-   r   r   rE   rF   )r  r)   r  r)   rE   r   )
rQ   r   r   r$   r   r   r=   r3   rE   rF   )r>   r?   rD   r#   rE   r2  )rX  r   rz   r   rE   rY  )r   r   rN  r   rE   rY  )r=   r3   rE   rF   )n__doc__
__future__r   collectionsr   collections.abcr   typingr   r   
mypy.buildr   
mypy.nodesr	   r
   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   r    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/   r0   r1   r2   mypyc.irbuild.mapperr3   mypyc.irbuild.utilr4   r5   r6   r7   r8   mypyc.optionsr9   mypyc.sametyper:   r<   r9  r~   r   r   rq   rr   r   r   r   r   r   r   r   ro   rm   r   rp   r  r  r  r#  r   rn   tupleRegisterImplInfor2  r?  r;  rW  rL  r\  rv  rI   rO   rM   <module>r     s     # " " " " " # # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $                                         $ , + + + + + + + + + + + 6 6 6 6 6 6 6 6 6 6 Q Q Q Q Q Q Q Q Q Q Q Q $ $ $ $ $ $       % % % % % %                # " " " " "                  ( ' ' ' ' '              * ) ) ) ) ) ' ' ' ' ' ';  ; ; ; ;P P P Pf> > > >J J J JB	* 	* 	* 	*   6 ac    B= = = =D   <   $         ,
 
 
 
t t t tn1 1 1 1h   &O O O O>	. 	. 	. 	.
( 
( 
( 
(   $-1 -1 -1 -1`
 
 
 
B 7*+ 3 3 3 3 3 3 3 3
Z Z Z ZE% E% E% E% E%, E% E% E%P    Z   
   @   L# L# L# L# L# L#rO   