
    \j                    z   d Z ddlmZ ddlZddlmZ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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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 dd	l:m;Z;m<Z< dd
l=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ ddl`maZambZb ddlcmdZdmeZe ddlfmgZg ddlhmiZimjZjmkZkmlZlmmZm ddlnmoZompZpmqZqmrZrmsZs ddltmuZumvZvmwZwmxZxmyZy ddlzm{Z{m|Z|m}Z}m~Z~mZmZmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZ dd!Zdd#Zdd'Zdd*Zdd,Zdd/Zdd1Zdd2Zdd5Zdd6Zdd8Zdd9dd>Zdd9ddBZddDZddFZddHZddIZddKZddLZddPZddRZddVZddYZdd\ZddaZdddZddgZddjZddlZddnZddpZddrZddtZddvZddxZddzZdd|Zdd}ZddZddZddZddZddZddZddZddZddZddZddZddZdS )zTransform mypy expression ASTs to mypyc IR (Intermediate Representation).

The top-level AST transformation logic is implemented in mypyc.irbuild.visitor
and mypyc.irbuild.builder.
    )annotationsN)CallableSequence)&	ARG_NAMEDARG_POSLDEFAssertTypeExprAssignmentExpr	BytesExprCallExprCastExprComparisonExprComplexExprConditionalExprDictExprDictionaryComprehensionEllipsisExpr
Expression	FloatExprGeneratorExpr	IndexExprIntExprListComprehensionListExpr
MemberExprMypyFileNameExprOpExprRefExprSetComprehensionSetExpr	SliceExprStarExprStrExpr	SuperExpr	TupleExprTypeApplicationTypeInfoTypeVarLikeExpr	UnaryExprVar)AnyTypeInstance
ProperType	TupleType	TypeOfAnyTypeTypeget_proper_type)MAX_SHORT_INT)ClassIR)FUNC_CLASSMETHODFUNC_STATICMETHOD)	ERR_MAGICAssign
BasicBlockCallCComparisonOpIntegerLoadAddressLoadLiteralPrimitiveDescriptionRaiseStandardErrorRegisterTupleGetTupleSetValue)	RInstanceRTupleRVecbool_rprimitiveint64_rprimitiveint_rprimitive
is_any_intis_bytearray_rprimitiveis_bytes_rprimitiveis_fixed_width_rtypeis_int64_rprimitiveis_int_rprimitiveis_list_rprimitiveis_none_rprimitiveis_object_rprimitiveis_tuple_rprimitiveobject_rprimitiveset_rprimitivevec_api_by_item_type)is_borrow_friendly_exprprocess_conditional)	IRBuilderint_borrow_friendly_op)constant_fold_expr)comprehension_helper)raise_error_if_contains_unreachable_namestranslate_list_comprehensiontranslate_set_comprehensiontranslate_vec_comprehension)convert_format_expr_to_bytesconvert_format_expr_to_strjoin_formatted_bytesjoin_formatted_stringstokenizer_printf_style)apply_dunder_specializationapply_function_specializationapply_method_specializationtranslate_object_newtranslate_object_setattr)as_platform_int
vec_append
vec_createvec_create_from_valuesvec_create_initializedvec_item_type	vec_slice)bytes_slice_op)dict_get_item_opdict_new_opexact_dict_set_item_op)iter_opname_op)list_append_oplist_extend_oplist_slice_op)ellipsis_opget_module_dict_opnew_slice_optype_op)
set_add_op	set_in_opset_update_op)str_slice_op)list_tuple_optuple_slice_opbuilderrZ   exprr   returnrD   c                   t          |j        t                    r6|j        j        r*|                     |j        j        |j        j                  S |j        V|                     t          t          j	        d|j         d|j                             | 
                    |j                  S |j        j        }|                     ||j                  x}r|S |dk    r| 
                    |j                  S |dk    r|                     |j                  S |dk    r|                     |j                  S |dv r|                     |j                  S t          | ||j                  }||S t          |j        t                     r|j        j        r| j                            |          p|j        j        }|t+          t,          j                  }|                     |j        ||j        |                     |          ||j                  }||S t          |j        t4                    r2|j        j        | j        v r|                     |j        j                  S |j        t<          k    rYt          |j        t                     r|j        j        s2t          |j        t                     rktA          | !                    |                    rI|j        j"        r=| #                    d$                    |j        j                  |j        j                   t          |j        t4                    rc| %                    tL          g |j                  }| '                    tP          || )                    |j        j                  g|j                  }|S | *                    | +                    |d	          |j                  S | j,        |j        | j-        v ry| j.        2| j.        j/        r&| 0                    | j,        |j        |j                  S | '                    tP          | j,        | )                    |j                  g|j                  S | 1                    |          S )
Nzname "z" is not definedbuiltins.Nonebuiltins.Truebuiltins.Falseztyping.TYPE_CHECKINGztyping_extensions.TYPE_CHECKINGz=Local variable "{}" has inferred type None; add an annotationT)for_read)2
isinstancenoder)   is_new_styleload_type_varnamelineaddr@   
NAME_ERRORnonefullnameload_builtintruefalsetransform_math_literalr+   is_finaltypesgettyper,   r0   special_formemit_load_finalis_native_ref_exprr   importsload_modulekindr   is_suppressed_importrR   	node_typeis_inferrederrorformatcall_cr}   primitive_oprt   load_strreadget_assignment_targetclass_body_objclass_body_classvarsclass_body_iris_ext_classpy_get_attrload_global)	r   r   r   builtinmath_literal
final_typevaluemod_dictobjs	            \/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypyc/irbuild/expression.pytransform_name_exprr      s$   $)_-- E$)2H E $$TY^TY^DDDy"-/S	/S/S/SUYU^ 	
 	
 	

 ||DI&&&y!H&&x;;;w ?""||DI&&&?""||DI&&&###}}TY'''NNN}}TY''')'8TYGGL$)S!! di&8 ]&&t,,>	
 !788J''IxG,F,Ft,L,LjZ^Zc
 
 L$)X&& 749+=+P+P""49#5666 yD*TY"<"<A_ ty#&&
	"7#4#4T#:#:;;
	 	%
	
 MMOVVIN  		   di** 	_ ~~&8"diHHH&& 8W-=-=di>P-Q-Q"RTXT] C J<< = =dT = R RTXT]^^^
 )di7;W.W.W ,1F1S,&&w'=ty$)TTT'' 7#97;K;KDI;V;V"WY]Yb   t$$$    r   c                   |j         dv r|                     |j                  S |                     |          }|j|\  }}}| j                            |          p|j        }|t          t          j	                  }| 
                    |||j        |||j                  }||S t          | |j         |j                  }||S t          |j        t                    r2|j        j         | j        v r|                     |j        j                   S |                     |          }	|                     |j        |	          }
|                     |          }t-          |
j                  r=|j        dk    r2| j        j        dk    r"|                     t4          |
g|j                  S t          |
j        t6                    r-|j        dk    r"|                     t8          |
g|j                  S t;          | j                            |j                            }t          |t<                    r|j        j        j         rw|j        j        j!        d         d         }|j        |v rQ| j"        #                    |$                    |j                            }| %                    |
d|g||j                  S tM          | ||           |	o| j'        }| j"        (                    |
|j        ||j        |	          S )
Nr   
can_borrow__name__)      	__class__
namedtuplefields__getitem__)borrow))r   r   r   get_final_refr   r   r   r,   r0   r   r   r   r   r   r   r   r   r   is_native_attr_refacceptr   r   rS   optionscapi_versionr   rx   rE   r   r2   r/   partial_fallbackis_named_tuplemetadatar   load_intindexgen_method_call-check_instance_attribute_access_through_classr   get_attr)r   r   finalr   	final_varnativer   r   r   r   r   rtypetypr   r   r   s                   r   transform_member_exprr      s   }SSS}}TY''' !!$''E&+#)V]&&t,,>	
 !788J''xTY
 
 L)'4=$)LLL$)X&& 749+=+P+P""49#5666++D11J
..z.
:
:Cd##E 	SX&&?I##O(G33##GcUDI>>>#(I&& ?49+C+C ##GcUDI>>> '-++DI66
7
7C#y!! Zc&:&?&N Z%*3LA(K9O,,V\\$)-D-DEEE**3wtyYYY1'4EEE.G.F?##CE49V#TTTr   r   ProperType | NoneNonec                   t          |j        t                    r"|j        j        }t          |t                    r&t          |j        t                    r|j        j        }t          |t                    r| j	        j
                            |          }||j        r|                    |j                  }|t          |j        t                    rr|j        j        sh|j        j        s^|                     d                    |j                  |j                   |                     d|j                   dS dS dS dS dS dS dS dS dS )zEReport error if accessing an instance attribute through class object.Nz:Cannot access instance attribute "{}" through class objectzO(Hint: Use "x: Final = ..." or "x: ClassVar = ..." to define a class attribute))r   r   r   r   r1   itemr-   r   r(   mapper
type_to_irr   r   r   r+   is_classvarr   r   r   r   note)r   r   r   r   class_irsyms         r   r   r   $  se    $)W%% y~c8$$ 	!CHh)G)G 	!8=DdH%% 	~044T::H#(=#hhty))O"38S11 $H0 $  H- $
 MMT[[ I  		   LL-	    + 
	 	#### $OOOOOOOr   or%   c                                          d|j                  }|j        j        r fd|j        j        D             }n|j        J                      |j        j                  } j        j        |j                 }t           j
        j                  }t          |          } j        j        rXt           j        d                                                   d         }                     | j        j        j                  }n|j        st          |          }||g}                     |||j                  }	                     |	|j        |j                  S )Nzbuiltins.superc                :    g | ]}                     |          S  r   .0argr   s     r   
<listcomp>z(transform_super_expr.<locals>.<listcomp>H  s%    ;;;s##;;;r      )load_module_attr_by_fullnamer   callargsinfoload_native_type_objectr   r   r   iterr   nextfn_infois_generatorlist	symtablesvaluesr   fitemr   py_callr   r   )
r   r   sup_valr   r   iriter_envvself	self_targress
   `         r   transform_super_exprr  D  s:   223CQVLLGv{ ;;;;qv{;;;v!!!--afo>>^&qv.,--H~~?' 	#W.r299;;<<Q?ILLGO,A,FGGEE 	#NNEU|
//'4
0
0CsAFAF333r   r   c                D   |j         }t          |j        t                    rt	          | |j                  S t          |j        t
                    r|                     |j        j                  S t          |t          t          f          rFt          |j
        t                    r,|j
        j        r |                     |j        d                   S t          |t                    rt          |j        t                    rg|j        }t          |j        t                     r>|j        j        dk    r-t%          |j                  dk    r|                     |j        d                   }t+          |          }t-          | |          }t%          |j                  dk    s)t%          |j                  dk    r/|j        t0          gk    rt3          | j        |d|j        |          S t%          |j                  dk    r|j        t8          gk    s/t%          |j                  dk    r5|j        t8          t0          gk    rt;          | ||j        d         |          S |j        }t          |t                    rlt          |j        t                     r0t          |j        j
        t<                    rt?          | ||          S tA          | ||          ptC          | ||          S t          |tD                    rtG          | ||          S t?          | ||          S )Nr   zlibrt.vecs.vec   capacity   )$calleer   analyzedr   translate_cast_exprr	   r   r   r   r   r   r(   
is_newtyper   r   r'   r   r   lenr   type_to_rtyperG   _get_vec_capacity	arg_kindsr   rn   r   r   r   "translate_vec_create_from_iterabler   translate_callri   translate_method_callr%   translate_super_method_call)r   r   r  r  	item_typevec_typer  s          r   transform_call_exprr  ^  s   [F$-** ,"7DM:::	DM>	2	2 	,~~dm01116Hj122,v{H--, K", ~~dil+++&)$$ FO_)U)U ?x}g..	&*:::HN##q((--hnQ.?@@IIH($77H49~~""s49~~':':t~R[Q\?\?\!'/8Q	T\]]]]di..A%%$.WI*E*EDI!##7I:N(N(N :Xty|h    &*%% 
5fk7++ 	9
6;;KX0V0V 	9!'4888*7D&AA 
EZT6F
 F
 	
 
