o
    ØÝ2gÇ˜  ã                   @  s,  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, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 dd	l7m8Z8m9Z9 dd
l:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO ddlPmQZQmRZR ddlSmTZTmUZU ddlVmWZW ddlXmYZYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z`maZambZb ddlcmdZdmeZe ddlfmgZg ddlhmiZimjZjmkZk ddllmmZm ddlnmoZompZpmqZq ddlrmsZsmtZtmuZumvZv ddlwmxZxmyZy ddlzm{Z{m|Z|m}Z} ddl~mZ ddl€mZm‚Z‚ d¶d!d"„Zƒd·d$d%„Z„d¸d)d*„Z…d¹d-d.„Z†dºd0d1„Z‡d»d4d5„Zˆd¼d7d8„Z‰d½d9d:„ZŠd¾d=d>„Z‹d¿d?d@„ZŒdÀdBdC„ZdÁdEdF„ZŽdÂdHdI„ZdÃdJdK„ZdÄdMdN„Z‘dÅdPdQ„Z’dÆdUdV„Z“dÇdXdY„Z”dÈd]d^„Z•dÉdadb„Z–dÊdedf„Z—dËdidj„Z˜dÌdqdr„Z™dÍdvdw„ZšdÎdydz„Z›dÏd|d}„ZœdÐdd€„ZdÑd‚dƒ„ZždÒd…d†„ZŸdÓdˆd‰„Z dÔd‹dŒ„Z¡dÕdŽd„Z¢dÖd‘d’„Z£dÖd“d”„Z¤d×d–d—„Z¥dØd˜d™„Z¦dÙd d¡„Z§dÚd£d¤„Z¨dÛd¦d§„Z©dÜd©dª„ZªdÝd«d¬„Z«dÞd®d¯„Z¬dßd±d²„Z­dàd´dµ„Z®dS )ázµTransform 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_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)ÚInstanceÚ
ProperTypeÚ	TupleTypeÚTypeTypeÚget_proper_type)ÚMAX_SHORT_INT)ÚClassIR)ÚFUNC_CLASSMETHODÚFUNC_STATICMETHOD)ÚAssignÚ
BasicBlockÚComparisonOpÚIntegerÚLoadAddressÚLoadLiteralÚRaiseStandardErrorÚRegisterÚTupleGetÚTupleSetÚValue)	ÚRTupleÚbool_rprimitiveÚint_rprimitiveÚis_fixed_width_rtypeÚis_int_rprimitiveÚis_list_rprimitiveÚis_none_rprimitiveÚobject_rprimitiveÚset_rprimitive)Ú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)Úconvert_format_expr_to_bytesÚconvert_format_expr_to_strÚjoin_formatted_bytesÚjoin_formatted_stringsÚtokenizer_printf_style)Úapply_function_specializationÚapply_method_specialization)Úbytes_slice_op)Údict_get_item_opÚdict_new_opÚdict_set_item_op)Úiter_op)Úlist_append_opÚlist_extend_opÚlist_slice_op)Úellipsis_opÚget_module_dict_opÚnew_slice_opÚtype_op)ÚCFunctionDescriptionÚbuiltin_names)Ú
set_add_opÚ	set_in_opÚset_update_op)Ústr_slice_op)Úlist_tuple_opÚtuple_slice_opÚbuilderrI   Úexprr   Úreturnr=   c           	      C  sþ  t |jtƒr|jjr|  |jj|jj¡S |jd u r(|  ttj	d|jƒ¡ |  
¡ S |jj}|tv r@t| \}}|  t|||jƒ¡S |dkrH|  
¡ S |dkrP|  ¡ S |dkrX|  ¡ S |dv r`|  ¡ S t| |ƒ}|d urk|S t |jtƒrŽ|jjrŽ|  |j||j|  |¡| j| |j¡}|d urŽ|S t |jtƒr¢|jj| jv r¢|  |jj¡S |jtkrút |jtƒr±|jjsút |jtƒrÏt|  |¡ƒrÏ|jjrÏ|  d  |jj¡|jj¡ t |jtƒrî|  !t"g |j¡}|  !t#||  $|jj¡g|j¡}|S |  %| j&|dd|j¡S |  '|¡S )	Nz+mypyc internal error: should be unreachableú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)(Ú
isinstanceÚnoder'   Úis_new_styleÚload_type_varÚnameÚlineÚaddr9   ÚRUNTIME_ERRORÚnoneÚfullnamerd   r7   ÚtrueÚfalseÚtransform_math_literalr)   Úis_finalÚemit_load_finalÚis_native_ref_exprÚtypesr   ÚimportsÚload_moduleÚkindr   Úis_suppressed_importrD   Ú	node_typeÚis_inferredÚerrorÚformatÚcall_cr`   rX   Úload_strÚreadÚget_assignment_targetÚload_global)	rk   rl   r|   ÚtypÚsrcÚmath_literalÚvalueÚmod_dictÚobj© r—   úP/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/irbuild/expression.pyÚtransform_name_exprm   sx   
ýÿ
ú
ÿþýÿüÿ
r™   r   c                 C  sX  |j dv r	|  ¡ S |  |¡}|d ur,|\}}}|  |||j|| j| |j¡}|d ur,|S t| |j ƒ}|d ur8|S t|j	t
ƒrL|j	j | jv rL|  |j	j ¡S |  |¡}| j|j|d}	|  |¡}
t| j |j¡ƒ}t|tƒr”|jjjr”|jjjd d }|j|v r”| j | |j¡¡}|  |	d|g|
|j¡S t| ||ƒ |ož| j}| jj|	|j|
|j|dS )Nrq   ©Ú
can_borrowÚ
namedtupleÚfieldsÚ__getitem__)Úborrow)r|   r~   Úget_final_refr   rw   rƒ   rx   r   rs   rt   r   r„   r…   Úis_native_attr_refÚacceptrl   rˆ   r.   Úgetr,   Úpartial_fallbackÚtypeÚis_named_tupleÚmetadatark   Úload_intÚindexÚgen_method_callÚ-check_instance_attribute_access_through_classr›   Úget_attr)rk   rl   Úfinalr|   Ú	final_varÚnativer”   r“   r›   r–   Úrtyper‘   r   r©   rŸ   r—   r—   r˜   Útransform_member_exprÂ   s6   


