
    X-Ph|                    D	   U 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 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  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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< dd	l=m>Z>m?Z?m@Z@mAZA dd
lBmCZCmDZDmEZEmFZF ddlGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZOmPZPmQZQ ddlRmSZS ede
egee          f         ZTi ZUdeVd<   	 dqdrdZWdsdZX	 dqdtd!ZY	 dqdud$ZZ eZd%          dsd&            Z[ eZd'           eZd(           eZd)           eZd*           eZd+           eZd,           eZd-           eZd.          dsd/                                                                                                Z\ eZd0          dsd1            Z] eZd2          dsd3            Z^ eZd2          dsd4            Z_ eZd5          dsd6            Z` eZd7          dsd8            Za eZd9           eZd:          dsd;                        Zb eZd5           eZd<           eZd=           eZd9           eZd:           eZd>           eZd?           eZd@e9           eZdAe7           eZdBe(           eZdBe8          dsdC                                                                                                                                    Zc eZdD          dsdE            Zd eZdF          dsdG            ZedvdPZf eZdQ          dsdR            Zg eZdS           eZdT           eZdU           eZdV          dsdW                                                Zh eZdX          dsdY            Zi eZdZ          dsd[            Zj eZd\e(          dsd]            Zk eZd^e9          dsd_            Zl eZd@e9          dsd`            Zm eZdae9          dsdb            Zn eZd+          dsdc            Zo eZd,          dsdd            Zp eZd-          dsde            Zq eZd.          dsdf            ZrdwdjZs eZd(          dsdk            Zt eZdl          dsdm            Zu eZd)          dsdn            Zv eZdo          dsdp            ZwdS )xa0  Special case IR generation of calls to specific builtin functions.

Most special cases should be handled using the data driven "primitive
ops" system, but certain operations require special handling that has
access to the AST/IR directly and can make decisions/optimizations
based on it. These special cases can be implemented here.

For example, we use specializers to statically emit the length of a
fixed length tuple and to emit optimized code for any()/all() calls with
generator comprehensions as the argument.

See comment below for more documentation.
    )annotations)CallableOptional)	ARG_NAMEDARG_POS	BytesExprCallExprDictExpr
ExpressionGeneratorExprIntExprListExpr
MemberExprNameExprRefExprStrExpr	TupleExpr)AnyType	TypeOfAny)
BasicBlockExtendIntegerRaiseStandardErrorRegisterTruncateUnreachableValue)	RInstance
RPrimitiveRTupleRTypebool_rprimitivec_int_rprimitivedict_rprimitiveint16_rprimitiveint32_rprimitiveint64_rprimitiveint_rprimitiveis_bool_rprimitiveis_dict_rprimitiveis_fixed_width_rtypeis_float_rprimitiveis_int16_rprimitiveis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_list_rprimitiveis_uint8_rprimitivelist_rprimitiveset_rprimitivestr_rprimitiveuint8_rprimitive)	IRBuilder)comprehension_helper*sequence_from_generator_preallocate_helpertranslate_list_comprehensiontranslate_set_comprehension)FormatOpconvert_format_expr_to_strjoin_formatted_stringstokenizer_format_call)dict_items_opdict_keys_opdict_setdefault_spec_init_opdict_values_op)new_list_set_item_op)str_encode_ascii_strictstr_encode_latin1_strictstr_encode_utf8_strict)new_tuple_set_item_opr7   z1dict[tuple[str, RType | None], list[Specializer]]specializersNbuilderexprr	   calleer   name
str | NonetypRType | NonereturnValue | Nonec                j    |r0||ft           v r%t           ||f         D ]} || ||          }||c S d S N)rI   )rJ   rK   rL   rM   rO   specializervals          X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/irbuild/specialize.py_apply_specializationrX   t   s]      s|++'c	2 	 	K+gtV44C


 4    c                0    t          | |||j                  S )zIInvoke the Specializer callback for a function if one has been registered)rX   fullnamerJ   rK   rL   s      rW   apply_function_specializationr]      s     !$HHHrY   r   c                H    ||j         n|j        }t          | ||||          S )zGInvoke the Specializer callback for a method if one has been registered)r[   rM   rX   )rJ   rK   rL   rO   rM   s        rW   apply_method_specializationr_      s+     "k6??v{D $cBBBrY   str$Callable[[Specializer], Specializer]c                     d fd}|S )zDecorator to register a function as being a specializer.

    There may exist multiple specializers for one function. When
    translating method calls, the earlier appended specializer has
    higher priority.
    fSpecializerrQ   c                h    t                               fg                               |            | S rT   )rI   