FI	&	& 5*7D&AAAgtV444r   r  r   c                    t          |t                    r"t           ||          pt           ||          S                      |          } fd|j        D             }                     |||j        |j        |j	                  S )Nc                :    g | ]}                     |          S r   r   r   s     r   r   z"translate_call.<locals>.<listcomp>  s%    555CGNN3555r   r  	arg_names)
r   r   rh   translate_refexpr_callr   r   r   r   r  r  )r   r   r  functionr   s   `    r   r  r    s    &'"" 
,WdFCC 
G]T6H
 H
 	
 ~~f%%H555549555D??$	T^t~    r   r   c                X      fd|j         D             }                     |||          S )zTranslate a non-method call.c                :    g | ]}                     |          S r   r   r   s     r   r   z*translate_refexpr_call.<locals>.<listcomp>  %    ;;;#'..%%;;;r   )r   call_refexpr_with_args)r   r   r  
arg_valuess   `   r   r   r     s8     <;;;;;;J))$
CCCr   c           	                               |          rt           ||          S t          |j        t                    rt          |j        j        t                    r|j        j         j        j        v r j        j        |j        j                 	                    |j
                  rt          d |j        D                       rat          |j        j        t                    sJ |j        j                     j        j        |j        j                 }t           |||          S                      |          rQ                     |          } fd|j        D             }                     |||j        |j        |j                  S t          |j        t                    r|j        j        }t          |t(                    r|j        rt-          |j                  }t          |t0                    rrt          |j        t4                    rX j        j                            |j        j                  }|r-|j        r&|                                rt           |||          S                      |j                  }	t?           |||	          }