ÿ



r±   r‘   úProperType | NoneÚNonec                 C  sÐ   t |jtƒrX|jj}t |tƒrt |jtƒr|jj}t |tƒrZ| j	j
 |¡}|dur\|jr^| |j¡}|dur`t |jtƒrb|jjsd|jjsf|  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))rs   rl   r   rt   r-   Úitemr*   r¥   r&   ÚmapperÚ
type_to_irr£   Úis_ext_classrw   r)   Úis_classvarr€   rŠ   r‹   rx   Únote)rk   rl   r‘   rt   Úclass_irÚsymr—   r—   r˜   r«   ê   s:   

ÿþýÿüýër«   Úor#   c           
        sÖ   ˆ   d|j¡}|jjr‡ fdd„|jjD ƒ}nC|jd usJ ‚ˆ  |jj¡}ˆ jj|j }t	ˆ j
jƒ}t|ƒ}ˆ jjrOtˆ jd  ¡ ƒd }ˆ  |ˆ jjj¡}n|jsVt|ƒ}||g}ˆ  |||j¡}	ˆ  |	|j|j¡S )Nzbuiltins.superc                   ó   g | ]}ˆ   |¡‘qS r—   ©r¢   ©Ú.0Úarg©rk   r—   r˜   Ú
<listcomp>  ó    z(transform_super_expr.<locals>.<listcomp>éÿÿÿÿé   )Úload_module_attr_by_fullnamerx   ÚcallÚargsÚinfoÚload_native_type_objectr|   rµ   r¶   Úiterrk   ÚnextÚfn_infoÚis_generatorÚlistÚ	symtablesÚvaluesrŽ   Úfitemr·   Úpy_callÚpy_get_attrrw   )
rk   r¼   Úsup_valrÉ   r‘   ÚirÚiter_envÚvselfÚ	self_targÚresr—   rÂ   r˜   Útransform_super_expr
  s    rÜ   r
   c                 C  sò   |j }t|jtƒrt| |jƒS t|jtƒr|  |jj¡S t|tt	fƒr5t|j
tƒr5|j
jr5|  |jd ¡S t|tƒrDt|jtƒrD|jj}t|t	ƒrht|jtƒr\t|jj
tƒr\t| ||ƒS t| ||ƒpgt| ||ƒS t|tƒrst| ||ƒS t| ||ƒS )Nr   )Úcalleers   Úanalyzedr   Útranslate_cast_exprr   r¢   rl   r   r   rt   r&   Ú
is_newtyperÉ   r   r%   r   r   Útranslate_callrV   Útranslate_method_callr#   Útranslate_super_method_call)rk   rl   rÝ   r—   r—   r˜   Útransform_call_expr$  s.   ÿ
þý
ÿ
rä   rÝ   r   c                   sZ   t |tƒrtˆ ||ƒptˆ ||ƒS ˆ  |¡}‡ fdd„|jD ƒ}ˆ j|||j|j|j	dS )Nc                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   K  rÄ   z"translate_call.<locals>.<listcomp>©Ú	arg_kindsÚ	arg_names)
rs   r   rU   Útranslate_refexpr_callr¢   rÉ   rÔ   rx   ræ   rç   )rk   rl   rÝ   ÚfunctionrÉ   r—   rÂ   r˜   rá   C  s   
ÿ
ÿrá   r   c                   s"   ‡ fdd„|j D ƒ}ˆ  |||¡S )zTranslate a non-method call.c                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   T  rÄ   z*translate_refexpr_call.<locals>.<listcomp>)rÉ   Úcall_refexpr_with_args)rk   rl   rÝ   Ú
arg_valuesr—   rÂ   r˜   rè   Q  s   rè   c              	     sª  ˆ   |¡rtˆ ||ƒS t|jtƒrDt|jjtƒrD|jjˆ jjv rDˆ jj|jj  	|j
¡rDt|jjtƒs5J ‚ˆ jj|jj }tˆ |||ƒS ˆ  |¡reˆ  |¡}‡ fdd„|jD ƒ}ˆ j|||j|j|jdS t|jtƒr |jj}t|tƒr |jr t|jƒ}t|tƒr t|jtƒr ˆ jj |jj¡}|r |jr | ¡ r tˆ |||ƒS ˆ  |j¡}	tˆ |||	ƒ}
|
dur³|
S ˆ  |j¡}‡ fd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                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   n  rÄ   z)translate_method_call.<locals>.<listcomp>rå   Nc                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   ‡  rÄ   ) r‚   rá   rs   rl   r   rt   r&   rµ   r¶   Ú
has_methodrw   Úcall_classmethodÚis_module_member_exprr¢   rÉ   rÔ   rx   ræ   rç   r)   Úis_clsr.   r¥   r-   r´   r*   r£   r·   Úhas_no_subclassesrˆ   rV   rª   )rk   rl   rÝ   r×   ré   rÉ   rt   r‘   rº   Úreceiver_typÚvalr–   r—   rÂ   r˜   râ   Y  sR   

ÿþÿ

ÿ
ùrâ   r×   r0   c           	   	     sÄ   |  |j¡}g }|j ¡ |j ¡ }}|jtkr0|jr0| ˆ  	|j
¡¡ | dt¡ | dd ¡ |‡ fdd„|jD ƒ7 }|jrJˆ j |||||j¡S ˆ  |j¡}ˆ  ||j|ˆ  |¡|j|j|j¡S )Nr   c                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   œ  rÄ   z$call_classmethod.<locals>.<listcomp>)Úmethod_declrw   ræ   Úcopyrç   r†   r1   r·   ÚappendrË   r|   Úinsertr   rÉ   rk   rÈ   rx   r¢   rl   rª   rˆ   )	rk   r×   rl   rÝ   ÚdeclrÉ   ræ   rç   r–   r—   rÂ   r˜   rí   “  s(   ùrí   c                   sú  |j d u s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ƒr8t|jtƒr8|jj	s>tˆ ||ƒS |jjd }t|tƒrUt|jt
ƒrU|j |jur[tˆ ||ƒS ˆ jj|j  }|jdd … D ]
}|j|jv rs n"qi|jr|jd u r|js|jdkrt|jƒdkrˆ  ¡ S tˆ ||ƒS | |j¡}‡ fdd„|jD ƒ}|j ¡ |j ¡ }	}
|jtkròˆ  ¡ }|jtkrÈˆ  t|g|j¡}nˆ jj ràt!ˆ j"d  #¡ ƒd }ˆ  $|ˆ jj%j¡}| &d|¡ |	 &dt'¡ |
 &dd ¡ ˆ j( |||	|
|j¡S )	Nr   é   é   Ú__init__c                   r½   r—   r¾   r¿   rÂ   r—   r˜   rÃ   Ø  rÄ   z/translate_super_method_call.<locals>.<listcomp>rÅ   rÆ   ))rÊ   ÚlenrÈ   rÉ   rá   rs   r   rt   r)   Úis_selfr&   rµ   r¶   Úmrorw   Úmethod_declsr·   Úbuiltin_baseÚinherits_pythonr{   ró   ræ   rô   rç   r†   r2   Úselfr1   rŒ   rb   rx   rÎ   rÏ   rÐ   rÑ   rÒ   rŽ   rÓ   rö   r   rk   )rk   rl   rÝ   Úself_argÚtyp_argr×   Úbaser÷   rë   ræ   rç   rÙ   rÚ   r—   rÂ   r˜   rã   ­  s\   *ÿ
þýÿ
þÿÿ
ÿ


rã   r   c                 C  s(   |   |j¡}|  |j¡}|  |||j¡S ©N)r¢   rl   Útype_to_rtyper¥   Úcoercerx   )rk   rl   r’   Útarget_typer—   r—   r˜   rß   ï  s   rß   r(   c                 C  s,   t | |ƒ}|r	|S |  |  |j¡|j|j¡S r  )Útry_constant_foldÚunary_opr¢   rl   Úoprx   )rk   rl   Úfoldedr—   r—   r˜   Útransform_unary_exprø  s   
r  r   c           
      C  s  |j dv r
|  |¡S |j dkr%t|jttfƒr%t| |j|jƒ}|d ur%|S t| |ƒ}|r.|S d}d}|  	|j¡}|  	|j¡}t
|ƒr]t
|ƒr]|j dkrOt|ƒ}|j tv r\t| |jƒ}d}nt|ƒrmt|ƒrmt| |jƒ}d}| j|j|d}| j|j|d}	|  ||	|j |j¡S )N)ÚandÚorú%Fz//Trš   )r  Úshortcircuit_exprrs   Úleftr"   r	   Ú!translate_printf_style_formattingÚrightr	  rˆ   rB   Útry_optimize_int_floor_dividerJ   rG   rA   r¢   Ú	binary_oprx   )
rk   rl   Úretr  Úborrow_leftÚborrow_rightÚltyper°   r  r  r—   r—   r˜   Útransform_op_expr   s4   




€r  c                 C  s`   t | jtƒs| S | jj}| ¡ d }d|  k rdk r.n | S |d|> kr.td| jt|ƒƒS | S )z?Replace // with a power of two with a right shift, if possible.rù   r   é   z>>)rs   r  r   r”   Ú
bit_lengthr   r  )rl   ÚdivisorÚshiftr—   r—   r˜   r  $  s   þr  r   c           	      C  s®   |j }|  |j¡}t|ƒ}|ot| |ƒ}| j|j|d}t|jtƒr2t|t	ƒr2|  
t||j|jƒ¡S t|tƒrAt| ||ƒ}|rA|S | j|j |d}|  |d|g|  |¡|j¡S )Nrš   rž   )r©   rˆ   r  rC   rG   r¢   rs   r¥   r>   r   ry   r;   r”   rx   r    Útry_gen_slice_oprª   )	rk   rl   r©   Ú	base_typeÚis_listÚcan_borrow_baser  r”   Ú	index_regr—   r—   r˜   Útransform_index_expr/  s   
ÿr%  úValue | Nonec                 C  s    t | |ƒ}|dur|  |¡S dS )zXReturn the constant value of an expression if possible.

    Return None otherwise.
    N)rK   Úload_literal_value)rk   rl   r”   r—   r—   r˜   r	  E  s   

