o
    tBh                     @  s  d Z ddlm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.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> dd	l?m@Z@mAZAmBZBmCZCmDZDmEZE dd
lFmGZGmHZH ddlImJZJmKZK ddlLmMZM ddlNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZW ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^m_Z_m`Z` ddlambZb ddlcmdZd ddlemfZfmgZgmhZh ddlimjZjmkZkmlZlmmZm ddlnmoZompZp ddlqmrZrmsZs ddltmuZu ddlvmwZwmxZx dd d!Zydd#d$Zzdd(d)Z{dd,d-Z|dd/d0Z}dd3d4Z~dd6d7Zdd8d9Zdd:d;Zdd=d>Zdd@dAZddCdDZddEdFZddHdIZddKdLZddPdQZddSdTZddWdXZdd[d\ZddcddZddhdiZddkdlZddndoZddqdrZddtduZddwdxZddzd{Zdd}d~ZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdS )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.
    )annotations)Callablecast)$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)FUNC_CLASSMETHODFUNC_STATICMETHOD)Assign
BasicBlockLoadAddressRaiseStandardErrorRegisterTupleGetTupleSetValue)RTupleint_rprimitiveis_int_rprimitiveis_list_rprimitiveis_none_rprimitiveobject_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_update_op)str_slice_op)list_tuple_optuple_slice_opbuilderrA   exprr   returnr8   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|j trg|j jrg| |j ||j| || j| |j}|d urg|S t|j tr{|j j| jv r{| |j jS |jtkrt|j tr|j jst|j trt| |r|j jr| d|j j|j j t|j tr| tg |j}| t||  |j jg|j}|S | !| "||jS | #|S )Nz+mypyc internal error: should be unreachablebuiltins.Nonezbuiltins.Truezbuiltins.Falsez=Local variable "{}" has inferred type None; add an annotation)$nodeaddr4   RUNTIME_ERRORlinenonefullnamer\   r3   truefalse
isinstancer(   is_finalemit_load_finalnameis_native_ref_exprtypesr   importsload_modulekindr   is_suppressed_importr=   	node_typeis_inferrederrorformatcall_crX   rO   load_strreadget_assignment_targetload_global)rb   rc   rk   typsrcvaluemod_dictobj r   o/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/irbuild/expression.pytransform_name_exprd   sj   


r   r   c                 C  s.  |  |}|d ur#|\}}}| |||j|| j| |j}|d ur#|S t|jtr7|jj| j	v r7| 
|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_refrp   rq   rs   ri   rn   rf   r   rk   rt   ru   is_native_attr_refacceptrc   rx   r-   getr+   partial_fallbacktypeis_named_tuplemetadatarb   load_intindexgen_method_call-check_instance_attribute_access_through_classr   get_attr)rb   rc   finalrk   	final_varnativer   r   r   rtyper   r   r   r   r   r   r   transform_member_expr   s,   





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))rn   rc   r   rf   r,   itemr)   r   r&   mapper
type_to_irr   is_ext_classrq   r(   is_classvarro   rz   r{   ri   note)rb   rc   r   rf   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rb   r   r   
<listcomp>       z(transform_super_expr.<locals>.<listcomp>   )load_module_attr_by_fullnameri   callargsinfoload_native_type_objectrk   r   r   iterrb   nextfn_infois_generatorlist	symtablesvaluesr~   fitemr   py_callpy_get_attrrq   )
rb   r   sup_valr   r   iriter_envvself	self_targresr   r   r   transform_super_expr   s    r   r
   c                 C  s   t |jtrt| |jS t |jtr| |jjS |j}t |tr+t |jt	r+|jj}t |t
