o
    7šf—  ã                   @  s0  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+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 dd	l6m7Z7m8Z8 dd
l9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD ddlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZSmTZT ddlUmVZV ddlWmXZXmYZYmZZZ ddl[m\Z\m]Z]m^Z^m_Z_m`Z` ddlambZbmcZc ddldmeZe ddlfmgZgmhZhmiZi ddljmkZk 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»d1d2„Z‡d¼d5d6„Zˆd½d8d9„Z‰d¾d:d;„ZŠd¿d>d?„Z‹dÀd@dA„ZŒdÁdCdD„ZdÂdFdG„ZŽdÃdIdJ„ZdÄdKdL„ZdÅdNdO„Z‘dÆdQdR„Z’dÇdVdW„Z“dÈdYdZ„Z”dÉd^d_„Z•dÊdbdc„Z–dËdfdg„Z—dÌdjdk„Z˜dÍdrds„Z™dÎdwdx„ZšdÏdzd{„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Ödd„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Ú	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Ú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)Úint_comparison_op_mapping)Ú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ÚbuilderrH   Úexprr   Úreturnr<   c           	      C  sÆ  |j d u r|  ttjd|jƒ¡ |  ¡ S |j j}|tv r,t| \}}|  t|||jƒ¡S |dkr4|  ¡ S |dkr<|  	¡ S |dkrD|  
¡ S t| |ƒ}|d urO|S t|j tƒrr|j jrr|  |j ||j|  |¡| j| |j¡}|d urr|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.Falsez=Local variable "{}" has inferred type None; add an annotationT)Úfor_read)%ÚnodeÚaddr8   ÚRUNTIME_ERRORÚlineÚnoneÚfullnamerc   r6   ÚtrueÚfalseÚtransform_math_literalÚ
isinstancer(   Úis_finalÚemit_load_finalÚnameÚis_native_ref_exprÚtypesr   ÚimportsÚload_moduleÚkindr   Úis_suppressed_importrC   Ú	node_typeÚis_inferredÚerrorÚformatÚcall_cr_   rV   Úload_strÚreadÚget_assignment_targetÚload_global)	rj   rk   rv   ÚtypÚsrcÚmath_literalÚvalueÚmod_dictÚobj© r“   úQ/home/ertert/spirit/venv/lib/python3.10/site-packages/mypyc/irbuild/expression.pyÚtransform_name_exprl   sp   
ýÿ
ú
ÿþýÿüÿ
r•   r   c                 C  sF  |   |¡}|d ur#|\}}}|  |||j|| j| |j¡}|d ur#|S t| |jƒ}|d ur/|S t|jt	ƒrC|jj| j
v rC|  |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 )N©Ú
can_borrowÚ
namedtupleÚfieldsÚ__getitem__)Úborrow)Úget_final_refr|   r}   r   rt   ry   rv   rz   rq   r   r€   r   Úis_native_attr_refÚacceptrk   r„   r-   Úgetr+   Úpartial_fallbackÚtypeÚis_named_tupleÚmetadatarj   Úload_intÚindexÚgen_method_callÚ-check_instance_attribute_access_through_classr—   Úget_attr)rj   rk   Úfinalrv   Ú	final_varÚnativer   r   r—   r’   Úrtyper   r™   r¥   r›   r“   r“   r”   Útransform_member_expr»   s2   

ÿ



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))rz   rk   r   rq   r,   Úitemr)   r¡   r&   ÚmapperÚ
type_to_irrŸ   Úis_ext_classr}   r(   Úis_classvarr{   r†   r‡   rt   Únote)rj   rk   r   rq   Ú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©rj   r“   r”   Ú
<listcomp>  ó    z(transform_super_expr.<locals>.<listcomp>éÿÿÿÿé   )Úload_module_attr_by_fullnamert   ÚcallÚargsÚinfoÚload_native_type_objectrv   r±   r²   Úiterrj   ÚnextÚfn_infoÚis_generatorÚlistÚ	symtablesÚvaluesrŠ   Úfitemr³   Úpy_callÚpy_get_attrr}   )
rj   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   )Úcalleerz   Úanalyzedr   Útranslate_cast_exprr   rž   rk   r   r   rq   r&   Ú
is_newtyperÅ   r   r%   r   r   Útranslate_callrT   Útranslate_method_callr#   Útranslate_super_method_call)rj   rk   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¿   @  rÀ   z"translate_call.<locals>.<listcomp>©Ú	arg_kindsÚ	arg_names)
rz   r   rS   Útranslate_refexpr_callrž   rÅ   rÐ   rt   râ   rã   )rj   rk   rÙ   ÚfunctionrÅ   r“   r¾   r”   rÝ   8  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¿   I  rÀ   z*translate_refexpr_call.<locals>.<listcomp>)rÅ   Úcall_refexpr_with_args)rj   rk   rÙ   Ú
arg_valuesr“   r¾   r”   rä   F  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¿   c  rÀ   z)translate_method_call.<locals>.<listcomp>rá   Nc                   r¹   r“   rº   r»   r¾   r“   r”   r¿   |  rÀ   ) r~   rÝ   rz   rk   r   rq   r&   r±   r²   Ú
has_methodr}   Úcall_classmethodÚis_module_member_exprrž   rÅ   rÐ   rt   râ   rã   r(   Úis_clsr-   r¡   r,   r°   r)   rŸ   r³   Úhas_no_subclassesr„   rT   r¦   )rj   rk   rÙ   rÓ   rå   rÅ   rq   r   r¶   Úreceiver_typÚvalr’   r“   r¾   r”   rÞ   N  sR   