r	  r  r©   r    c                 C  s®   |j rdS |jr|  |j¡}nt}|jr|  |j¡}nt}t|ƒrUt|ƒrU|jr/|  |j¡}n|  d¡}|jr>|  |j¡}n|  t¡}t	t
ttg}| j ||||g|j¡S dS )z·Generate 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ˆ   r@   Ú	end_indexrB   r¢   r¨   r/   r^   rj   rh   rW   rk   Úmatching_call_crx   )rk   r  r©   Ú
begin_typeÚend_typeÚbeginÚendÚ
candidatesr—   r—   r˜   r   P  s$   

r   r   c           	      C  sÆ   t ƒ t ƒ t ƒ }}}t| |j||ƒ |  |¡}t|ƒ}|  |¡ |  |j¡}|  |||j	¡}|  
t||ƒ¡ |  |¡ |  |¡ |  |j¡}|  |||j	¡}|  
t||ƒ¡ |  |¡ |  |¡ |S r  )r4   rH   Úcondrˆ   r:   Úactivate_blockr¢   Úif_exprr  rx   ry   r3   ÚgotoÚ	else_expr)	rk   rl   Úif_bodyÚ	else_bodyÚ
next_blockÚ	expr_typeÚtargetÚ
true_valueÚfalse_valuer—   r—   r˜   Útransform_conditional_exprv  s    