r<t| ||p;t| ||S t |trGt| ||S t| ||S N)rn   analyzedr   translate_cast_exprr   r   rc   calleer   r%   r   rM   translate_method_callr#   translate_super_method_calltranslate_call)rb   rc   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)
rn   r   rL   translate_refexpr_callr   r   r   ri   r   r   )rb   rc   r   functionr   r   r   r   r     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   /  r   z*translate_refexpr_call.<locals>.<listcomp>)r   call_refexpr_with_args)rb   rc   r   
arg_valuesr   r   r   r   ,  s   r   c              	     s    |rt ||S t|jtrt|jjtr|jj jjv r jj|jj 	|j
rt|jjts5J  jj|jj }||j
}g }|jdd |jdd }}|jtkrs|jrs| |jjj |dt |dd | fdd|jD 7 }|jr j|||||jS  |j} ||j
| ||j|j|jS  |rƈ |}	 fdd|jD } j|	||j|j|jd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.
    Nr   c                   r   r   r   r   r   r   r   r   M  r   z)translate_method_call.<locals>.<listcomp>c                   r   r   r   r   r   r   r   r   `  r   r   c                   r   r   r   r   r   r   r   r   n  r   ) rr   r   rn   rc   r   rf   r&   r   r   
has_methodrq   method_declr   r   rv   r/   r   appendr   rk   insertr   r   rb   r   ri   r   r   rx   is_module_member_exprr   rM   )rb   rc   r   r   declr   r   r   r   r   receiver_typvalr   r   r   r   4  sh   




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d d  |jd d  }	}
|jtkr  }|jtkr̈ t|g|j}n jjrt  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   rn   r   rf   r(   is_selfr&   r   r   mrorq   method_declsr   builtin_baseinherits_pythonrj   r   r   r   rv   r0   selfr/   r|   rZ   ri   r   r   r   r   r   r~   r   r   r   rb   )rb   rc   r   self_argtyp_argr   baser   r   r   r   r   r   r   r   r   r   z  s\   *





r   r   c                 C  s(   |  |j}| |j}| |||jS r   )r   rc   type_to_rtyper   coerceri   )rb   rc   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   rc   opri   )rb   rc   foldedr   r   r   transform_unary_expr  s   
r   r   c                 C  s  |j dv r
| |S |j dkr)t|jtst|jtr)t| |j|j}|d ur)|S t| |}|r2|S t	| 
|jrpt	| 
|jrp|j dkrKt|}|j tv rpt| |j}| j|j|d}| j|jdd}| |||j |jS | | |j| |j|j |jS )N)andor%z//r   T)r   shortcircuit_exprrn   leftr"   r	   !translate_printf_style_formattingrightr   r;   rx   try_optimize_int_floor_dividerB   r?   r   	binary_opri   )rb   rc   retr   borrow_leftr   r   r   r   r   transform_op_expr  s,   

"



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>>)rn   r   r   r   
bit_lengthr   r   )rc   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   rx   r   r<   r?   r   rn   r   r9   r   rg   r6   r   ri   r    try_gen_slice_opr   )	rb   rc   r   	base_typeis_listcan_borrow_baser   r   	index_regr   r   r   transform_index_expr  s   
r  Value | Nonec                 C  s6   t | |}t|tr| |S t|tr| |S dS )zXReturn the constant value of an expression if possible.

    Return None otherwise.
    N)rC   rn   intr   strr}   )rb   rc   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 )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_indexrx   r:   	end_indexr;   r   r   r.   rV   ra   r_   rN   rb   matching_call_cri   )rb   r   r   
begin_typeend_typebeginend
candidatesr   r   r   r    s$   

r  r   c           	      C  s   t  t  t  }}}t| |j|| | |}t|}| | | |j}| |||j	}| 
t|| | | | | | |j}| |||j	}| 
t|| | | | | |S r   )r2   r@   condrx   r5   activate_blockr   if_exprr   ri   rg   r1   goto	else_expr)	rb   rc   if_body	else_body
next_block	expr_typetarget
true_valuefalse_valuer   r   r   transform_conditional_expr@  s    





r&  er   c                   sv  j d }|dv rtj dkrtjd ttfrjd j}t|}d|  k r.dk rn n`j d dkr<d}d}nd}d	}jd } jd
 j}|d usQJ t	t
