
    hi                    
   U d Z ddlmZ ddl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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? dd	l@mAZAmBZBmCZCmDZD dd
lEmFZFmGZGmHZHmIZI ddlJmKZKmLZL ddlMmNZNmOZOmPZPmQZQmRZR ddlSmTZT ddlUmVZV ddlWmXZXmYZY ddlZm[Z[ ddl\m]Z]m^Z^ ddl_m`Z`maZambZbmcZcmdZdmeZemfZf ddlgmhZhmiZi edeegee"         f         Zji Zkdeld<   	 d{d|d#Zmd}d$Zn	 d{d~d&Zo	 d{dd)Zp epd*          d}d+            Zq epd,           epd-           epd.           epd/           epd0           epd1           epd2           epd3          d}d4                                                                                                Zr epd5          d}d6            Zs epd7          d}d8            Zt epd7          d}d9            Zu epd:          d}d;            Zv epd<          d}d=            Zw epd>           epd?          d}d@                        Zx epd:           epdA           epdB           epd>           epd?           epdC           epdD           epdEe<           epdFe:           epdGe+           epdGe;          d}dH                                                                                                                                    Zy epdI          d}dJ            Zz epdK          d}dL            Z{ddUZ| epdV          d}dW            Z} epdX           epdY           epdZ           epd[          d}d\                                                Z~ epd]          d}d^            Ze[eKeLeReTe]eVeXe^ecehd_Zd`elda<    epdb          d}dc            Z epdde+          d}de            Z epdfe<          d}dg            Z epdEe<          d}dh            Z epdie<          d}dj            Z epdke)          d}dl            Z epd0          d}dm            Z epd1          d}dn            Z epd2          d}do            Z epd3          d}dp            ZddtZ epd-          d}du            Z epdv          d}dw            Z epd.          d}dx            Z epdy          d}dz            ZdS )a0  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FinalOptional)	ARG_NAMEDARG_POS	BytesExprCallExprDictExpr
ExpressionGeneratorExprIntExprListExpr
MemberExprNameExprRefExprStrExpr	TupleExprVar)AnyType	TypeOfAny)
BasicBlockExtendIntegerRaiseStandardErrorRegisterTruncateUnreachableValue)	RInstance
RPrimitiveRTupleRTypebool_rprimitivebytes_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)isinstance_bytearrayisinstance_bytes)dict_items_opdict_keys_opdict_setdefault_spec_init_opdict_values_opisinstance_dict)isinstance_float)isinstance_int)isinstance_listnew_list_set_item_op)isinstance_bool)isinstance_frozensetisinstance_set)bytes_decode_ascii_strictbytes_decode_latin1_strictbytes_decode_utf8_strictisinstance_strstr_encode_ascii_strictstr_encode_latin1_strictstr_encode_utf8_strict)isinstance_tuplenew_tuple_set_item_opr:   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)rZ   )r[   r\   r]   r^   r`   specializervals          h/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/irbuild/specialize.py_apply_specializationri      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)ri   fullnamer[   r\   r]   s      rh   apply_function_specializationrn      s     !$HHHrj   r   c                H    ||j         n|j        }t          | ||||          S )zGInvoke the Specializer callback for a method if one has been registered)rl   r^   ri   )r[   r\   r]   r`   r^   s        rh   apply_method_specializationrp      s+     "k6??v{D $cBBBrj   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Specializerrb   c                h    t                               fg                               |            | S re   )rZ   
setdefaultappend)rt   r^   r`   s    rh   wrapperz$specialize_function.<locals>.wrapper   s0    sR0077:::rj   )rt   ru   rb   ru    )r^   r`   ry   s   `` rh   specialize_functionr{      s.           Nrj   zbuiltins.globalsc                ^    t          |j                  dk    r|                                 S d S )Nr   )lenargsload_globals_dictrm   s      rh   translate_globalsr      s,    
49~~((***4rj   zbuiltins.absbuiltins.int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)r}   r~   	arg_kindsr   
isinstancer   	node_typerl   splitr    class_ir
has_methodacceptgen_method_callline)r[   r\   r]   argarg_typ	shortnamemethodobjs           rh   $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4rj   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 )Nr   r   TF
can_borrow)r}   r~   r   r   r   r   r"   r   r   typesr4   builtin_lenr   )r[   r\   r]   r   
expr_rtypeborrowr   s          rh   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4rj   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())
    r   Nr   )keysvaluesitemsr   r   )r}   r~   r   r   r   r
   r]   r   r\   r^   r   r-   r   call_crF   r   rH   rE   )r[   r\   r]   r   baseattrrtyper   s           rh   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>>>rj   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.
    r   r   empty_op_llbuilderset_item_opN)