r=  ÚitemsúSequence[Expression]úlist[object] | Nonec                 C  s¼   g }|D ]M}t | |ƒ}|d ur| |¡ qt|tƒr;|jdkr%| d ¡ q|jdkr0| d¡ q|jdkr:| d¡ qt|tƒrQt| |jƒ}|d urQ| t|ƒ¡ qt	|ƒt	|ƒkr\d S |S )Nrn   ro   Trp   F)
rK   rõ   rs   r   r|   r$   Úset_literal_valuesr>  Útuplerû   )rk   r>  rÒ   r´   Úconst_valueÚtuple_valuesr—   r—   r˜   rA    s,   






€
€rA  Úsr   c                 C  s,   t | |jƒ}|dur|  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)rA  r>  ry   r8   Ú	frozensetrF   )rk   rE  rÒ   r—   r—   r˜   Úprecompute_set_literal©  s   
rG  Úer   c                   s  ˆj d }|dv rÅtˆj ƒdkrÅtˆjd ttfƒrÅˆjd j}t|ƒ}d|  k r.dk r–n nfˆj d dkr<d}d}nd}d	}ˆjd }ˆ jd
 j}|d usQJ ‚|j	d j
}	t|	tƒs^J ‚t|	g ƒ}
g }|D ]}t|g||gƒ}|
ˆ j|< | |¡ qg| d¡}|D ]}t|||ƒ}|
ˆ j|< qƒˆ  |¡S |dkr²ˆj d dkr¤d}nd	}|gˆ_ |d ˆjd< n|dkrÅˆj d dkrÁˆ  ¡ S ˆ  ¡ S |dv rtˆj ƒdkrtˆjd tƒrtˆ ˆjd ƒ}|d urˆjd }ˆ j tˆ  |¡|gˆjt¡}|dkr	ˆ  |dˆj¡S |S tˆj ƒdkrp|dv r5ˆjd }t|tƒr5|jdkr5tˆ ˆjd |dkdS ˆjd }t ˆ  !|¡ƒrpˆjd }t ˆ  !|¡ƒrp|t"v rpt#ˆ |ƒ}ˆ j||d}ˆ j|dd}ˆ  $|||ˆj¡S ˆ  !ˆ¡‰d‡ ‡‡‡fdd„‰ˆdˆ  ˆjd ¡ƒS )Nr   )Úinúnot inrù   é   rI  r  z==r  z!=ÚbuiltinsÚboolrJ  Únot)Úisúis notrn   rO  )Únegatedrš   TÚiÚintÚprevr=   rm   c              	     s€   ˆ t ˆjƒd krtˆˆjˆ  ˆˆ ˆjˆ d  ¡ˆjƒS ˆ ˆjˆ d  ¡‰ˆj dˆ‡‡‡ ‡‡fdd„‡‡ ‡fdd„ˆj¡S )Nrù   r  c                     s   t ˆ ˆjˆ ˆˆˆjƒS r  )Útransform_basic_comparisonÚ	operatorsrx   r—   )rk   rH  rR  rÍ   rT  r—   r˜   Ú<lambda>%  s    z7transform_comparison_expr.<locals>.go.<locals>.<lambda>c                     s   ˆ ˆd ˆƒS )Nrù   r—   r—   )ÚgorR  rÍ   r—   r˜   rW  &  s    )rû   rV  rU  r¢   Úoperandsrx   rk   Úshortcircuit_helper)rR  rT  ©rk   rH  r9  rX  )rR  rÍ   rT  r˜   rX    s   "ÿûz%transform_comparison_expr.<locals>.go)rR  rS  rT  r=   rm   r=   )%rV  rû   rs   rY  r$   r   r>  ÚgraphÚtreeÚnamesrt   r&   r*   r   rƒ   rõ   Úpopr   r¢   r~   r}   r   rG  rk   Úprimitive_oprf   rx   r?   r
  r   r|   Útranslate_is_nonerB   rˆ   rJ   rG   r  )rk   rH  Úfirst_opr>  Ún_itemsÚbin_opÚcmp_opÚlhsÚ	mypy_filerÊ   Ú	bool_typeÚexprsr´   rl   Úor_exprÚset_literalÚresultÚ