setdefaultappend)rc   rM   rO   s    rW   wrapperz$specialize_function.<locals>.wrapper   s0    sR0077:::rY   )rc   rd   rQ   rd    )rM   rO   rh   s   `` rW   specialize_functionrj      s.           NrY   zbuiltins.globalsc                ^    t          |j                  dk    r|                                 S d S )Nr   )lenargsload_globals_dictr\   s      rW   translate_globalsro      s,    
49~~((***4rY   zbuiltins.abszbuiltins.intzbuiltins.floatzbuiltins.complexzmypy_extensions.i64zmypy_extensions.i32zmypy_extensions.i16zmypy_extensions.u8c                   t          |j                  dk    r|j        t          gk    rt	          |t
                    r|j        d         }|                     |          }|j                            d          d         }|dv rd}nd| d}t	          |t                    rM|j
                            |          r3|                     |          }|                     ||g d|j                  S dS )zSpecialize calls on native classes that implement the associated dunder.

    E.g. i64(x) gets specialized to x.__int__() if x is a native instance.
       r   .)i64i32i16u8__int____N)rl   rm   	arg_kindsr   
isinstancer   	node_typer[   splitr   class_ir
has_methodacceptgen_method_callline)rJ   rK   rL   argarg_typ	shortnamemethodobjs           rW   $translate_builtins_with_unary_dunderr      s     49~~t~'::z&RZ?[?[:il##C((O))#..q1	333FF')'''Fgy)) 	Mg.>.I.I&.Q.Q 	M..%%C**3D$)LLL4rY   zbuiltins.lenc                   t          |j                  dk    r|j        t          gk    r|j        d         }|                     |          }t          |t                    r6|                     |           t          t          |j	                            S t          |                     |                    rd}nd}|                     ||          }|                     ||j                  S d S )Nrq   r   TF
can_borrow)rl   rm   ry   r   r{   rz   r    r   r   typesr1   builtin_lenr   )rJ   rK   rL   r   
expr_rtypeborrowr   s          rW   translate_lenr      s    
49~~t~'::il&&s++
j&)) 	7 NN33z/00111!'"3"3C"8"899 ...88C&&sDI6664rY   zbuiltins.listc                t   t          |j                  dk    r|j        t          gk    sdS |j        d         }t	          |t
                    r!|j        st	          |j        t                    sdS |j        j        }|j        j	        }| 
                    |          }t          |          r|dv sdS |                     |          }|dk    r"|                     t          |g|j                  S |dk    r"|                     t           |g|j                  S |                     t"          |g|j                  S )zSpecialize a common case when list() is called on a dictionary
    view method call.

    For example:
        foo = list(bar.keys())
    rq   Nr   )keysvaluesitemsr   r   )rl   rm   ry   r   rz   r	   rL   r   rK   rM   r{   r*   r   call_crA   r   rC   r@   )rJ   rK   rL   r   baseattrrtyper   s           rW   dict_methods_fast_pathr      s#    	NNaDNwi$?$?t
)A,CsH%% ch :cjR\;];] t:?D:?Dd##Eu%% $2M*M*Mt
..

C v~~~~lSE49===			~~nseTY???~~mcUDI>>>rY   c                    t          |j                  dk    rc|j        d         t          k    rMt	          |j        d         t
                    r-t          | |j        d         | j        j        t                    S dS )zSpecial case for simplest list comprehension.

    For example:
        list(f(x) for x in some_list/some_tuple/some_str)
    'translate_list_comprehension()' would take care of other cases
    if this fails.
    rq   r   empty_op_llbuilderset_item_opN)
rl   rm   ry   r   rz   r   r9   rJ   new_list_op_with_lengthrD   r\   s      rW   "translate_list_from_generator_callr      sx     	DI!N1((ty|]33 ) :IaL&F,	
 
 
 	
 4rY   zbuiltins.tuplec                    t          |j                  dk    rc|j        d         t          k    rMt	          |j        d         t
                    r-t          | |j        d         | j        j        t                    S dS )zSpecial case for simplest tuple creation from a generator.

    For example:
        tuple(f(x) for x in some_list/some_tuple/some_str)
    'translate_safe_generator_call()' would take care of other cases
    if this fails.
    rq   r   r   N)
rl   rm   ry   r   rz   r   r9   rJ   new_tuple_with_lengthrH   r\   s      rW   #translate_tuple_from_generator_callr     sx     	DI!N1((ty|]33 ) :IaL&D-	
 
 
 	
 4rY   builtins.setc                    t          |j                  dk    rQ|j        d         t          k    r;t	          |j        d         t
                    rt          | |j        d                   S dS )zSpecial case for set creation from a generator.

    For example:
        set(f(...) for ... in iterator/nested_generators...)
    rq   r   N)rl   rm   ry   r   rz   r   r;   r\   s      rW   !translate_set_from_generator_callr   .  s^     	DI!N1((ty|]33 ) +7DIaLAAA4rY   builtins.minzbuiltins.maxc                   |j         t          t          gk    r|                     |j        d                   |                     |j        d                   }}t	          |                     |                    }|j        dk    r|                     ||d|j                  }n|                     ||d|j                  }t                      t                      t                      }	}}| 
                    |||           |                     |           |                     ||                     ||j        |j                  |j                   |                     |	           |                     |           |                     ||                     ||j        |j                  |j                   |                     |	           |                     |	           |S d S )Nr   rq   r   <>)ry   r   r   rm   r   r{   r[   	binary_opr   r   add_bool_branchactivate_blockassigncoercetypegoto)
rJ   rK   rL   xyresult
comparison
true_blockfalse_block
next_blocks
             rW   faster_min_maxr   @  s    ~'7+++~~dil++W^^DIaL-I-I1'++D1122?n,, **1adi@@JJ **1adi@@J.8llJLL*,,K

JDDDz***vw~~adiHH$)TTTZ   {+++vw~~adiHH$)TTTZ   z***4rY   zbuiltins.frozensetzbuiltins.dictzbuiltins.sortedzcollections.OrderedDictjoinextendupdatec           	         t          |j                  dk    r)|j        d         t          k    rt	          |j        d         t
                    rt	          |t                    r                                          |j	                  |j
        t           |j        d                   g fd|j        dd         D             z                        |          |j        |j        |j                  S                      ||t           |j        d                   g fd|j        dd         D             z             S dS )zuSpecial cases for things that consume iterators where we know we
    can safely compile a generator into a list.
    r   c                :    g | ]}                     |          S ri   r   .0r   rJ   s     rW   
<listcomp>z1translate_safe_generator_call.<locals>.<listcomp>x  %    DDDsw~~c**DDDrY   rq   Nc                :    g | ]}                     |          S ri   r   r   s     rW   r   z1translate_safe_generator_call.<locals>.<listcomp>  r   rY   )rl   rm   ry   r   rz   r   r   r   r   rK   rM   r:   r{   r   	arg_namescall_refexpr_with_argsr\   s   `  rW   translate_safe_generator_callr   \  sG   $ 	DIN1((ty|]33 ) fj)) 	**v{++1'49Q<HHIDDDDdimDDDE !!$''	   111'49Q<HHIDDDDdimDDDE	   4rY   zbuiltins.anyc                    t          |j                  dk    rZ|j        t          gk    rIt	          |j        d         t
                    r)t          | |j        d         | j        d | j                  S d S )Nrq   r   c                    | S rT   ri   )r   s    rW   <lambda>z$translate_any_call.<locals>.<lambda>  s    a rY   )	rl   rm   ry   r   rz   r   any_all_helperfalsetruer\   s      rW   translate_any_callr     si     	DI!Nwi''ty|]33 ( gty|W]KKQXQ]^^^4rY   zbuiltins.allc                     t          j                  dk    r]j        t          gk    rLt	          j        d         t
                    r,t           j        d          j         fd j                  S d S )Nrq   r   c                <                         | dj                  S )Nnot)unary_opr   )r   rJ   rK   s    rW   r   z$translate_all_call.<locals>.<lambda>  s    g&&q%;; rY   )	rl   rm   ry   r   rz   r   r   r   r   r\   s   `` rW   translate_all_callr     s     	DI!Nwi''ty|]33 ( IaLL;;;;;M
 
 	
 4rY   genr   initial_valueCallable[[], Value]modifyCallable[[Value], Value]	new_valuer   c           	        	
 t          t                    	                     	 |            d           t          t	          j        j        j        j                            }t                      t                      t                      c
d 	
fd}t           ||j                                                   	S )NrQ   Nonec                 8                         j                            }                     |                                                                            d                                                                         d S )Nr   )r   	left_exprr   r   r   r   )	r   rJ   
exit_blockr   r   r   r   retvalr   s	    rW   gen_inner_stmtsz'any_all_helper.<locals>.gen_inner_stmts  s    VGNN3=99::

JDDDz***vyy{{B///Z   {+++++rY   rQ   r   )r   r"   r   listzipindices	sequences	condlistsis_asyncr   r8   r   goto_and_activate)rJ   r   r   r   r   loop_paramsr   r   r   r   r   s   `` ``  @@@@rW   r   r     s     o&&FNN6==??B///s3;s}clSSTTK*4,,
jll'JZ, , , , , , , , , , , , , +IIIj)))MrY   zbuiltins.sumc                    t          |j                  dv r6|j        d         t          k    r t	          |j        d         t
                    sd S t          |j                  dk    r+|j        d         t          t          fvrd S |j        d         }nt          d          }|j        d                              |          }t          |           
                                                              |          |d          d           d	 fd}t          t          j        j        j        j                            }t'           ||j                   S )
N)rq      r   r   rq   r   rQ   r   c            	                              j                  }                                         | dd          d           d S )N+r   )r   r   r   r   )	call_exprrJ   gen_exprr   s    rW   r   z+translate_sum_call.<locals>.gen_inner_stmts  sG    NN8#566	vw00CLLbQQQQQrY   r   )rl   rm   ry   r   rz   r   r   r   r{   r   r   r   r   r   r   r   r   r   r   r8   r   )	rJ   rK   rL   
start_exprtarget_typer   r   r   r   s	   `      @@rW   translate_sum_callr     sn    	DI&  N1((ty|]33 ) t 49~~>!Wi$8884Yq\

QZZ
y|H##D))Kk""FNN67>>'..*D*DkSUVVXZ[[[R R R R R R R R Hh0(2DhFWXX K +NNNMrY   zdataclasses.fieldzattr.ibzattr.attribzattr.Factoryc                H    t          t          j                  | j        |<   dS )a,  Special case for 'dataclasses.field', 'attr.attrib', and 'attr.Factory'
    function calls because the results of such calls are type-checked
    by mypy using the types of the arguments to their respective
    functions, resulting in attempted coercions by mypyc that throw a
    runtime error.
    N)r   r   
from_errorr   r\   s      rW    translate_dataclasses_field_callr     s      ")"677GM$4rY   zbuiltins.nextc                d    |j         t          gt          t          gfv r t          |j        d         t                    sdS |j        d         t                               |                    t          |j                  dk    r                      |j        d                   nd}t                      d fd}t          t          j        j        j        j                            }t!           ||j                   |r7                     |j        j                                                   nT                     t-          t,          j        d|j                                                  t1                                                                 S )a6  Special case for calling next() on a generator expression, an
    idiom that shows up some in mypy.

    For example, next(x for x in l if x.id == 12, None) will
    generate code that searches l for an element where x.id == 12
    and produce the first such object, or None if no such element
    exists.
    r   Nrq   rQ   r   c                                                                j                  j        j                                                   d S rT   )r   r   r   r   r   )rJ   r   r   r   s   rW   r   z,translate_next_call.<locals>.gen_inner_stmts  sF     	vw~~cm<<cm>PQQQZ     rY   r   )ry   r   rz   rm   r   r   r{   rl   r   r   r   r   r   r   r   r   r8   r   r   r   r   addr   STOP_ITERATIONr   r   )	rJ   rK   rL   default_valr   r   r   r   r   s	   `     @@@rW   translate_next_callr     s    	G9w&8999ty|]33 	: t
)A,Cg''--..F25di..12D2D'..1...$KJ! ! ! ! ! ! ! ! ! s3;s}clSSTTK+III
  #v{CM,>???Z    &'9'H$PTPYZZ[[[KMM""":&&&MrY   zbuiltins.isinstancec                   t          |j                  dk    r|j        t          t          gk    rt	          |j        d         t
          t          f          rt          t          j	                  | j
        |j        d         <   |                     |j        d                   }|\t          d |D                       }|                     |j        d         |          }| j                            |||j                  S dS )zSpecial case for builtins.isinstance.

    Prevent coercions on the thing we are checking the instance of -
    there is no need to coerce something to a new type before checking
    what type it is, and the coercion could lead to bugs.
    r   rq   r   Nc              3  D   K   | ]}|j         o|j         o|j         V  d S rT   )is_ext_classinherits_pythonallow_interpreted_subclasses)r   irs     rW   	<genexpr>z'translate_isinstance.<locals>.<genexpr>6  sN         b(:$:b2Cb?b     rY   r   )rl   rm   ry   r   rz   r   r   r   r   r   r   flatten_classesallr   rJ   isinstance_helperr   )rJ   rK   rL   irsr   r   s         rW   translate_isinstancer  %  s     	DI!Nw000ty|gy%9:: 1 '.i.B&C&Cdil#%%dil33?      J ..1*.EEC?44S#tyIII4rY   rf   c                l   t          |j                  dk    r|j        t          t          gk    rt	          |t
                    rl|j        d         }t	          |t                    r2t          |j                  rdS t          dt          |j
                  }nt	          |t                    r2t          |j                  rdS t          dt          |j
                  }nst	          |t                    r\t	          |j        t                    rB|j        j        dk    r2t          |j                  rdS t          dt          |j
                  }ndS |                     |j                  }|                     |j        d                   }|                     t&          |||g|j
                  S dS )a  Special case for 'dict.setdefault' which would only construct
    default empty collection when needed.

    The dict_setdefault_spec_init_op checks whether the dict contains
    the key and would construct the empty collection only once.

    For example, this specializer works for the following cases:
         d.setdefault(key, set()).add(value)
         d.setdefault(key, []).append(value)
         d.setdefault(key, {})[inner_key] = inner_val
    r   rq   Nr      r   )rl   rm   ry   r   rz   r   r   r   r   r#   r   r
   r	   rL   r   r[   r   rK   r   rB   )rJ   rK   rL   r   	data_typecallee_dictkey_vals          rW   translate_dict_setdefaultr  ?  s    	DI!Nw000vz** 1 ilc8$$ 	39~~ t#3TY??IIX&& 	39~~ t#3TY??IIsH%%		3:x00		 
#~5538}} t#3TY??II4nnV[11..1..~~(;*KTY
 
 	
 4rY   formatc                   t          |t                    rt          |j        t                    r|j                            t                    t          |j                  k    r[|j        j        }t          |          }|d S |\  }}t          | ||j        |j                  }|d S t          | |||j                  S d S rT   )rz   r   rK   r   ry   countr   rl   valuer?   r=   rm   r   r>   )rJ   rK   rL   
format_strtokensliterals
format_opssubstitutionss           rW   translate_str_formatr  m  s     	6:&&Sv{G,,S N  ))S-@-@@@[&
&z22>4%*27J	SWS\]] 4%gx	RRR4rY   c                   t          |t                    r3t          |j        t                    r|j        j        dk    r|j        t          gk    rt          |j        d         t                    r|j        d         j	        D ]}t          |t                    rt          |t                    rt          |j        t                    r|j        j        dk    r dS t          |j        j        t                    r|j        j        j        dk    r dS t          |j        d         t                    r|j        d         j        dk    r dS  dS g }g }|j        d         j	        D ]}t          |t                    r@|j        dk    r5|                    t          j                   |                    |           Wt          |t                    r?|                    t          j                   |                    |j        d                    t!          | |||j                  }|dS t%          | d||j                  S dS )zSpecial case for f-string, which is translated into str.join()
    in mypy AST.

    This specializer optimizes simplest f-strings which don't contain
    any format operation.
     r   r  Nz{:{}}rq   )rz   r   rK   r   r  ry   r   rm   r   r   r	   rL   rM   rg   r<   STRr=   r   r>   )rJ   rK   rL   itemr  exprsr  s          rW   translate_fstringr    s,    	6:&&&Ov{G,,&O K##Nwi''ty|X.. ( IaL& 	 	D$(( D(++ !$+z::  dk>NRZ>Z>Z44"4;#3W== AEAQAW[bAbAb44!$)A,88  DIaL<NRT<T<T44 =U tt
"$IaL& 	+ 	+D$(( +TZ2-=-=!!(,///T""""D(++ +!!(,///TYq\***27JtyYY 4%gt]DINNN4rY   encodec                $   t          |t                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS t          |j                  dk    r"t          |j        d         t
                    sdS d}d}t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS t          |j                  dk    rt          |j        d         t
                    r|j        d         t          k    rH|j        d         dk    r|j        d         j        }nO|j        d         dk    r|j        d         j        }n+|j        d         t          k    r|j        d         j        }ndS |dk    rdS |
                                                    dd	                              d
d	          }|dv r:|                     t          |                     |j                  g|j                  S |dv r:|                     t"          |                     |j                  g|j                  S |dv r:|                     t$          |                     |j                  g|j                  S dS )zPSpecialize common cases of str.encode for most used encodings and strict errors.Nr   rq   utf8strictencodingerrors-r  _)rv   utfr  cp65001)646asciiusascii)iso885918859cp819latinlatin1l1)rz   r   rl   ry   rm   r   r   r   r  r   lowerreplacer   rG   r   rK   r   rE   rF   )rJ   rK   rL   r!  r"  s        rW   str_encode_fast_pathr2    s    fj)) t 4>Qz$)A,'H'Ht
4>Qz$)A,'H'HtHF
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))y|)HH4
4>Q:dilG#D#D>!	))~a J..9Q<-"h..1+^A'))Yq\'FF4t~~''R0088bAAH333~~4w~~fk7R7R6SUYU^___	0	0	0~~5v{8S8S7TVZV_```	K	K	K~~69T9T8UW[W`aaa4rY   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          st          |          r6|                     |          }|                     |t          |j                  S d S )Nrq   r   Tsignedr   F)rl   rm   ry   r   r{   r/   r   r.   r-   r   r   r'   r   r2   r0   r)   r   rJ   rK   rL   r   arg_typerV   s         rW   translate_i64r8    s^   
49~~dnQ/7::t
)A,C  %%H8$$ 
@~~c"""	X	&	& @*=h*G*G @nnS!!{{6#'749UUUVVV	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!~~c#3TY???4rY   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          rD|                     |          }|                     t          |t          |j                            S t          |          rE|                     |          }|                     t          |t          d|j                            S t          |          rE|                     |          }|                     t          |t          d|j                            S t          |          st!          |          rK|                     |          }t#          |t                    }|                     |t          |j                  S d S )Nrq   r   r   Tr4  F)rl   rm   ry   r   r{   r.   r   r/   r   r   r&   r   r-   r   r2   r0   r)   truncate_literalr   r6  s         rW   translate_i32r<    s   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""	X	&	& @nnS!!{{8C)9	JJJKKK	X	&	& 	@nnS!!{{6#'749UUUVVV	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4rY   c                0   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          rD|                     |          }| 	                    t          |t          |j                            S t          |          rE|                     |          }| 	                    t          |t          d|j                            S t          |          st!          |          rK|                     |          }t#          |t                    }|                     |t          |j                  S d S )Nrq   r   r:  Fr4  )rl   rm   ry   r   r{   r-   r   r.   r/   r   r   r%   r   r2   r   r0   r)   r;  r   r6  s         rW   translate_i16r>    sl   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""	X	&	& 	@*=h*G*G 	@nnS!!{{8C)9	JJJKKK	X	&	& @nnS!!{{6#'7DIVVVWWW	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4rY   c                   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S t          |          st          |          st          |          rD|                     |          }| 
                    t          |t          |j                            S t          |          st          |          rK|                     |          }t!          |t                    }|                     |t          |j                  S d S )Nrq   r   r:  )rl   rm   ry   r   r{   r2   r   r-   r.   r/   r   r   r6   r   r0   r)   r;  r   r6  s         rW   translate_u8r@  (  s9   
49~~dnQ/7::t
)A,C  %%H8$$ @~~c"""H%%
@x((
@ x((
@
 nnS!!{{8C)9	JJJKKK	8	$	$ @(:8(D(D @nnS!!s$455~~c#3TY???4rY   r  r   r   c                    t          | t                    s| S |                                 }d|j        dz  z  dz
  }||z  }|j        r||dz   dz  k    r||dz   z  }t          ||          S )zIf value is an integer literal value, truncate it to given native int rtype.

    For example, truncate 256 into 0 if rtype is u8.
    rq      r   )rz   r   numeric_valuesize	is_signed)r  r   r   max_unsigneds       rW   r;  r;  >  s    
 eW%% A%*q.)Q.L	LA 1!1a 777	\A1erY   c                p   t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          st          |          st          |          r6|                     |          }| 	                    |t          |j                  S d S Nrq   r   )rl   rm   ry   r   r{   r)   r0   r+   r   r   r(   r   )rJ   rK   rL   r   r7  srcs         rW   translate_intrJ  N  s    
49~~dnQ/7::t
)A,C  %%H8$$>X&&>  ))>
 nnS!!~~c>49===4rY   zbuiltins.boolc                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }| j                            |          S rH  )rl   rm   ry   r   r   rJ   
bool_value)rJ   rK   rL   r   rI  s        rW   translate_boolrM  ^  s]    
49~~dnQ/7::t
)A,C
..

C?%%c***rY   c                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S d S rH  )rl   rm   ry   r   r{   r,   r   )rJ   rK   rL   r   r7  s        rW   translate_floatrO  g  sp    
49~~dnQ/7::t
)A,C  %%H8$$ #~~c"""4rY   zbuiltins.ordc                *   t          |j                  dk    s|j        d         t          k    rd S |j        d         }t	          |t
          t          f          r9t          |j                  dk    r!t          t          |j                            S d S rH  )
rl   rm   ry   r   rz   r   r   r  r   ord)rJ   rK   rL   r   s       rW   translate_ordrR  s  sz    
49~~dnQ/7::t
)A,C#+,, 'SY11D1Ds39~~&&&4rY   rT   )rJ   r7   rK   r	   rL   r   rM   rN   rO   rP   rQ   rR   )rJ   r7   rK   r	   rL   r   rQ   rR   )
rJ   r7   rK   r	   rL   r   rO   rP   rQ   rR   )rM   r`   rO   rP   rQ   ra   )rJ   r7   r   r   r   r   r   r   r   r   rQ   r   )r  r   r   r   rQ   r   )x__doc__
__future__r   typingr   r   
mypy.nodesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   
mypy.typesr   r   mypyc.ir.opsr   r   r   r   r   r   r   r   mypyc.ir.rtypesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   mypyc.irbuild.builderr7   mypyc.irbuild.for_helpersr8   r9   r:   r;   "mypyc.irbuild.format_str_tokenizerr<   r=   r>   r?   mypyc.primitives.dict_opsr@   rA   rB   rC   mypyc.primitives.list_opsrD   mypyc.primitives.str_opsrE   rF   rG   mypyc.primitives.tuple_opsrH   rd   rI   __annotations__rX   r]   r_   rj   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r2  r8  r<  r>  r@  r;  rJ  rM  rO  rR  ri   rY   rW   <module>rb     s     # " " " " " % % % % % % % %                                 * ) ) ) ) ) ) )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                                                     6 , + + + + +                                  ; : : : : :         
 = < < < < < Xw7%HI CE D D D D `d     I I I I QUC C C C C $(    " '((   )( ^$$^$$%&&'((*++*++*++)**   +* ,+ ,+ ,+ )( '& %$ %$, ^$$   %$& _%%? ? ? &%?< _%%   &%0 %&&   '&0 ^$$   %$" ^$$^$$   %$ %$4 %&&)**_%%^$$^$$&''.//V^,,X//X//X~..! ! ! /. 0/ 0/ -, 0/ (' %$ %$ &% +* '&!H ^$$   %$ ^$$   %$    4 ^$$# # # %$#L ())Y]##^$$
 
 
 %$ $#   *)
 _%%( ( ( &%(V *++   ,+2 \?33* * * 43*Z X~..   /.& V^,,. . . -,.b X~..0 0 0 /.0f *++   ,+& *++   ,+. *++   ,+( )**   +**     ^$$   %$ _%%+ + + &%+ %&&   '& ^$$   %$  rY   