ÿþÿ

ÿ
ùrÞ   rÓ   r/   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_declr}   râ   Úcopyrã   r‚   r0   r³   ÚappendrÇ   rv   Úinsertr   rÅ   rj   rÄ   rt   rž   rk   r¦   r„   )	rj   rÓ   rk   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Ý   rz   r   rq   r(   Úis_selfr&   r±   r²   Úmror}   Úmethod_declsr³   Úbuiltin_baseÚinherits_pythonru   rï   râ   rð   rã   r‚   r1   Úselfr0   rˆ   ra   rt   rÊ   rË   rÌ   rÍ   rÎ   rŠ   rÏ   rò   r   rj   )rj   rk   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ž   rk   Útype_to_rtyper¡   Úcoercert   )rj   rk   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ž   rk   Úoprt   )rj   rk   Ú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_exprrz   Úleftr"   r	   Ú!translate_printf_style_formattingÚrightr  r„   rA   Útry_optimize_int_floor_dividerI   rF   r@   rž   Ú	binary_oprt   )
rj   rk   Ú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>>)rz   r  r   r   Ú
bit_lengthr   r  )rk   Ú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   rB   rF   rž   rz   r¡   r=   r   rr   r:   r   rt   r    Útry_gen_slice_opr¦   )	rj   rk   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)rJ   Úload_literal_value)rj   rk   r   r“   r“   r”   r  :  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_indexrA   rž   r¤   r.   r]   ri   rg   rU   rj   Úmatching_call_crt   )rj   r   r¥   Ú
begin_typeÚend_typeÚbeginÚendÚ
candidatesr“   r“   r”   r  E  s$   

r  r   c           	      C  sÆ   t ƒ t ƒ t ƒ }}}t| |j||ƒ |  |¡}t|ƒ}|  |¡ |  |j¡}|  |||j	¡}|  
t||ƒ¡ |  |¡ |  |¡ |  |j¡}|  |||j	¡}|  
t||ƒ¡ |  |¡ |  |¡ |S r  )r3   rG   Úcondr„   r9   Úactivate_blockrž   Úif_exprr  rt   rr   r2   ÚgotoÚ	else_expr)	rj   rk   Úif_bodyÚ	else_bodyÚ
next_blockÚ	expr_typeÚtargetÚ
true_valueÚfalse_valuer“   r“   r”   Útransform_conditional_exprk  s    





r9  Ú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 )Nrm   rn   Tro   F)
rJ   rñ   rz   r   rv   r$   Úset_literal_valuesr:  Útupler÷   )rj   r:  rÎ   r°   Úconst_valueÚtuple_valuesr“   r“   r”   r=  „  s,   






€
€r=  Ú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)r=  r:  rr   r7   Ú	frozensetrE   )rj   rA  rÎ   r“   r“   r”   Úprecompute_set_literalž  s   
rC  Ú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õ   é   rE  r  z==r
  z!=ÚbuiltinsÚboolrF  Únot)Úisúis notrm   rK  )Únegatedr–   TÚiÚintÚprevr<   rl   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Ú	operatorsrt   r“   )rj   rD  rN  rÉ   rP  r“   r”   Ú<lambda>  s    z7transform_comparison_expr.<locals>.go.<locals>.<lambda>c                     s   ˆ ˆd ˆƒS )Nrõ   r“   r“   )ÚgorN  rÉ   r“   r”   rS    s    )r÷   rR  rQ  rž   Úoperandsrt   rj   Úshortcircuit_helper)rN  rP  ©rj   rD  r5  rT  )rN  rÉ   rP  r”   rT    s   "ÿûz%transform_comparison_expr.<locals>.go)rN  rO  rP  r<   rl   r<   )%rR  r÷   rz   rU  r$   r   r:  ÚgraphÚtreeÚnamesrq   r&   r)   r   r   rñ   Úpopr   rž   rx   rw   r   rC  rj   rˆ   re   rt   r>   r  r   rv   Útranslate_is_nonerA   r„   rI   rF   Úcompare_tagged)rj   rD  Úfirst_opr:  Ún_itemsÚbin_opÚcmp_opÚlhsÚ	mypy_filerÆ   Ú	bool_typeÚexprsr°   rk   Úor_exprÚset_literalÚresultÚ