right_exprÚ	left_exprr  r  r  r—   r[  r˜   Útransform_comparison_exprº  sŠ   
ÿ





ÿ

ÿ







ro  rQ  rM  c                 C  s2   | j |dd}|  ||  ¡ |rd|j¡S d|j¡S )NTrš   rP  rO  )r¢   r  Únone_objectrx   )rk   rl   rQ  Úvr—   r—   r˜   ra  -  s   $ra  r  Ústrr  r  rx   rS  c                 C  s>  t |jƒrL|tjv rL|j|jkr(|jjrtj| }ntj| }| j ||||¡S t|t	ƒrK|jjr7tj| }ntj| }| j ||  
||j|¡||¡S n-t |jƒry|tjv ryt|t	ƒry|jjretj| }ntj| }| j |  
||j|¡|||¡S d}|dkr„d\}}n|dkrŒd\}}|  ||||¡}|r|  |d|¡}|S )NFrP  )rO  TrJ  )rI  TrN  )rA   r¥   r5   Ú
signed_opsÚ	is_signedÚunsigned_opsrk   Úcomparison_oprs   r6   r  r  r
  )rk   r  r  r  rx   Úop_idÚnegater:  r—   r—   r˜   rU  2  sD   


ÿû	ÿ
ÿ
ÿ
rU  Úformat_exprúStrExpr | BytesExprÚrhsc                 C  s¦   t |jƒ}|d urQ|\}}g }t|tƒr|j}n
t|tƒr"| |¡ t|tƒr=t| |||j	ƒ}|d ur;t
| |||j	ƒS d S t| |||j	ƒ}|d urQt| |||j	ƒS d S r  )rT   r”   rs   r$   r>  r   rõ   r	   rP   rx   rR   rQ   rS   )rk   ry  r{  ÚtokensÚliteralsÚ
format_opsri  Úsubstitutionsr—   r—   r˜   r  ^  s*   





ÿú
ÿr  r   c                 C  ó   | j  |j¡S r  )rk   r¨   r”   ©rk   rl   r—   r—   r˜   Útransform_int_expr~  ó   r‚  r   c                 C  r€  r  )rk   Ú
load_floatr”   r  r—   r—   r˜   Útransform_float_expr‚  rƒ  r…  r   c                 C  r€  r  )rk   Úload_complexr”   r  r—   r—   r˜   Útransform_complex_expr†  rƒ  r‡  r"   c                 C  ó   |   |j¡S r  )r   r”   r  r—   r—   r˜   Útransform_str_exprŠ  ó   r‰  r	   c                 C  rˆ  r  )Úload_bytes_from_str_literalr”   r  r—   r—   r˜   Útransform_bytes_exprŽ  rŠ  rŒ  r   c                 C  s   |   ttjtj|jƒ¡S r  )ry   r7   r_   r¥   r’   rx   ©rk   r¼   r—   r—   r˜   Útransform_ellipsis’  s   rŽ  r   c                 C  s   t | |j|jƒS r  )Ú_visit_list_displayr>  rx   r  r—   r—   r˜   Útransform_list_expr™  s   r  úlist[Expression]c                 C  s   t | || jtt|dƒS )NT)Ú_visit_displayÚnew_list_opr\   r]   )rk   r>  rx   r—   r—   r˜   r    s   ÿr  r$   c                 C  s”   t dd„ |jD ƒƒrt| |ƒS |  |¡}t|tƒr|jntgt|jƒ }g }t	|j|ƒD ]\}}|  
|¡}| |  |||j¡¡ q,|  t||jƒ¡S )Nc                 s  s    | ]}t |tƒV  qd S r  )rs   r!   )rÀ   r´   r—   r—   r˜   Ú	<genexpr>¤  s   € z'transform_tuple_expr.<locals>.<genexpr>)Úanyr>  Ú_visit_tuple_displayrˆ   rs   r>   rƒ   rE   rû   Úzipr¢   rõ   r  rx   ry   r<   )rk   rl   Ú
tuple_typerƒ   r>  Ú	item_exprÚ	item_typeÚregr—   r—   r˜   Útransform_tuple_expr£  s   