t|jd jg }	g }
|D ]}t|g||g}|	 j|< |
| qa|
d}|
D ]}t|||}|	 j|< q} |S |dkrj d dkrd}nd	}|g_ |d jd< n|dkrj d dkr  S   S tj dkr!|dv rjd }t|tr|jdkrt jd |dkdS jd }t |r!jd }t |r!|tv r!t |} j||d} j|dd} |||jS  d fddd jd S )Nr   )innot inr      r(  r   z==r   z!=builtinsbool)isis notre   r-  )negatedr   Tir  prevr8   rd   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	operatorsri   r   )rb   r'  r0  r   r1  r   r   <lambda>  s    z7transform_comparison_expr.<locals>.go.<locals>.<lambda>c                     s    d S )Nr   r   r   )gor0  r   r   r   r4    s    )r   r3  r2  r   operandsri   rb   shortcircuit_helper)r0  r1  rb   r'  r"  r5  )r0  r   r1  r   r5    s   "z%transform_comparison_expr.<locals>.go)r0  r  r1  r8   rd   r8   )r3  r   rn   r6  r$   r   itemsgraphtreer)   r   r&   namesrf   r   rs   r   popr   r   rm   rl   r   rk   translate_is_noner;   rx   rB   r?   compare_taggedri   )rb   r'  first_opr9  n_itemsbin_opcmp_oplhs	mypy_file	bool_typeexprsr   rc   or_expr
right_expr	left_exprr  r   r   r   r8  r   transform_comparison_exprY  sl   










rK  r/  r,  c                 C  s2   | j |dd}| ||  |rd|jS d|jS )NTr   r.  r-  )r   r   none_objectri   )rb   rc   r/  vr   r   r   r>    s   $r>  r   r  r   r   ri   r  c                 C  s|   t |jrt |jr|t v r| ||||S d}|dkr#d\}}n|dkr+d\}}| ||||}|r<| |d|}|S )NFr.  )r-  Tr)  )r(  Tnot)r;   r   rS   keysr?  r   r   )rb   r   r   r   ri   negater#  r   r   r   r2    s   
r2  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   )rK   r   rn   r$   r9  r   r   r	   rG   ri   rI   rH   rJ   )rb   rQ  rS  tokensliterals
format_opsrG  substitutionsr   r   r   r     s*   






r   r   c                 C     | j |jS r   )rb   r   r   rb   rc   r   r   r   transform_int_expr     rZ  r   c                 C  rX  r   )rb   
load_floatr   rY  r   r   r   transform_float_expr  r[  r]  r   c                 C  rX  r   )rb   load_complexr   rY  r   r   r   transform_complex_expr  r[  r_  r"   c                 C     |  |jS r   )r}   r   rY  r   r   r   transform_str_expr      ra  r	   c                 C  r`  r   )load_bytes_from_str_literalr   rY  r   r   r   transform_bytes_expr  rb  rd  r   c                 C  s   |  ttjtj|jS r   )rg   r3   rW   r   r   ri   rb   r   r   r   r   transform_ellipsis  s   rf  r   c                 C  s   t | |j|jS r   )_visit_list_displayr9  ri   rY  r   r   r   transform_list_expr  s   rh  r9  list[Expression]c                 C  s   t | || jtt|dS )NT)_visit_displaynew_list_oprT   rU   )rb   r9  ri   r   r   r   rg    s   rg  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   )rn   r!   )r   r   r   r   r   	<genexpr>  s    z'transform_tuple_expr.<locals>.<genexpr>)anyr9  _visit_tuple_displayrx   rn   r9   rs   r>   r   zipr   r   r   ri   rg   r7   )rb   rc   
tuple_typers   r9  	item_expr	item_typeregr   r   r   transform_tuple_expr  s   


rt  c                 C  s"   t | |j|j}| t|g|jS )z)Create a list, then turn it into a tuple.)rg  r9  ri   r|   r`   )rb   rc   val_as_listr   r   r   rn  /  s   rn  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)r9  r   r   rb   	make_dictri   )rb   rc   key_value_pairskey_expr
value_exprkeyr   r   r   r   transform_dict_expr5  s   
r{  r   c                 C  s   t | |j| jtt|jdS )NF)rj  r9  
new_set_opr]   r^   ri   rY  r   r   r   transform_set_expr@  s   r}  constructor_op#Callable[[list[Value], int], Value]	append_opr[   	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)rn   r!   r   r   rc   r|   )rb   r9  r~  r  r  ri   r
  accepted_itemsr   resultinitial_itemsstarredr   r   r   r   rj  F  s"   	