right_exprÚ	left_exprr  r  r  r“   rW  r”   Útransform_comparison_expr¯  sŠ   
ÿ





ÿ

ÿ







rk  rM  rI  c                 C  s2   | j |dd}|  ||  ¡ |rd|j¡S d|j¡S )NTr–   rL  rK  )rž   r  Únone_objectrt   )rj   rk   rM  Úvr“   r“   r”   r\  "  s   $r\  r  Ústrr  r  rt   rO  c                 C  sf  t |jƒrt |jƒr|tv r|  ||||¡S t|jƒra|tv ra|j|jkr=|jjr/tj| }ntj| }| j	 
||||¡S t|tƒr`|jjrLtj| }ntj| }| j	 
||  ||j|¡||¡S n,t|jƒr|tv rt|tƒr|jjrytj| }ntj| }| j	 
|  ||j|¡|||¡S d}|dkr˜d\}}n|dkr d\}}|  ||||¡}|r±|  |d|¡}|S )NFrL  )rK  TrF  )rE  TrJ  )rA   r¡   rZ   r]  r@   Ú	is_signedr4   Ú
signed_opsÚunsigned_opsrj   Úcomparison_oprz   r5   r  r  r  )rj   r  r  r  rt   Úop_idÚnegater6  r“   r“   r”   rQ  '  sP   ÿþ


ÿû	ÿÿ
ÿ
rQ  Ú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  )rR   r   rz   r$   r:  r   rñ   r	   rN   rt   rP   rO   rQ   )rj   ru  rw  ÚtokensÚliteralsÚ
format_opsre  Úsubstitutionsr“   r“   r”   r  Y  s*   





ÿú
ÿr  r   c                 C  ó   | j  |j¡S r  )rj   r¤   r   ©rj   rk   r“   r“   r”   Útransform_int_expry  ó   r~  r   c                 C  r|  r  )rj   Ú
load_floatr   r}  r“   r“   r”   Útransform_float_expr}  r  r  r   c                 C  r|  r  )rj   Ú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  )rr   r6   r^   r¡   rŽ   rt   ©rj   r¸   r“   r“   r”   Útransform_ellipsis  s   rŠ  r   c                 C  s   t | |j|jƒS r  )Ú_visit_list_displayr:  rt   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\   )rj   r:  rt   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  )rz   r!   )r¼   r°   r“   r“   r”   Ú	<genexpr>Ÿ  s   € z'transform_tuple_expr.<locals>.<genexpr>)Úanyr:  Ú_visit_tuple_displayr„   rz   r=   r   rD   r÷   Úziprž   rñ   r  rt   rr   r;   )rj   rk   Ú
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:  rt   rˆ   rh   )rj   rk   Ú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ñ   rj   Ú	make_dictrt   )rj   rk   Ú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_oprd   rf   rt   r}  r“   r“   r”   Útransform_set_exprÅ  s   ÿr¡  Úconstructor_opú#Callable[[list[Value], int], Value]Ú	append_oprb   Ú	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)rz   r!   rñ   rž   rk   rˆ   )rj   r:  r¢  r¤  r¥  rt   r  Úaccepted_itemsr°   rh  Úinitial_itemsÚstarredr   r“   r“   r”   rŽ  Ë  s"   	



rŽ  r   c                 C  ó   t | |jƒS r  )rL   Ú	generatorr‰  r“   r“   r”   Útransform_list_comprehensionð  r†  r«  r   c                 C  r©  r  )rM   rª  r‰  r“   r“   r”   Útransform_set_comprehensionô  r†  r¬  r   c                   s\   ˆ   ˆ  tg ˆj¡¡‰ttˆjˆjˆjˆj	ƒƒ}d‡ ‡‡fdd„}t
ˆ ||ˆjƒ ˆ  ˆ¡S )Nrl   r¯   c                    s8   ˆ   ˆj¡} ˆ   ˆj¡}ˆ  tˆ  ˆ¡| |gˆj¡ d S r  )rž   rž  r   rˆ   rX   rŠ   rt   )Úkrm  ©rj   Údr¸   r“   r”   Úgen_inner_stmtsü  s    z;transform_dictionary_comprehension.<locals>.gen_inner_stmts)rl   r¯   )Úmaybe_spillrˆ   rW   rt   rÌ   r“  ÚindicesÚ	sequencesÚ	condlistsÚis_asyncrK   rŠ   )rj   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 | Nonerl   r<   c                   s   | d u rˆ   ¡ S ˆ  | ¡S r  )rl  rž   )r½   r¾   r“   r”   Úget_arg	  s   
z%transform_slice_expr.<locals>.get_arg)r½   r¸  rl   r<   )r%  r&  r$  rˆ   r`   rt   )rj   rk   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)Úwarningrt   rˆ   rY   rL   r‰  r“   r“   r”   Útransform_generator_expr  s   r¼  r   c                 C  s,   |   |j¡}|  |j¡}|  |||j¡ |S r  )rž   r   r‹   r6  Úassignrt   )rj   r¸   r   r6  r“   r“   r”   Útransform_assignment_expr  s   r¾  rv   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€  ÚmathrD  ÚpiÚinfÚnanÚtau)rj   rv   r“   r“   r”   ry     s   ry   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   r   r®   rl   r¯   )rj   rH   r¸   r#   rl   r<   )rj   rH   rk   r
   rl   r<   )rj   rH   rk   r
   rÙ   r   rl   r<   )rj   rH   rk   r
   rÙ   r   rl   r<   )rj   rH   rk   r
   rÙ   r   rl   r<   )