ÿý
rœ  c                 C  s"   t | |j|jƒ}|  t|g|j¡S )z)Create a list, then turn it into a tuple.)r  r>  rx   rŒ   ri   )rk   rl   Úval_as_listr—   r—   r˜   r–  ¹  s   r–  r   c                 C  sR   g }|j D ]\}}|dur|  |¡nd}|  |¡}| ||f¡ q| j ||j¡S )zAFirst accepts all keys and values, then makes a dict out of them.N)r>  r¢   rõ   rk   Ú	make_dictrx   )rk   rl   Úkey_value_pairsÚkey_exprÚ
value_exprÚkeyr”   r—   r—   r˜   Útransform_dict_expr¿  s   
r£  c                 C  s   t | |j| jtt|jdƒS )NF)r’  r>  Ú
new_set_opre   rg   rx   r  r—   r—   r˜   Útransform_set_exprÊ  s   ÿr¥  Úconstructor_opú#Callable[[list[Value], int], Value]Ú	append_oprc   Ú	extend_opr"  c                 C  s¸   g }|D ]}t |tƒr| d|  |j¡f¡ q| d|  |¡f¡ qd }	g }
|D ](\}}|	d u r:|s:|r:|
 |¡ q(|	d u rC||
|ƒ}	|  |rI|n||	|g|¡ q(|	d u rZ||
|ƒ}	|	S )NTF)rs   r!   rõ   r¢   rl   rŒ   )rk   r>  r¦  r¨  r©  rx   r"  Úaccepted_itemsr´   rl  Úinitial_itemsÚstarredr”   r—   r—   r˜   r’  Ð  s"   	