|
|
S                      |j                  } fd|j        D             }                      ||j
        |                     |          |j        |j        |j                  S )zvGenerate IR for an arbitrary call of form e.m(...).

    This can also deal with calls to module-level functions.
    c              3  6   K   | ]}|t           t          fv V  d S N)r   r   )r   r   s     r   	<genexpr>z(translate_method_call.<locals>.<genexpr>  s,      HH),,HHHHHHr   c                :    g | ]}                     |          S r   r   r   s     r   r   z)translate_method_call.<locals>.<listcomp>  %    999s##999r   r  Nc                :    g | ]}                     |          S r   r   r   s     r   r   z)translate_method_call.<locals>.<listcomp>  r,  r   )!r   r  r   r   r   r   r(   r   r   
has_methodr   allr  call_classmethodis_module_member_exprr   r   r   r   r  r+   is_clsr2   r   r1   r   r-   r   r   has_no_subclassesr   ri   r   )r   r   r  r  r!  r   r   r   r   receiver_typvalr   s   `           r   r  r    s   
 !!&)) 3
gtV4446;((0
v{'220
 K 999N%fk&67BB6;OO :HHHHHHH :
 &+*H55GGv{7GGGG^&v{'78T6:::		&	&v	.	. %
>>&))9999ty999dDI4>  
 
 	
 fk7++ 		Q;#D$$$ Q Q%di00c8,, QCHh1O1O Q&~8<<SX]KKH QH$9 Qh>X>X>Z>Z Q  04PPP((55 *'4NN?JnnV[))9999ty999&&Kd##INN
 
 	
r   r  r4   c           	         |                     |j                  }g }|j                                        |j                                        }}|j        t          k    re|j        r^|                     	                    |j
                             |                    dt                     |                    dd            | fd|j        D             z  }|j        r# j                            |||||j                  S                      |j                  }                     ||j        |                     |          |j        |j        |j                  S )Nr   c                :    g | ]}                     |          S r   r   r   s     r   r   z$call_classmethod.<locals>.<listcomp>  s%    666SW^^C  666r   )method_declr   r  copyr  r   r5   r   appendr   r   insertr   r   r   r   r   r   r   r   r   )	r   r  r   r  declr   r  r  r   s	   `        r   r0  r0    sD   >>&+&&DD>..00$.2E2E2G2GyIy$$$$G33BK@@AAAG$$$D!!!6666DI6666D	 