rj   rH   rÓ   r/   rk   r
   rÙ   r   rl   r<   )rj   rH   rk   r
   rÙ   r#   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r'   rl   r<   )rj   rH   rk   r   rl   r<   )rk   r   rl   r   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   rl   r"  )rj   rH   r   r<   r¥   r    rl   r"  )rj   rH   rk   r   rl   r<   )rj   rH   r:  r;  rl   r<  )rj   rH   rA  r   rl   r"  )rj   rH   rD  r   rl   r<   )rj   rH   rk   r   rM  rI  rl   r<   )rj   rH   r  rn  r  r<   r  r<   rt   rO  rl   r<   )rj   rH   ru  rv  rw  r   rl   r"  )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r"   rl   r<   )rj   rH   rk   r	   rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   r:  r  rt   rO  rl   r<   )rj   rH   rk   r$   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   rk   r   rl   r<   )rj   rH   r:  r  r¢  r£  r¤  rb   r¥  rb   rt   rO  r  rI  rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   rk   r    rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   r¸   r   rl   r<   )rj   rH   rv   rn  rl   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(   Ú
mypy.typesr)   r*   r+   r,   r-   Úmypyc.commonr.   Úmypyc.ir.class_irr/   Úmypyc.ir.func_irr0   r1   Úmypyc.ir.opsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Úmypyc.ir.rtypesr=   r>   r?   r@   rA   rB   rC   rD   rE   Úmypyc.irbuild.ast_helpersrF   rG   Úmypyc.irbuild.builderrH   rI   Úmypyc.irbuild.constant_foldrJ   Úmypyc.irbuild.for_helpersrK   rL   rM   Ú"mypyc.irbuild.format_str_tokenizerrN   rO   rP   rQ   rR   Úmypyc.irbuild.specializerS   rT   Úmypyc.primitives.bytes_opsrU   Úmypyc.primitives.dict_opsrV   rW   rX   Úmypyc.primitives.generic_opsrY   Úmypyc.primitives.int_opsrZ   Úmypyc.primitives.list_opsr[   r\   r]   Úmypyc.primitives.misc_opsr^   r_   r`   ra   Úmypyc.primitives.registryrb   rc   Úmypyc.primitives.set_opsrd   re   rf   Úmypyc.primitives.str_opsrg   Úmypyc.primitives.tuple_opsrh   ri   r•   r­   r§   rØ   rà   rÝ   rä   rÞ   ré   rß   rÛ   r	  r  r  r!  r  r  r9  r=  rC  rk  r\  rQ  r  r~  r  rƒ  r…  rˆ  rŠ  rŒ  r‹  r˜  r’  rŸ  r¡  rŽ  r«  r¬  r·  rº  r¼  r¾  ry   r“   r“   r“   r”   Ú<module>   sŽ    ˜&4,

O
$
 




:

B
	

$



&



s

2
 












%