r}   r~   r   r   r   r   r<   r[   new_list_op_with_lengthrM   rm   s      rh   "translate_list_from_generator_callr     sx     	DI!N1((ty|]33 ) :IaL&F,	
 
 
 	
 4rj   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/some_bytes)
    'translate_safe_generator_call()' would take care of other cases
    if this fails.
    r   r   r   N)
r}   r~   r   r   r   r   r<   r[   new_tuple_with_lengthrY   rm   s      rh   #translate_tuple_from_generator_callr   !  sx     	DI!N1((ty|]33 ) :IaL&D-	
 
 
 	
 4rj   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...)
    r   r   N)r}   r~   r   r   r   r   r>   rm   s      rh   !translate_set_from_generator_callr   :  s^     	DI!N1((ty|]33 ) +7DIaLAAA4rj   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   r   r   <>)r   r   r   r~   r   r   rl   	binary_opr   r   add_bool_branchactivate_blockassigncoercetypegoto)
r[   r\   r]   xyresult
comparison
true_blockfalse_block
next_blocks
             rh   faster_min_maxr   L  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***4rj   builtins.frozenset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 rz   r   .0r   r[   s     rh   
<listcomp>z1translate_safe_generator_call.<locals>.<listcomp>  %    DDDsw~~c**DDDrj   r   Nc                :    g | ]}                     |          S rz   r   r   s     rh   r   z1translate_safe_generator_call.<locals>.<listcomp>  r   rj   )r}   r~   r   r   r   r   r   r   r   r\   r^   r=   r   r   	arg_namescall_refexpr_with_argsrm   s   `  rh   translate_safe_generator_callr   h  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	   4rj   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 )Nr   r   c                    | S re   rz   )r   s    rh   <lambda>z$translate_any_call.<locals>.<lambda>  s    a rj   )	r}   r~   r   r   r   r   any_all_helperfalsetruerm   s      rh   translate_any_callr     si     	DI!Nwi''ty|]33 ( gty|W]KKQXQ]^^^4rj   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 )Nr   r   c                <                         | dj                  S )Nnot)unary_opr   )r   r[   r\   s    rh   r   z$translate_all_call.<locals>.<lambda>  s    g&&q%;; rj   )	r}   r~   r   r   r   r   r   r   r   rm   s   `` rh   translate_all_callr     s     	DI!Nwi''ty|]33 ( IaLL;;;;;M
 
 	
 4rj   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 )Nrb   Nonec                 8                         j                            }                     |                                                                            d                                                                         d S )Nr   )r   	left_exprr   r   r   r   )	r   r[   
exit_blockr   r   r   r   retvalr   s	    rh   gen_inner_stmtsz'any_all_helper.<locals>.gen_inner_stmts  s    VGNN3=99::

JDDDz***vyy{{B///Z   {+++++rj   rb   r   )r   r$   r   listzipindices	sequences	condlistsis_asyncr   r;   r   goto_and_activate)r[   r   r   r   r   loop_paramsr   r   r   r   r   s   `` ``  @@@@rh   r   r     s     o&&FNN6==??B///s3;s}clSSTTK*4,,
jll'JZ, , , , , , , , , , , , , +IIIj)))Mrj   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)r      r   r  r   r   rb   r   c            	                              j                  }                                         | dd          d           d S )N+r   )r   r   r   r   )	call_exprr[   gen_exprr   s    rh   r   z+translate_sum_call.<locals>.gen_inner_stmts  sG    NN8#566	vw00CLLbQQQQQrj   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]   
start_exprtarget_typer   r   r  r   s	   `      @@rh   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Mrj   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   rm   s      rh    translate_dataclasses_field_callr    s      ")"677GM$4rj   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   Nr   rb   r   c                                                                j                  j        j                                                   d S re   )r   r   r   r   r   )r[   r   r   r   s   rh   r   z,translate_next_call.<locals>.gen_inner_stmts  sF     	vw~~cm<<cm>PQQQZ     rj   r   )r   r   r   r~   r   r   r   r}   r   r   r   r   r   r   r   r   r;   r   r   r   r   addr   STOP_ITERATIONr   r   )	r[   r\   r]   default_valr   r   r   r   r   s	   `     @@@rh   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""":&&&Mrj   )builtins.boolzbuiltins.bytearrayzbuiltins.bytesr   r   r   r   r   r   zbuiltins.strr   r   isinstance_primitiveszbuiltins.isinstancec                .   t          |j                  dk    r|j        t          t          gk    sdS t	          |j        d         t
          t          f          rt          t          j	                  | j
        |j        d         <   |                     |j        d                   }|\t          d |D                       }|                     |j        d         |          }| j                            |||j                  S t	          |j        d         t
                    rr|j        d         j        }|r^t$                              |j                  }|r=|                     |j        d                   }|                     ||g|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  Nr   r   c              3  D   K   | ]}|j         o|j         o|j         V  d S re   )is_ext_classinherits_pythonallow_interpreted_subclasses)r   irs     rh   	<genexpr>z'translate_isinstance.<locals>.<genexpr>P  sN         b(:$:b2Cb?b     rj   r   )r}   r~   r   r   r   r   r   r   r   r
  r   flatten_classesallr   r[   isinstance_helperr   noder  getrl   primitive_op)r[   r\   r]   irsr   r   r  descs           rh   translate_isinstancer#  @  sp    	NNaDNw6H$H$Ht$)A,) 455 
J&-i.B&C&Cdil#%%dil33?      J ..1*.EEC?44S#tyIII$)A,(( Dy|  	D(,,T];;D DnnTYq\22++D3%CCC4rj   rw   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  r   Nr      r   )r}   r~   r   r   r   r   r   r   r   r&   r   r   r
   r]   r   rl   r   r\   r   rG   )r[   r\   r]   r   	data_typecallee_dictkey_vals          rh   translate_dict_setdefaultr)  b  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
 
 	
 4rj   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 re   )r   r   r\   r   r   countr   r}   valuerB   r@   r~   r   rA   )r[   r\   r]   
format_strtokensliterals
format_opssubstitutionss           rh   translate_str_formatr3    s     	6:&&Sv{G,,S N  ))S-@-@@@[&
&z22>4%*27J	SWS\]] 4%gx	RRR4rj   c                   t          |t                    r't          |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                    dd}t!          t#          |          dz
            D ]}t#          |          |dz   k    r |||                   x} |||dz                      x}	g |d|         t          ||	z             ||dz   d         }g |d|         t          j        ||dz   d         }t#          |          |dz   k    r) |||                   x} |||dz                      x}	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{:{}}r   r\   r   rb   r_   c                    t          | t                    r| j        S t          | t                    rCt          | j        t
                    r)| j        j        r| j        j        }|t          |          S d S re   )	r   r   r-  r   r  r   is_finalfinal_valuerq   )r\   r8  s     rh   get_literal_strz*translate_fstring.<locals>.get_literal_str  sp    $(( ,z!D'** ,z$)S/I/I ,diN` ,"i3*{+++4rj   r  )r\   r   rb   r_   )r   r   r\   r   r-  r   r   r~   r   r   r
   r]   r^   rx   r?   STRranger}   r@   r   rA   )r[   r\   r]   itemr1  exprsr9  ifirstsecondr2  s              rh   translate_fstringrA    s_    	6:&&8Ov{G,,8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\***	 	 	 	 s5zzA~&& 	S 	SAE

a!e##-oeAh777UD.uQU|<<<VIN%)NWUV^%<%<NuQUWW~NRz"1"~Rx|RjQ>QR
 E

a!e##-oeAh777UD.uQU|<<<VI
 37JtyYY 4%gt]DINNN4rj   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   r   utf8strictencodingerrors-r5  _)r   utfrD  cp65001)646asciiusascii)iso885918859cp819latinlatin1l1)r   r   r}   r   r~   r   r   r   r-  r   lowerreplacer   rW   r   r\   r   rU   rV   r[   r\   r]   rF  rG  s        rh   str_encode_fast_pathrX    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4rj   decodec                   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
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 obj.decode for most used encodings and strict errors.Nr   r   rD  rE  rF  rG  rI  rH  )r   rJ  rD  zutf-8rK  )rL  rM  rN  zus-ascii)z	iso8859-1z
iso-8859-1rP  rQ  rR  rS  zlatin-1rT  )r   r   r}   r   r~   r   r   r   r-  r   rU  rV  r   rS   r   r\   r   rQ   rR   rW  s        rh   bytes_decode_fast_pathr[    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~~''S11H<<<~~69T9T8UW[W`aaa	<	<	<~~7'..:U:U9VX\Xabbb	 	 	
 	
 ~~87>>&+;V;V:WY]Ybccc4rj   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 )Nr   r   Tsignedr   F)r}   r~   r   r   r   r2   r   r1   r0   r  r   r*   r   r5   r3   r,   r   r[   r\   r]   r   arg_typerg   s         rh   translate_i64ra  Y  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???4rj   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 )Nr   r   r   Tr]  F)r}   r~   r   r   r   r1   r   r2   r  r   r)   r   r0   r   r5   r3   r,   truncate_literalr   r_  s         rh   translate_i32re  m  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???4rj   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 )Nr   r   rc  Fr]  )r}   r~   r   r   r   r0   r   r1   r2   r  r   r(   r   r5   r   r3   r,   rd  r   r_  s         rh   translate_i16rg    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???4rj   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 )Nr   r   rc  )r}   r~   r   r   r   r5   r   r0   r1   r2   r  r   r9   r   r3   r,   rd  r   r_  s         rh   translate_u8ri    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???4rj   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.
    r      r  )r   r   numeric_valuesize	is_signed)r-  r   r   max_unsigneds       rh   rd  rd    s    
 eW%% A%*q.)Q.L	LA 1!1a 777	\A1erj   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 Nr   r   )r}   r~   r   r   r   r,   r3   r.   r   r   r+   r   )r[   r\   r]   r   r`  srcs         rh   translate_intrs    s    
49~~dnQ/7::t
)A,C  %%H8$$>X&&>  ))>
 nnS!!~~c>49===4rj   r  c                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }| j                            |          S rq  )r}   r~   r   r   r   r[   
bool_value)r[   r\   r]   r   rr  s        rh   translate_boolrv    s]    
49~~dnQ/7::t
)A,C
..