##D$	9diPPPnnV[))&&Kd##INN
 
 	
r   c                t    |j         :t          |j        j                  dk    r.t          |j        j                  dk    rt	           ||          S t          |j        j                  dk    r|j        j        d         }t          |t                    r&t          |j        t                    r|j        j	        st	           ||          S |j        j        d         }t          |t                    r(t          |j        t                    r|j         |j        urt	           ||          S  j        j        |j                  }|j        dd          D ]}|j        |j        v r nŌ|j        dk    r)t!           |t#          |j        d                    }|r|S n3|j        dk    r(t%           |t#          |j        d                    }|r|S |j        rE|j        >|j        s7|j        dk    r,t          |j                  dk    r                                 S t	           ||          S |                    |j                  } fd|j        D             }	|j                                        |j                                        }}
|j        t8          k    r|j        dk    r                                 }|j        t<          k    r#                     t@          |g|j!                  }nc j"        j#        rWtI           j%        d         &                                          d	         } '                    | j"        j(        j!                  }|	)                    d|           |
)                    dtT                     |)                    dd             j+                            ||	|
||j!                  S )
Nr   r  r	  __new____setattr____init__c                :    g | ]}                     |          S r   r   r   s     r   r   z/translate_super_method_call.<locals>.<listcomp>+  r$  r   r   r   ),r   r  r   r   r  r   r   r   r+   is_selfr(   r   r   mror   method_declsrj   r   rk   r   builtin_baseinherits_pythonr   r8  r  r9  r  r   r6   selfr5   r   r   r   r   r   r   r   r   r   r   r;  r   r   )r   r   r  self_argtyp_argr  baseresultr<  r&  r  r  r  r  s   `             r   r  r    s   {s6;#34499c&+BR>S>SWX>X>XgtV444 6;!!;#A&8X..	9hmS11	9 =(	9
 "'4888+"1%7H--	9glH55	9 {',..!'4888		"6;	/B qrr
 5 5;$+++E , ;)##)'4FKQZ9[9[\\F [M))-z&+}EE F  ? 	&r6r?Q6{j((S^^q-@-@ ||~~%gtV444FK((D;;;;;;;J>..00$.2E2E2G2GyIy%%%$)y*@*@||~~9(((((5'49EEEE_) 	H W.r299;;<<Q?ILLGO,A,FGGE!U###G$$$D!!!?j)Y	RRRr   Value | Nonec                    t          t          |j        |j                            D ];\  }\  }}|t          k    r(|dk    r"|                     |j        |                   c S <dS )zIExtract the 'capacity' keyword argument value from a vec() call, or None.r  N)	enumeratezipr  r  r   r   r   )r   r   ir   r   s        r   r  r  B  sh    $S%H%HII 0 0<D$9!3!3>>$)A,/////4r   r
  r  rG   r   r  c                  |j         }|j        }t          |t                    r|j        dk    rt          |j        t                    r|j        }|j        }n+t          |j        t                    r|j        }|j        }nJ t          |j	                  dk    sJ | 
                    |          }t          |          st          |          rO|                     |          }	|                     |j	        d                   }
t          | j        ||	|
||          S J |            t          |t                    rdg }|j	        D ]A}|                     |          }|                    |                     |||                     Bt%          | j        ||||          S t          |t&                    rt)          | ||j        |          S t-          | ||||          S )N*Fr	  r   r
  )r   r  r   r   opleftr   rightr  itemsr   rO   rP   r   rp   r   r:  coercero   r   ra   	generatorvec_from_iterable)r   r  r   r  r   r  lstother
other_typelengthinitrV  r   r   s                 r   r  r  J  s    8D"I#v !36S==ch)) 	(CIEE	8,, 	)CHEEL39~~""""&&u--
z** 	.?
.K.K 	^^E**F>>#)A,//D)64    	!j   #x   aI 	A 	ADNN4((ELLy$??@@@@%goxW_````#()) `*7HcmV^____WhTHMMMMr   iterabler   intc          
         |j         }t          j        |          }                     |          }t	          |          pt          |          pt          |          }|(|st          |          st          |          r| d}	g }
n8|4|	                                dk    r|rd}	t           j        |          g}
nd}	|	                     |          }|t           j        |          nt          dt                    }|
||gz   }t!          |	||dgt#          |          z  dt$                    }                     |          S t)          |                               t-           j        |d|                     d }	t/          |	          }                     ||j                   t3          |	          }t4          |_        ||_        ||g dfg}d fd}t;           ||           S )z+Construct a vec from an arbitrary iterable.Nz.from_iterabler   zVecTApi.from_iterableF)stealsis_borrowed
error_kindr   r
  ___tmp_r   r   c            	     `                          t           j                             d S r)  )assignrm   r   )r   r   regvecs   r   gen_inner_stmtsz*vec_from_iterable.<locals>.gen_inner_stmts  s/    sJwS$GGNNNNNr   r   r   )r  rW   r   r   rS   rQ   rT   rM   rL   depthrq   r   r   rl   r<   rI   r:   r  r7   r   rA   rg  rn   r+   	add_localr   r   r   r   r]   )r   r  r_  r   r  r  api_nameiterable_rtypeuse_c_from_iterabler   
extra_argsiterable_valcapr   r   varr   loop_paramsrj  rh  ri  s   `  `               @@r   rY  rY  m  s{    "I#'	22H&&x00N^,, 	/n--	/~.. 
  ~..  #>22  ***"$

		hnn..!338K3&#GOYEEF

~~h// # GOXt<<<,-- 	
 \3//7SYY& 
 
 
 {{4    8

CNN3
7?HaPXYYY[_```TD
d))C


C!3
4
4CTNNEEJEJ	"e$PKO O O O O O O O O +EEEJr   r   c                    |                      |j                  }|                     |j                  }|                     |||j                  S r)  )r   r   r  r   rW  r   )r   r   srctarget_types       r   r  r    sB    
..
#
#C''	22K>>#{DI666r   r*   c                    t          | |          }|r|S |                     |                     |j                  |j        |j                  S r)  )try_constant_foldunary_opr   r   rS  r   )r   r   foldeds      r   transform_unary_exprr}    sH    w--F GNN4955tw	JJJr   r   c                H   |j         dv r|                     |          S |j         dk    r@t          |j        t          t
          f          rt          | |j        |j                  }||S t          | |          }|r|S d}d}| 	                    |j                  }| 	                    |j                  }t          |          rPt          |          rA|j         dk    rt          | |          }|j         t          v rt          | |j                  }d}n5t          |          r&t          |          rt          | |j                  }d}|                     |j        |          }|                     |j        |          }	|                     ||	|j         |j                  S )N)andor%Fz//Tr   )rS  shortcircuit_exprr   rT  r$   r   !translate_printf_style_formattingrU  rz  r   rP   try_optimize_int_floor_divider[   rX   rN   r   	binary_opr   )
r   r   retr|  borrow_leftborrow_rightltyper   rT  rU  s
             r   transform_op_exprr    s   w-((... w#~~*TY)0DEE~/DJOO?Jw--F KLdi((Edj))E  $5e$<$< 7d??0$??D7,,,1'4:FFKL	e	$	$ )=e)D)D -gtzBB>>$)><<DNN4:,N??ET5$'49===r   c                    t          | |j                  }t          |t                    s|S |                                dz
  }d|cxk     rdk     r=n n:|d|z  k    r1t          d|j        t          |                    }|j        |_        |S |S )z?Replace // with a power of two with a right shift, if possible.r	  r      z>>)	r\   rU  r   r`  