r’  r   c                 C  ó   t | |jƒS r  )rN   Ú	generatorr  r—   r—   r˜   Útransform_list_comprehensionõ  rŠ  r¯  r   c                 C  r­  r  )rO   r®  r  r—   r—   r˜   Útransform_set_comprehensionù  rŠ  r°  r   c                   sn   t ˆ ˆƒr	ˆ  ¡ S ˆ  ˆ  tg ˆj¡¡‰ttˆjˆj	ˆj
ˆjƒƒ}d‡ ‡‡fdd„}tˆ ||ˆjƒ ˆ  ˆ¡S )Nrm   r³   c                    s8   ˆ   ˆj¡} ˆ   ˆj¡}ˆ  tˆ  ˆ¡| |gˆj¡ d S r  )r¢   r¢  r”   rŒ   rZ   rŽ   rx   )Úkrq  ©rk   Údr¼   r—   r˜   Úgen_inner_stmts  s    z;transform_dictionary_comprehension.<locals>.gen_inner_stmts)rm   r³   )rM   r{   Úmaybe_spillrŒ   rY   rx   rÐ   r—  ÚindicesÚ	sequencesÚ	condlistsÚis_asyncrL   rŽ   )rk   r¼   Úloop_paramsr´  r—   r²  r˜   Ú"transform_dictionary_comprehensioný  s   