C?%%c***rj   c                    t          |j                  dk    s|j        d         t          k    rd S |j        d         }|                     |          }t          |          r|                     |          S d S rq  )r}   r~   r   r   r   r/   r   )r[   r\   r]   r   r`  s        rh   translate_floatrx    sp    
49~~dnQ/7::t
)A,C  %%H8$$ #~~c"""4rj   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 rq  )
r}   r~   r   r   r   r   r	   r-  r   ord)r[   r\   r]   r   s       rh   translate_ordr{    sz    
49~~dnQ/7::t
)A,C#+,, 'SY11D1Ds39~~&&&4rj   re   )r[   r:   r\   r
   r]   r   r^   r_   r`   ra   rb   rc   )r[   r:   r\   r
   r]   r   rb   rc   )
r[   r:   r\   r
   r]   r   r`   ra   rb   rc   )r^   rq   r`   ra   rb   rr   )r[   r:   r   r   r   r   r   r   r   r   rb   r   )r-  r   r   r!   rb   r   )__doc__
__future__r   typingr   r   r   
mypy.nodesr   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   mypyc.irbuild.builderr:   mypyc.irbuild.for_helpersr;   r<   r=   r>   "mypyc.irbuild.format_str_tokenizerr?   r@   rA   rB   mypyc.primitives.bytes_opsrC   rD   mypyc.primitives.dict_opsrE   rF   rG   rH   rI   mypyc.primitives.float_opsrJ   mypyc.primitives.int_opsrK   mypyc.primitives.list_opsrL   rM   mypyc.primitives.misc_opsrN   mypyc.primitives.set_opsrO   rP   mypyc.primitives.str_opsrQ   rR   rS   rT   rU   rV   rW   mypyc.primitives.tuple_opsrX   rY   ru   rZ   __annotations__ri   rn   rp   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r#  r)  r3  rA  rX  r[  ra  re  rg  ri  rd  rs  rv  rx  r{  rz   rj   rh   <module>r     sB     # " " " " " , , , , , , , , , ,                                 " * ) ) ) ) ) ) )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                                                       8 , + + + + +                       N M M M M M M M              8 7 7 7 7 7 3 3 3 3 3 3 K K K K K K K K 5 5 5 5 5 5 I I I I I I I I                  O N N N N N N N 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]##^$$
 
 
 %$ $#   *)
 _%%( ( ( &%(X %.&$&."$""&         *++   ,+B \?33* * * 43*Z X~..   /.& V^,,@ @ @ -,@F X~..0 0 0 /.0f X/009 9 9 109x *++   ,+& *++   ,+. *++   ,+( )**   +**     ^$$   %$ _%%+ + + &%+ %&&   '& ^$$   %$  rj   