bit_lengthr   rT  r   r   )r   r   divisorshiftnew_exprs        r   r  r    s     $*55Ggs##   1$E5~~~~2~~~~~'a5j11$	75>>::	Kr   r   c                z   |j         }|                     |j                  }t          |          pt	          |t
                    }|ot          | |          }t	          |t                    st          | |j        |gd|          }||S | 	                    |j        |          }t	          |j
        t                    r{t          | |          }t	          |t                    rVt          |j
        j                  }	|	 |cxk    r	|	dz
  k    r,n n)|                     t#          |||j                            S t	          |t                    rt'          | ||          }
|
r|
S | 	                    |j         |          }| j                            |||                     |          |j        | j                  S )Nr   r   r	  )r   r   rJ  rQ   r   rG   rX   r"   rg   r   r   rF   r\   r`  r  r   r   rB   r   try_gen_slice_opr   get_itemr   )r   r   r   	base_typer   can_borrow_basespecializedrJ  folded_indexr]  r   	index_regs               r   transform_index_exprr    s   JE!!$),,I#I..M*Y2M2MJ L%<We%L%LO eY'' 1'49ug}^bcc">>$)>@@D$)V$$ L)'599lC(( 	L))Fw,4444&1*44444{{8D,	#J#JKKK%##  $66 	LtzjAAI?##i**400$)HZ $   r   c                T    t          | |          }||                     |          S dS )zXReturn the constant value of an expression if possible.

    Return None otherwise.
    N)r\   load_literal_value)r   r   r   s      r   rz  rz    s2    
 w--E))%0004r   rJ  r   r"   c                   |j         rdS |j        r|                     |j                  }nt          }|j        r|                     |j                  }nt          }t          |          rt          |          r|j        r|                     |j                  }n|                     d          }|j        r|                     |j                  }n|                     t                    }t          |j
        t                    rt          | j        ||||j                  S t          t           t"          t$          g}| j                            ||||g|j                  S dS )zGenerate specialized slice op for some index expressions.

    Return None if a specialized op isn't available.

    This supports obj[x:y], obj[:x], and obj[x:] for a few types.
    Nr   )stridebegin_indexr   rJ   	end_indexrK   r   r   r3   r   r   rG   rr   r   r   r{   r   r   rs   matching_call_c)r   rJ  r   
begin_typeend_typebeginend
candidatess           r   r  r  #  sQ    | t $&&u'899

#
 "$$U_55! * [*X"6"6 [ 	(NN5#455EE$$Q''E? 	2..11CC ""=11Cdi&& 	LW_dE3
KKK#^\>R
..zD%;MuzZZZ4r   r   c                   t                      t                      t                      }}}t          | |j        ||           |                     |          }t	          |          }|                     |           |                     |j                  }|                     |||j	                  }| 
                    t          |||j	                             |                     |           |                     |           |                     |j                  }|                     |||j	                  }| 
                    t          |||j	                             |                     |           |                     |           |S r)  )r9   rY   condr   rA   activate_blockr   if_exprrW  r   r   r8   goto	else_expr)	r   r   if_body	else_body