r»  c                   s:   d‡ fdd„}||j ƒ||jƒ||jƒg}ˆ  t||j¡S )NrÁ   úExpression | Nonerm   r=   c                   s   | d u rˆ   ¡ S ˆ  | ¡S r  )rp  r¢   )rÁ   rÂ   r—   r˜   Úget_arg  s   
z%transform_slice_expr.<locals>.get_arg)rÁ   r¼  rm   r=   )r)  r*  r(  rŒ   ra   rx   )rk   rl   r½  rÉ   r—   rÂ   r˜   Útransform_slice_expr  s   r¾  r   c                 C  s&   |   d|j¡ |  tt| |ƒg|j¡S )Nz(Treating generator comprehension as list)Úwarningrx   rŒ   r[   rN   r  r—   r—   r˜   Útransform_generator_expr  s   rÀ  r   c                 C  s,   |   |j¡}|  |j¡}|  |||j¡ |S r  )r¢   r”   r   r:  Úassignrx   )rk   r¼   r”   r:  r—   r—   r˜   Útransform_assignment_expr   s   rÂ  r|   c                 C  sh   |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r2|   tj¡S d S )Nzmath.ezmath.pizmath.infzmath.nanzmath.tau)r„  ÚmathrH  ÚpiÚinfÚnanÚtau)rk   r|   r—   r—   r˜   r   '  s   r   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   r‘   r²   rm   r³   )rk   rI   r¼   r#   rm   r=   )rk   rI   rl   r
   rm   r=   )rk   rI   rl   r
   rÝ   r   rm   r=   )rk   rI   rl   r
   rÝ   r   rm   r=   )rk   rI   rl   r
   rÝ   r   rm   r=   )
rk   rI   r×   r0   rl   r
   rÝ   r   rm   r=   )rk   rI   rl   r
   rÝ   r#   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r(   rm   r=   )rk   rI   rl   r   rm   r=   )rl   r   rm   r   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   rm   r&  )rk   rI   r  r=   r©   r    rm   r&  )rk   rI   rl   r   rm   r=   )rk   rI   r>  r?  rm   r@  )rk   rI   rE  r   rm   r&  )rk   rI   rH  r   rm   r=   )rk   rI   rl   r   rQ  rM  rm   r=   )rk   rI   r  rr  r  r=   r  r=   rx   rS  rm   r=   )rk   rI   ry  rz  r{  r   rm   r&  )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r"   rm   r=   )rk   rI   rl   r	   rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   r>  r‘  rx   rS  rm   r=   )rk   rI   rl   r$   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   rl   r   rm   r=   )rk   rI   r>  r‘  r¦  r§  r¨  rc   r©  rc   rx   rS  r"  rM  rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   rl   r    rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   r¼   r   rm   r=   )rk   rI   r|   rr  rm   r&  )¯Ú__doc__Ú
__future__r   rÃ  Útypingr   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)   Ú
mypy.typesr*   r+   r,   r-   r.   Úmypyc.commonr/   Úmypyc.ir.class_irr0   Úmypyc.ir.func_irr1   r2   Úmypyc.ir.opsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Úmypyc.ir.rtypesr>   r?   r@   rA   rB   rC   rD   rE   rF   Úmypyc.irbuild.ast_helpersrG   rH   Úmypyc.irbuild.builderrI   rJ   Úmypyc.irbuild.constant_foldrK   Úmypyc.irbuild.for_helpersrL   rM   rN   rO   Ú"mypyc.irbuild.format_str_tokenizerrP   rQ   rR   rS   rT   Úmypyc.irbuild.specializerU   rV   Úmypyc.primitives.bytes_opsrW   Úmypyc.primitives.dict_opsrX   rY   rZ   Úmypyc.primitives.generic_opsr[   Úmypyc.primitives.list_opsr\   r]   r^   Úmypyc.primitives.misc_opsr_   r`   ra   rb   Úmypyc.primitives.registryrc   rd   Úmypyc.primitives.set_opsre   rf   rg   Úmypyc.primitives.str_opsrh   Úmypyc.primitives.tuple_opsri   rj   r™   r±   r«   rÜ   rä   rá   rè   râ   rí   rã   rß   r  r  r  r%  r	  r   r=  rA  rG  ro  ra  rU  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˜   Ú<module>   sŒ    œ'4,

U
(
 




:

B
	

$



&



s

,
 












%