rj  r   c                 C     t | |jS r   )rE   	generatorre  r   r   r   transform_list_comprehensionk  rb  r  r   c                 C  r  r   )rF   r  re  r   r   r   transform_set_comprehensiono  rb  r  r   c                   s\      tg jttjjjj	}d fdd}t
 ||j  S )Nrd   r   c                    s8     j}   j} t | |gj d S r   )r   rz  r   r|   rQ   r~   ri   )krM  rb   dr   r   r   gen_inner_stmtsw  s    z;transform_dictionary_comprehension.<locals>.gen_inner_stmts)rd   r   )maybe_spillr|   rP   ri   r   ro  indices	sequences	condlistsis_asyncrD   r~   )rb   r   loop_paramsr  r   r  r   "transform_dictionary_comprehensions  s
   
r  c                   s:   d fdd}||j ||j||jg} t||jS )Nr   Expression | Nonerd   r8   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  rd   r8   )r  r  r  r|   rY   ri   )rb   rc   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)warningri   r|   rR   rE   re  r   r   r   transform_generator_expr  s   r  r   c                 C  s,   |  |j}| |j}| |||j |S r   )r   r   r   r#  assignri   )rb   r   r   r#  r   r   r   transform_assignment_expr  s   r  N)rb   rA   rc   r   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r   r   r   rd   r   )rb   rA   r   r#   rd   r8   )rb   rA   rc   r
   rd   r8   )rb   rA   rc   r
   r   r   rd   r8   )rb   rA   rc   r
   r   r   rd   r8   )rb   rA   rc   r
   r   r   rd   r8   )rb   rA   rc   r
   r   r#   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r'   rd   r8   )rb   rA   rc   r   rd   r8   )rc   r   rd   r   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r   rd   r  )rb   rA   r   r8   r   r    rd   r  )rb   rA   rc   r   rd   r8   )rb   rA   r'  r   rd   r8   )rb   rA   rc   r   r/  r,  rd   r8   )rb   rA   r   r  r   r8   r   r8   ri   r  rd   r8   )rb   rA   rQ  rR  rS  r   rd   r  )rb   rA   rc   r   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r"   rd   r8   )rb   rA   rc   r	   rd   r8   )rb   rA   r   r   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   r9  ri  ri   r  rd   r8   )rb   rA   rc   r$   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   rc   r   rd   r8   )rb   rA   r9  ri  r~  r  r  r[   r  r[   ri   r  r
  r,  rd   r8   )rb   rA   r   r   rd   r8   )rb   rA   r   r   rd   r8   )rb   rA   r   r   rd   r8   )rb   rA   rc   r    rd   r8   )rb   rA   r   r   rd   r8   )rb   rA   r   r   rd   r8   )__doc__
__future__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.func_irr/   r0   mypyc.ir.opsr1   r2   r3   r4   r5   r6   r7   r8   mypyc.ir.rtypesr9   r:   r;   r<   r=   r>   mypyc.irbuild.ast_helpersr?   r@   mypyc.irbuild.builderrA   rB   mypyc.irbuild.constant_foldrC   mypyc.irbuild.for_helpersrD   rE   rF   "mypyc.irbuild.format_str_tokenizerrG   rH   rI   rJ   rK   mypyc.irbuild.specializerL   rM   mypyc.primitives.bytes_opsrN   mypyc.primitives.dict_opsrO   rP   rQ   mypyc.primitives.generic_opsrR   mypyc.primitives.int_opsrS   mypyc.primitives.list_opsrT   rU   rV   mypyc.primitives.misc_opsrW   rX   rY   rZ   mypyc.primitives.registryr[   r\   mypyc.primitives.set_opsr]   r^   mypyc.primitives.str_opsr_   mypyc.primitives.tuple_opsr`   ra   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r  r&  rK  r>  r2  r   rZ  r]  r_  ra  rd  rf  rh  rg  rt  rn  r{  r}  rj  r  r  r  r  r  r  r   r   r   r   <module>   s    &( 


K
 
 




F
B
	





&

`


 












%