next_block	expr_typetarget
true_valuefalse_values	            r   transform_conditional_exprr  K  sJ   %/\\:<<
YGGY???!!$''Ii  F7###--J
ItyAAJKKvz4955666LL9%%%..00K..iCCKKKv{DI66777LL:&&&Mr   rV  Sequence[Expression]list[object] | Nonec                4   g }|D ]}t          | |          }||                    |           *t          |t                    rc|j        dk    r|                    d            `|j        dk    r|                    d           |j        dk    r|                    d           t          |t
                    r9t          | |j                  }|"|                    t          |                     t          |          t          |          k    rd S |S )Nr   r   Tr   F)
r\   r:  r   r   r   r&   set_literal_valuesrV  tupler  )r   rV  r   r   const_valuetuple_valuess         r   r  r  d  s   F 3 3($77"MM+&&&dG$$ 
	3}//d####/11d####"222e$$$i(( 	3-gtzBBL'eL11222
6{{c%jj  tMr   sr!   c                    t          | |j                  }|5|                     t          t	          |          t
                              S dS )a  Try to pre-compute a frozenset literal during module initialization.

    Return None if it's not possible.

    Supported items:
     - Anything supported by irbuild.constant_fold.constant_fold_expr()
     - None, True, and False
     - Tuple literals with only items listed above
    N)r  rV  r   r>   	frozensetrV   )r   r  r   s      r   precompute_set_literalr  ~  sD      11F{{;y'8'8.IIJJJ4r   er   c                   	
 j         d         }|dv rJt          j                   dk    r2t           |j        d         j        d         j                  }||S t          j                   dk    r|dv rNj        d         }t          |t                    r,|j        dk    r!t           j        d         |dk              S j        d         }t           
                    |                    rj        d         }t           
                    |                    rd|t          v r[t           |          }                     ||          }                     |d	          }                     |||j                  S  
                              	d 	
fd
 
d                     j        d                             S )Nr   )innot inr	  )isis notr   r  )negatedr   TrP  r`  prevrD   r   c           
     l     t          j                  dz
  k    rDt          j                                      j         dz                      j                  S                     j         dz                      j                            d fd fdj                  S )Nr	  r  c                 J    t           j                 j                  S r)  )transform_basic_comparison	operatorsr   )r   r  rP  r   r  s   r   <lambda>z7transform_comparison_expr.<locals>.go.<locals>.<lambda>  s"    .wAdTUTZ[[ r   c                 "      dz             S )Nr	  r   )gorP  r   s   r   r  z7transform_comparison_expr.<locals>.go.<locals>.<lambda>  s    BBq1udOO r   )r  r  r  r   operandsr   r   shortcircuit_helper)rP  r  r   r   r  r  r  s   ``@r   r  z%transform_comparison_expr.<locals>.go  s    AK  1$$$-Qw~~ajQ>O/P/PRSRX   ~~ajQ/0022[[[[[[[[######F
 
 	
r   )rP  r`  r  rD   r   rD   )r  r  try_specialize_in_exprr  r   r   r   r   translate_is_nonerP   r   r[   rX   r   r  )r   r  first_oprK  
right_expr	left_exprr  rT  rU  r  r  s   ``       @@r   transform_comparison_exprr    s    {1~H###AK(8(8A(=(='1:a=!*UV-YZY_``M
1;1'''AJ*h// [J4G?4Z4Z(!*Q-UYIYZZZZJqM	W..y99:: 	LAJ !2!2:!>!>?? L555"9':"N"NK">>)>LLD#NN:$NGGE",,T5(AFKKK !!!$$I
 
 
 
 
 
 
 
 
 2a
1..///r   rS  strlhsrhsc                4    d }d }t          |t          t          f          r)                     |          } fd|j        D             }nt                               |          t                    ry                     |          }                     |          t          j        t                    sJ  fdt          t          j        j
                            D             }|&|J t          |          }|dk    r|dk    rd}nd}t                      }	|D ]}
t           |||
|          } j                            |          }t                      }|dk    r                     ||	|           n                     |||	                                |           t#          t$                    }t                      }|dk    r)                                                                  f}n(                                                                  f}                     ||d         |                                |                                |	                                ||d         |                                |                                |           |S |dk    r&|dk    rd}nd}|d         }t           ||||          S |dk    r.|dk    r                                 S                                  S t          |t.                    rmt1           |          }|[ j                            t4                               |          |g|t$                    }|dk    r                     |d	|          S |S d S )
Nc                :    g | ]}                     |          S r   r   )r   r   r   s     r   r   z*try_specialize_in_expr.<locals>.<listcomp>  s%    <<<$%%<<<r   c                V    g | ]%}                     t          |                    &S r   )r   rB   )r   rP  r   	tuple_vals     r   r   z*try_specialize_in_expr.<locals>.<listcomp>  s/    ___Xi3344___r   r	  r  z==z!=r   r  not)r   r&   r   r   rV  r   rF   r   ranger  r   r9   r  r   
bool_valueadd_bool_branchr  rA   rH   r   r   rg  r  r!   r  r   r   r{  )r   rS  r  r  r   rT  rV  n_itemscmp_opoutr   cmpbool_valr  
result_regr  r   rU  set_literalrK  r  s   `                   @r   r  r    s    D $E#	8,-- `~~c""<<<<#)<<<	G%%c**F	3	3 `~~c""NN3''	).&11111_____eC	H\D]D]>^>^___e** Q;;Tzz,,C 3 30&$dSS"?55c::'\\
::++Hc:FFFF++Hj#FFF&&z2222!/22J,,CTzz ',,..8 8NN:vay$777LL""3'''NN:vay$777LL""3''' \\Tzz!HE-gvtUDQQQ \\Tzz}}&||~~% #w ,Wc::"_11GNN3//=t_ F X~~''t<<<M4r   r  boolc                    |                      |d          }|                     ||                                 |rdnd|j                  S )NTr   r  r  )r   r  none_objectr   )r   r   r  vs       r   r  r    sK    t--AQ 3 3 5 577TxxPTVZV_```r   rT  rU  c                   t          |j                  r|t          j        v r|j        |j        k    rN|j        j        rt          j        |         }nt          j        |         }| j                            ||||          S t          |t                    rh|j        j        rt          j        |         }nt          j        |         }| j                            || 
                    ||j        |          ||          S nt          |j                  r|t          j        v r}t          |t                    rh|j        j        rt          j        |         }nt          j        |         }| j                            | 
                    ||j        |          |||          S d}|dk    rd\  }}n|dk    rd\  }}|                     ||||          }|r|                     |d|          }|S )zTransform single comparison.

    'op' must be one of these:

       '==', '!=', '<', '<=', '>', '>='
       'in', 'not in'
       'is', 'is not'
    Fr  )r  Tr  )r  Tr  )rN   r   r;   
signed_ops	is_signedunsigned_opsr   comparison_opr   r<   rW  r  r{  )r   rS  rT  rU  r   op_idnegater  s           r   r  r    s    DI&& 
21H+H+H:""y" 6$/3$1"5?00ueTJJJw'' 	y" 6$/3$1"5?00gnnUDIt<<eT  	 	UZ((
,)))tW%% * : 	2 +B/EE -b1E,,NN4T22E5$
 
 	
 F	X~~
FF	x
FtUB55F 7!!&%66Mr   format_exprStrExpr | BytesExprc                   t          |j                  }||\  }}g }t          |t                    r|j        }n*t          |t
                    r|                    |           t          |t                    r1t          | |||j	                  }|t          | |||j	                  S n0t          | |||j	                  }|t          | |||j	                  S d S r)  )rf   r   r   r&   rV  r   r:  r   rb   r   rd   rc   re   )r   r  r  tokensliterals
format_opsexprssubstitutionss           r   r  r  L  s     $K$566F%*c9%% 	IEEZ(( 	LLk9-- 	b8UK,< M (+GX}kN^___ ) 7UK,< M (-gxP[P`aaa4r   r   c                @    | j                             |j                  S r)  )r   r   r   r   r   s     r   transform_int_exprr  l  s    ?##DJ///r   r   c                @    | j                             |j                  S r)  )r   
load_floatr   r  s     r   transform_float_exprr   p  s    ?%%dj111r   r   c                @    | j                             |j                  S r)  )r   load_complexr   r  s     r   transform_complex_exprr  t  s    ?''
333r   r$   c                6    |                      |j                  S r)  )r   r   r  s     r   transform_str_exprr  x  s    DJ'''r   r   c                6    |                      |j                  S r)  )load_bytes_from_str_literalr   r  s     r   transform_bytes_exprr  |  s    ..tz:::r   r   c                |    |                      t          t          j        t          j        |j                            S r)  )r   r=   r|   r   rw  r   r   r   s     r   transform_ellipsisr    s'    ;;{;#3[_afMMNNNr   r   c                8    t          | |j        |j                  S r)  )_visit_list_displayrV  r   r  s     r   transform_list_exprr    s    w
DI>>>r   list[Expression]c           	     J    t          | || j        t          t          |d          S )NT)_visit_displaynew_list_opry   rz   )r   rV  r   s      r   r  r    s'    +^^TSW  r   r&   c                   t          d |j        D                       rt          | |          S |                     |          }t	          |t
                    r|j        nt          gt          |j                  z  }g }t          |j        |          D ]\  }}| 
                    |          }|                     |||j                  }t	          |t                    r2t          |j                  }	|                     |	||j                   |	}|                    |           |                     t%          ||j                            S )Nc              3  @   K   | ]}t          |t                    V  d S r)  )r   r#   )r   r   s     r   r*  z'transform_tuple_expr.<locals>.<genexpr>  s,      
=
=$:dH%%
=
=
=
=
=
=r   )anyrV  _visit_tuple_displayr   r   rF   r   rU   r  rO  r   rW  r   rA   r   rg  r:  r   rC   )
r   r   
tuple_typer   rV  	item_exprr  rh  r   temps
             r   transform_tuple_exprr    s<   

=
=$*
=
=
=== 3#GT222 ""4((J
 j&))	3
 3tz??2 
 E #DJ 6 6  	9nnY''~~c9in==dH%% 	DI&&DNN4y~666DT;;xty11222r   c                |    t          | |j        |j                  }|                     t          |g|j                  S )z)Create a list, then turn it into a tuple.)r  rV  r   r   r   )r   r   val_as_lists      r   r  r    s3    %gtz49EEK}diHHHr   r   c                    g }|j         D ]J\  }}||                     |          nd}|                     |          }|                    ||f           K| j                            ||j                  S )zAFirst accepts all keys and values, then makes a dict out of them.N)rV  r   r:  r   	make_dictr   )r   r   key_value_pairskey_expr
value_exprkeyr   s          r   transform_dict_exprr#    s~    O $
 - -**2*>gnnX&&&Dz**U|,,,,?$$_di@@@r   c           	     ^    t          | |j        | j        t          t          |j        d          S )NF)r  rV  
new_set_opr   r   r   r  s     r   transform_set_exprr&    s+    W/]DIW\  r   constructor_op#Callable[[list[Value], int], Value]	append_opr?   	extend_opis_listc                   g }|D ]q}t          |t                    r0|                    d|                     |j                  f           G|                    d|                     |          f           rd }	g }
|D ]L\  }}|	|s|r|
                    |           !|	 ||
|          }	|                     |r|n||	|g|           M|	 ||
|          }	|	S )NTF)r   r#   r:  r   r   r   )r   rV  r'  r)  r*  r   r+  accepted_itemsr   rK  initial_itemsstarredr   s                r   r  r    s    N A AdH%% 	A!!4	)B)B"CDDDD!!5'..*>*>"?@@@@FM( Y Y>'>g>  '''>#^M488F'@YYy65/SWXXXX~t44Mr   r   c                p     |j          j        v rt            fd          S t                     S )Nc                 $    t                     S r)  r_   r   gens   r   r  z.transform_list_comprehension.<locals>.<lambda>  s    ">w"L"L r   )rX  comprehension_to_fitem#_translate_comprehension_with_scoper_   r   r   r4  s   ` @r   transform_list_comprehensionr8    sQ    
+C
g,,,2SLLLLL
 
 	
 (555r   r    c                p     |j          j        v rt            fd          S t                     S )Nc                 $    t                     S r)  )r`   r3  s   r   r  z-transform_set_comprehension.<locals>.<lambda>  s    "=gs"K"K r   )rX  r5  r6  r`   r7  s   ` @r   transform_set_comprehensionr;    sQ    
+C
g,,,2SKKKKK
 
 	
 'w444r   r   c                     t                     r                                 S  j        v rt            fd          S t	                     S )Nc                 $    t                     S r)  )_dict_comp_bodyr
  s   r   r  z4transform_dictionary_comprehension.<locals>.<lambda>  s    W^`aGbGb r   )r^   r   r5  r6  r>  r
  s   ``r   "transform_dictionary_comprehensionr?    sa    0!<< ||~~G***27A?b?b?b?b?bccc7A&&&r   c                J                                               t          g j                            t	          t          j        j        j        j	                            }d fd}t           ||j                                        j                  S )Nr   r   c                                          j                  }                      j                  }                    t                              j                  | |gj                   d S r)  )r   r"  r   r   rv   r   r   )kr  r   dr   s     r   rj  z(_dict_comp_body.<locals>.gen_inner_stmts  sa    NN15!!NN17##-Q0G0GA/NPQPVWWWWWr   rk  )maybe_spillr   ru   r   r   rO  indices	sequences	condlistsis_asyncr]   r   )r   r   ru  rj  rC  s   ``  @r   r>  r>    s    GNN;AFCCDDAs19ak1;
KKLLKX X X X X X X X
 +GGG<<16"""r   r   'GeneratorExpr | DictionaryComprehensiongen_bodyCallable[[], Value]c                   ddl m} ddlm}m}m} | j        |         } |||j        ddd          }|                     |          5   ||             ||             ||             |            cddd           S # 1 swxY w Y   dS )zGWrap a comprehension body with a lightweight scope for closure capture.r   )FuncInfo)add_vars_to_envfinalize_env_classsetup_env_classT)r   r   	is_nestedcontains_nestedis_comprehension_scopeN)	mypyc.irbuild.contextrM  mypyc.irbuild.env_classrN  rO  rP  r5  r   enter_scope)	r   r   rJ  rM  rN  rO  rP  comprehension_fdefr   s	            r   r6  r6    s    /.....\\\\\\\\\\ 7=h $#  G 
		W	%	%     7###   xzz	                 s   +B  BBc                     d fd} ||j                    ||j                   ||j                  g}                     t          ||j                  S )Nr   Expression | Noner   rD   c                Z    |                                  S                     |           S r)  )r  r   )r   r   s    r   get_argz%transform_slice_expr.<locals>.get_arg6  s,    ;&&(((>>#&&&r   )r   rY  r   rD   )r  r  r  r   r~   r   )r   r   r[  r   s   `   r   transform_slice_exprr\  5  sn    ' ' ' ' ' ' GD$%%wwt~'>'>@T@TUDdDI>>>r   r   c           	                               dj                    j        v r5                     t          t            fd          gj                  S                      t          t                     gj                  S )Nz(Treating generator comprehension as listc                 $    t                     S r)  r2  r
  s   r   r  z*transform_generator_expr.<locals>.<lambda>G  s    (DWa(P(P r   )warningr   r5  r   rw   r6  r_   r
  s   ``r   transform_generator_exprr`  @  s    OO>GGGG***##3Q P P P P P 
 F
 
 	
 *FwPQ*R*R)SUVU[\\\r   r
   c                    |                      |j                  }|                     |j                  }|                     |||j                   |S r)  )r   r   r   r  rg  r   )r   r   r   r  s       r   transform_assignment_exprrb  O  sG    NN17##E**1844FNN65!&)))Lr   r   c                   |dk    r |                      t          j        |          S |dk    r |                      t          j        |          S |dk    r |                      t          j        |          S |dk    r |                      t          j        |          S |dk    r |                      t          j        |          S d S )Nzmath.ezmath.pizmath.infzmath.nanzmath.tau)r  mathr  piinfnantau)r   r   r   s      r   r   r   V  s    8!!$&$///9!!$'4000:!!$(D111:!!$(D111:!!$(D1114r   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   r   r   r   )r   rZ   r   r%   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r  r   r   rD   )r   rZ   r   r   r  r   r   rD   )r   rZ   r   r   r  r   r   rD   )
r   rZ   r  r4   r   r   r  r   r   rD   )r   rZ   r   r   r  r%   r   rD   )r   rZ   r   r   r   rL  )
r   rZ   r  rG   r   r   r  rL  r   rD   )r   rZ   r  rG   r_  r   r   r`  r  rL  r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r*   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   r   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rL  )r   rZ   rJ  rD   r   r"   r   rL  )r   rZ   r   r   r   rD   )r   rZ   rV  r  r   r  )r   rZ   r  r!   r   rL  )r   rZ   r  r   r   rD   )r   rZ   rS  r  r  r   r  r   r   r`  r   rL  )r   rZ   r   r   r  r  r   rD   )r   rZ   rS  r  rT  rD   rU  rD   r   r`  r   rD   )r   rZ   r  r  r  r   r   rL  )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r$   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r   r   rD   )r   rZ   rV  r  r   r`  r   rD   )r   rZ   r   r&   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r!   r   rD   )r   rZ   rV  r  r'  r(  r)  r?   r*  r?   r   r`  r+  r  r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r    r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   rI  rJ  rK  r   rD   )r   rZ   r   r"   r   rD   )r   rZ   r   r   r   rD   )r   rZ   r   r
   r   rD   )r   rZ   r   r  r   r`  r   rL  )__doc__
__future__r   rd  collections.abcr   r   
mypy.nodesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   
mypy.typesr,   r-   r.   r/   r0   r1   r2   mypyc.commonr3   mypyc.ir.class_irr4   mypyc.ir.func_irr5   r6   mypyc.ir.opsr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   mypyc.ir.rtypesrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   mypyc.irbuild.ast_helpersrX   rY   mypyc.irbuild.builderrZ   r[   mypyc.irbuild.constant_foldr\   mypyc.irbuild.for_helpersr]   r^   r_   r`   ra   "mypyc.irbuild.format_str_tokenizerrb   rc   rd   re   rf   mypyc.irbuild.specializerg   rh   ri   rj   rk   mypyc.irbuild.vecrl   rm   rn   ro   rp   rq   rr   mypyc.primitives.bytes_opsrs   mypyc.primitives.dict_opsrt   ru   rv   mypyc.primitives.generic_opsrw   rx   mypyc.primitives.list_opsry   rz   r{   mypyc.primitives.misc_opsr|   r}   r~   r   mypyc.primitives.set_opsr   r   r   mypyc.primitives.str_opsr   mypyc.primitives.tuple_opsr   r   r   r   r   r  r  r  r   r  r0  r  r  r  rY  r  r}  r  r  r  rz  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r#  r&  r  r8  r;  r?  r>  r6  r\  r`  rb  r   r   r   r   <module>r     s
    # " " " " "  . . . . . . . .' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'P                  ' & & & & & % % % % % % @ @ @ @ @ @ @ @                                                                         * S R R R R R R R C C C C C C C C : : : : : :                                                         6 5 5 5 5 5 [ [ [ [ [ [ [ [ [ [ 9 9 9 9 9 9 9 9 S S S S S S S S S S \ \ \ \ \ \ \ \ \ \ \ \ I I I I I I I I I I 1 1 1 1 1 1 D D D D D D D D
X% X% X% X%v4U 4U 4U 4Un   @4 4 4 44/5 /5 /5 /5d   D D D D8
 8
 8
 8
v
 
 
 
4DS DS DS DSN    VZ N  N  N  N  N  NR "F F F F F FR7 7 7 7K K K K!> !> !> !>H
 
 
 
   @   % % % %P   2   4   "10 10 10 10hM M M M`a a a a
1 1 1 1h   @0 0 0 02 2 2 24 4 4 4( ( ( (; ; ; ;O O O O? ? ? ?   3 3 3 36I I I IA A A A      \6 6 6 65 5 5 5' ' ' '
# 
# 
# 
#   8? ? ? ?] ] ] ]        r   