o
    7f\                     @  s  d Z ddlmZ ddlZddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE dd	lFmGZGmHZH dd
lImJZJ ddlKmLZL ddlMmNZNmOZOmPZP ddlQmRZRmSZSmTZTmUZUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ ddl`maZambZbmcZc ddldmeZemfZfmgZgmhZhmiZimjZjmkZk ddllmmZm eg df Zneg e9f ZodddZpdddZqdd d!Zrdd#d$Zsdd(d)Ztdd+d,Zudd2d3Zvdd6d7Zwdd9d:Zxdd<d=Zydd?d@ZzddCdDZ{ddFdGZ|ddIdJZ}ddLdMZ~ddOdPZddYdZZdd]d^ZddedfZddjdkZddodpZddtduZddvdwZddxdyZdd{d|ZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdS )a  Transform mypy statement ASTs to mypyc IR (Intermediate Representation).

The top-level AST transformation logic is implemented in mypyc.irbuild.visitor
and mypyc.irbuild.builder.

A few statements are transformed in mypyc.irbuild.function (yield, for example).
    )annotationsN)CallableSequence)
AssertStmtAssignmentStmt	AwaitExprBlock	BreakStmtContinueStmtDelStmt
ExpressionExpressionStmtForStmtIfStmtImport	ImportAll
ImportFromListExprLvalue	MatchStmtOperatorAssignmentStmt	RaiseStmt
ReturnStmtStarExprStrExprTempNodeTryStmt	TupleExpr	WhileStmtWithStmt	YieldExprYieldFromExpr)NAMESPACE_MODULENO_TRACEBACK_LINE_NOAssign
BasicBlockBranch
InitStaticIntegerLoadAddressLoadErrorValueLoadLiteral
LoadStatic
MethodCallRaiseStandardErrorRegisterReturnTupleGetUnborrowUnreachableValue)	RInstanceRTuplec_pyssize_t_rprimitive
exc_rtuple	is_taggednone_rprimitiveobject_pointer_rprimitiveobject_rprimitive)is_borrow_friendly_exprprocess_conditional)	IRBuilderint_borrow_friendly_op)for_loop_helper)-add_raise_exception_blocks_to_generator_class)ExceptNonlocalControlFinallyNonlocalControlTryFinallyNonlocalControl)AssignmentTargetAssignmentTargetAttrAssignmentTargetIndexAssignmentTargetRegisterAssignmentTargetTuple)error_catch_opexc_matches_opget_exc_info_opget_exc_value_opkeep_propagating_opraise_exception_opreraise_exception_oprestore_exc_info_op)iter_opnext_raw_oppy_delattr_op)check_stop_opcoro_opimport_from_many_opimport_many_opsend_optype_opyield_from_except_op   )MatchVisitorbuilderr?   blockr   returnNonec                 C  st   |j s"| jd |jD ]}| | | jd s nq| j  d S |jr8| ttjd|j	 | t
  d S d S )NTz#Reached allegedly unreachable code!)is_unreachableblock_reachable_stackappendbodyacceptpopaddr.   RUNTIME_ERRORliner3   )r_   r`   stmt rn   P/home/ertert/spirit/venv/lib/python3.10/site-packages/mypyc/irbuild/statement.pytransform_blockw   s    



rp   rm   r   c                 C  s*   t |jtrd S |j| j |   d S N)
isinstanceexprr   rh   visitorflush_keep_alives)r_   rm   rn   rn   ro   transform_expression_stmt   s   rv   r   c                 C  sN   |j r
| |j }n| j }| || jd |j}| jd | ||j d S Nrc   )	rs   rh   r_   nonecoerce	ret_typesrl   nonlocal_control
gen_return)r_   rm   retvalrn   rn   ro   transform_return_stmt   s
   
r~   r   c                 C  s^  |j }|sJ | ||j |d }|jr$t|jtr$| ||j d S t|tt	frt|jtt	frt
|jt
|jjkrtdd |jD rt
|dkrg }|jjD ]}| |}t|j}| |||j || qTt|j|D ]\}}| |}	| |	||j qt|   d S |jj}
| |j}|  r|jr| || t|tt	frt|jtrt
|jjt
|jkrt
|dkrtdd |jD rtdd |jjD rt
|j}t|D ]"}| |j| }| t||dd}| t|}| |||
 q| jj|gdd	 |   d S |D ]}| |}| |||
 |   qd S )
Nr   c                 s      | ]}t |V  qd S rq   is_simple_lvalue.0itemrn   rn   ro   	<genexpr>       z,transform_assignment_stmt.<locals>.<genexpr>r]   c                 s  r   rq   r   r   rn   rn   ro   r      r   c                 s  s    | ]}|j V  qd S rq   )is_refcounted)r   trn   rn   ro   r      s    T)borrow)steal)lvaluesdisallow_class_assignmentsrl   typerr   rvaluer   get_assignment_targetr   r   lenitemsallrh   r/   assignrf   zipru   non_function_scopeis_final_definit_final_staticr6   typesanyrangerj   r1   r2   r_   
keep_alive)r_   rm   r   first_lvaluetempsright
rvalue_regtempleftassignment_targetrl   nitargetrvalue_itemlvaluern   rn   ro   transform_assignment_stmt   sl   





r   rs   r   boolc                 C  s   t | tttf S rq   )rr   r   r   r   )rs   rn   rn   ro   r      s   r   r   c                 C  s   |  |jg|j t| |jr+t| |jr+|jtv r+t| |jo)t| |j}nd}| 	|j}| j
||j|d}| j|j|d}|jd }| ||||j}| |||j |   dS )z,Operator assignment statement such as x += 1F)
can_borrow=N)r   r   rl   r9   	node_typer   opr@   r=   r   readrh   	binary_opr   ru   )r_   rm   r   r   target_valuerregr   resrn   rn   ro   "transform_operator_assignment_stmt   s"   

r   	module_idstras_name
str | Nonetuple[str, str]c                 C  s.   |r
| }|}||fS |  dd  }}||fS )a  Compute names for updating the globals dict with the appropriate module.

    * For 'import foo.bar as baz' we add 'foo.bar' with the name 'baz'
    * For 'import foo.bar' we add 'foo' with the name 'foo'

    Typically we then ignore these entries and access things directly
    via the module static, but we will use the globals version for
    modules that mypy couldn't find, since it doesn't analyze module
    references from those properly..r   )split)r   r   
globals_idglobals_namern   rn   ro   import_globals_id_and_name   s   
r   noder   c              
   C  sd  |j rd S |js9|  }|jD ]'\}}| ||j t||\}}| j|d| || 	||jgd |jd qd S || j
vr@d S g }g }g }	| j
| D ]6}
|
jD ]0\}}d | j|< ||gt||R  tt|td}|| tt| |	t|
jt qPqK| jt|}| jt|	}| t| tt|t||  | | j| | jj|gt d S )N__setitem__result_typerl   	namespace)is_mypy_onlyis_top_levelload_globals_dictids
gen_importrl   r   gen_method_callload_str
get_modulemodule_import_groupsimportsrf   r,   r<   r"   rj   r)   r;   r(   r7   r_   setup_rarraycall_crY   r+   tuplemodule_pathfn_infonamer#   )r_   r   globalsmod_idr   r   r   modulesstatic_ptrs	mod_linesimport_node
mod_staticstatic_array_ptrimport_line_ptrrn   rn   ro   transform_import  sR   


r   r   c           
      C  s   |j rd S | j| j }|jd ur|jr|jd }n| jdr#| j}nd}tjd|j	 |j
 |}d | j|< dd |jD }dd |jD }| tt|t}||krX|}n
| tt|t}| t| ||||  g|j}	| t|	|td d S )	Nr   z__init__.py r   c                 S  s   g | ]\}}|qS rn   rn   )r   r   _rn   rn   ro   
<listcomp>c  s    z)transform_import_from.<locals>.<listcomp>c                 S  s   g | ]\}}|p	|qS rn   rn   )r   r   r   rn   rn   ro   r   d      r   )r   graphmodule_name	ancestorsr   endswith	importlibutilresolve_namerelativeidr   namesrj   r+   r   r<   r   rX   r   r   rl   r'   r"   )
r_   r   module_statemodule_packager   r   as_namesnames_literalas_names_literalmodulern   rn   ro   transform_import_fromT  s,   
r   r   c                 C  s   |j rd S | |j|j d S rq   )r   r   r   rl   r_   r   rn   rn   ro   transform_import_allv  s   r   r   c                 C  s   t  t  }}|jrt  n|}t|jdksJ t| |jd || | | | |jd  | | |jrG| | | |j | | | | d S )Nr]   r   )	r%   	else_bodyr   rs   r>   activate_blockrh   rg   goto)r_   rm   if_bodynextr   rn   rn   ro   transform_if_stmt|  s   



r   sr   c                 C  s   t  t  t  t  f\}}}}|jd ur|n|}| || | | t| |j|| | | | |j | 	| | 
  |jd urS| | | |j | 	| | | d S rq   )r%   r   push_loop_stackgoto_and_activater>   rs   r   rh   rg   r   pop_loop_stack)r_   r   rg   r   top
else_blocknormal_loop_exitrn   rn   ro   transform_while_stmt  s   





r  r   c                   sJ   d fdd}d fdd}t  jj|jr|nd jj d S )Nra   rb   c                          j d S rq   rh   rg   rn   r_   r   rn   ro   rg        z transform_for_stmt.<locals>.bodyc                     s   j d usJ  j  d S rq   )r   rh   rn   r  rn   ro   r     s   z&transform_for_stmt.<locals>.else_blockra   rb   )rA   indexrs   r   is_asyncrl   )r_   r   rg   r   rn   r  ro   transform_for_stmt  s
    r
  r	   c                 C     | j d | |j d S rw   )r{   	gen_breakrl   r   rn   rn   ro   transform_break_stmt     r  r
   c                 C  r  rw   )r{   gen_continuerl   r   rn   rn   ro   transform_continue_stmt  r  r  r   c                 C  sV   |j d u r| tg t | t  d S | |j }| t|g|j | t  d S rq   )	rs   r   rQ   r#   rj   r3   rh   rP   rl   )r_   r   excrn   rn   ro   transform_raise_stmt  s   
r  rg   GenFunchandlersLSequence[tuple[tuple[ValueGenFunc, int] | None, Expression | None, GenFunc]]r   GenFunc | Nonerl   intc              	   C  s  |sJ dt  t  t  }}}t  }|rt  n|}	| j| | t   |  | |	 | j  | j| | | | | t	g |}
| j
t| j
d |
 |D ]Q\}}}d}|r|\}}t  t  }}| t| g|}| t|||tj | | |r| |}| || tg |j|j |  | | |r| | qW|r| tg t | t  | j
  | j  | | | t| |
g| | | | | | t| |
g| | tg t | t  |r| |	 |  | | | | dS )zGeneralized try/except/else handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.ztry needs exceptrc   N)r%   r_   push_error_handlerr   r   pop_error_handlerr   maybe_spillr   rK   r{   rf   rC   rL   rj   r&   BOOLr   r   rN   rl   rQ   r#   r3   ri   rR   r   rO   )r_   rg   r  r   rl   except_entry
exit_blockcleanup_blockdouble_except_blockr   old_excr   varhandler_body
next_blocktype_f	type_line
body_blockmatchesr   rn   rn   ro   transform_try_except  s\   














r(  r   r   c                   s|   d fdd}d fdd	d fddfddt jjjD }jr1 fddnd }t |||j d S )Nra   rb   c                     r  rq   r  rn   r_   r   rn   ro   rg     r  z'transform_try_except_stmt.<locals>.bodyrg   r   r  c                   s    fddS )Nc                     
     S rq   rh   rn   rg   r_   rn   ro   <lambda>"     
 zAtransform_try_except_stmt.<locals>.make_handler.<locals>.<lambda>rn   rg   r_   r/  ro   make_handler!  s   z/transform_try_except_stmt.<locals>.make_handlerr   r   tuple[ValueGenFunc, int]c                   s    fdd j fS )Nc                     s
     S rq   r+  rn   )r_   r   rn   ro   r-  %  r.  z?transform_try_except_stmt.<locals>.make_entry.<locals>.<lambda>)rl   r   r0  r3  ro   
make_entry$     z-transform_try_except_stmt.<locals>.make_entryc                   s,   g | ]\}}}|r |nd ||fqS rq   rn   )r   r   r!  rg   )r4  r1  rn   ro   r   '  s    z-transform_try_except_stmt.<locals>.<listcomp>c                     s     jS rq   )rh   r   rn   r)  rn   ro   r-  +      z+transform_try_except_stmt.<locals>.<lambda>r  )rg   r   ra   r  )r   r   ra   r2  )r   r   varsr  r   r(  rl   )r_   r   rg   r  r   rn   )r_   r4  r1  r   ro   transform_try_except_stmt  s   r8  err_handlerr%   return_entry
main_entrytry_body"Register | AssignmentTarget | Nonec                 C  sV   t |}| j| | j| | t  |  | | | j  | j	  |j
S rq   )rE   r_   r  r{   rf   r   r%   r   ri   r  ret_reg)r_   r9  r:  r;  r<  controlrn   rn   ro   try_finally_try/  s   


r@  finally_blockr>  r4   c              	   C  s   t t}| | |r| || t| jd d | | | | | t|| tt | | | | |rL| || t| jd d | t|| 	t
g d | | |S rw   )r/   r8   r   r   rj   r*   rz   r   r$   r   rK   )r_   r9  r:  r;  rA  r>  r   rn   rn   ro   try_finally_entry_blocksD  s   





rB  finally_bodyr   )tuple[BasicBlock, FinallyNonlocalControl]c                 C  sP   t  }| j| t| jd |}| j| | | |  | j  ||fS rw   )r%   r_   r  rD   r{   rf   r   ri   )r_   rA  rC  r   r  finally_controlrn   rn   ro   try_finally_bodyb  s   

rF  r  rE  rD   c           	      C  s   t  t  }}| t|||tj | | | tg t | t  | j	
  |rW| | t  t  }}| t| |||tj | | | jd | | |d | | t  }| | | | || d | tg t | t  |S )zResolve the control flow out of a finally block.

    This means returning if there was a return, propagating
    exceptions, break/continue (soon), or just continuing on.
    rc   )r%   rj   r&   IS_ERRORr   r   rQ   r#   r3   r_   r  r   r{   r|   r   gen_cleanuprO   )	r_   r  rE  r   r>  reraiserestreturn_block	out_blockrn   rn   ro   try_finally_resolve_controlq  s(   






rM  c                 C  sn   t  t  t  t  f\}}}}t| ||||}t| |||||}t| |||\}	}
t| |	|
||}| | dS )zGeneralized try/finally handling that takes functions to gen the bodies.

    The point of this is to also be able to support with.N)r%   r@  rB  rF  rM  r   )r_   r<  rC  r9  r;  r:  rA  r>  r   r  rE  rL  rn   rn   ro   transform_try_finally_stmt  s    

rN  c                   sX   j r
dj jr%dfdd}j t| fdd d S t d S )	Nz3Exception groups and except* cannot be compiled yetra   rb   c                     s$   j r
t  d S  j d S rq   )r  r8  rh   rg   rn   r)  rn   ro   transform_try_body  s   z.transform_try_stmt.<locals>.transform_try_bodyc                     r*  rq   r+  rn   r,  rn   ro   r-    r.  z$transform_try_stmt.<locals>.<lambda>r  )is_starerrorrl   rC  rN  r8  )r_   r   rO  rn   )rg   r_   r   ro   transform_try_stmt  s   rR  list[Value]c                   s&     tg d fddtdD S )Nrc   c                   s   g | ]}  t|d qS )rc   )rj   r1   )r   r   r_   exc_inforn   ro   r     s    z$get_sys_exc_info.<locals>.<listcomp>   )r   rM   r   r0  rn   rT  ro   get_sys_exc_info  s   rW  r   Lvalue | Noner	  c              	     s6  rdnd  |tjtr%td  dg dd n'tg}	|d  d
	|d  dg
 r`td 
fdd	dfddd	fddd	fdd}tfdd| d S )Nar   __enter__)argsrl   exit__rU  r   ra   r4   c                   s   | rt }n	 }|||g}r,tjtsJ jd  d|td}nd us2J g| }rJt	|S |S )NrZ  r]  )
arg_valuesrl   r   )
rW  none_objectrr   r   r5   r   r   r:   py_call
emit_await)rU  r\  rx   exit_val)alr_   exit_r	  	is_nativerl   mgrmgr_vrn   ro   maybe_natively_call_exit  s$   


 z0transform_with.<locals>.maybe_natively_call_exitrb   c                     s"   r     d S rq   )r   r   rn   )rg   r_   rl   r   valuern   ro   r<    s   
z transform_with.<locals>.try_bodyc                    sf        t t } } dd| |  |  tg t  t	   |  d S )NTrU  )
r   falser%   add_bool_branchr   r   rQ   r#   rj   r3   )rL  reraise_block)r_   r  rl   rh  rn   ro   except_body  s   
z#transform_with.<locals>.except_bodyc                    sL   t  t  } } t || tj  | dd  |  d S )NFrj  )r%   rj   r&   r   r  r   r   )rL  r  )r_   r  rh  rn   ro   rC  #  s
   

z$transform_with.<locals>.finally_bodyc                     s   t  d d fgd S rq   )r(  rn   )r_   rn  rl   r<  rn   ro   r-  -  r   z transform_with.<locals>.<lambda>)rU  r   ra   r4   r  )rh   rr   r   r5   rj   r-   r   r[   r  py_get_attrr`  maybe_spill_assignabletruera  rN  )r_   rs   r   rg   r	  rl   typrC  rn   )rc  rg   r_   r  rn  rd  r	  re  rl   rh  rf  rg  r   r<  ri  ro   transform_with  s,   
"
	rs  or   c                   s   d fddd d S )	Nr   r  ra   rb   c                   sN    t jkrj d S tj  j   fddjj d S )Nc                     s    d S )Nr]   rn   rn   )generater   rn   ro   r-  9  r6  z7transform_with_stmt.<locals>.generate.<locals>.<lambda>)r   rs   rh   rg   rs  r   r	  rl   r   r_   ru  rt  rv  ro   ru  4  s
   &z%transform_with_stmt.<locals>.generater   )r   r  ra   rb   rn   r_   rt  rn   rw  ro   transform_with_stmt2  s   ry  rY  r   c                 C  s   | j jrd S | |j}t t }}| ||| | | |jd u r0| t	t	j
d |j n3t|jtrD| t	t	j
|jj|j n| |j}| d|j}| ||g|j}| t|g|j | t  | | d S )Nzbuiltins.AssertionError)optionsstrip_assertsrh   rs   r%   rl  r   msgrj   r.   ASSERTION_ERRORrl   rr   r   ri  load_module_attr_by_fullnamer`  r   rP   r3   )r_   rY  condok_blockerror_blockmessageexc_typer  rn   rn   ro   transform_assert_stmt?  s    

r  r   c                 C  s   t | | |j|j d S rq   )transform_del_itemr   rs   rl   rx  rn   rn   ro   transform_del_stmtV     r  rF   c              
   C  s   t |tr| j|jd|jgd |d d S t |trLt |jtr:|jj}|	|j
s:| d|j
 d| | d| | |j
}| t|j|g| d S t |trd| t|j| t|jdd d S t |tru|jD ]
}t| || qld S d S )N__delitem__r   "z" cannot be deletedzMUsing "__deletable__ = ['<attr>']" in the class body enables "del obj.<attr>"T)	undefines)rr   rH   r   baser  rG   obj_typer5   class_iris_deletableattrrQ  noter   r   rU   objrI   rj   r$   registerr*   r   rJ   r   r  )r_   r   rl   clkey	subtargetrn   rn   ro   r  Z  s0   





r  valc                 C  s   |  || jd |}| jj}t }t|j}|j| | |j	t
|| | t| | | t| | |jd us>J |jS rw   )ry   rz   r   generator_classr%   r   continuation_blocksrf   r   next_label_targetr(   rj   r0   r   rB   send_arg_reg)r_   r  rl   r}   clsr#  
next_labelrn   rn   ro   
emit_yield{  s   


r  is_awaitc                  sV  t tt tt t|rtnt} ||g} |t t t }}} t g}	 	t
|	||t
j  |   tg   |  |  |	 t }
 |
 d	 fdd}d	 fdd}d	 fdd} |
| t |d d |fg|     |  S )
Nra   rb   c                     s      t   d S rq   )r   r  r   rn   )r_   rl   received_regto_yield_regrn   ro   r<    s    z*emit_yield_from_or_await.<locals>.try_bodyc                    s   t t}  tt| } t |g}t t }} t	|||t	j
  |  |   jd    |  |   jd   d S rw   )r/   r<   rj   r)   r;   r   r\   r   r%   r&   r  r   r   r{   r  r  )r  val_addressto_stopokstop)r_   iter_regrl   resultr  rn   ro   rn    s   

z-emit_yield_from_or_await.<locals>.except_bodyc                    s     t  g} t t }} t| ||tj  |  |   j	d 
   |    tg   j	d   d S rw   )r   rZ   r   r%   rj   r&   rG  r   r   r{   r  rV   r  )_yr  r  r_   r  rl   r  r  r  rn   ro   r     s   

z+emit_yield_from_or_await.<locals>.else_bodyr  )r/   r<   rW   rS   r   rp  r%   rT   r   rj   r&   rG  r   r   rV   r   r   r   r(  r   )r_   r  rl   r  get_opiter_val
stop_block
main_block
done_block_y_init
loop_blockr<  rn  r   rn   r  ro   emit_yield_from_or_await  s0   






r  c                 C  s   t | ||ddS NTr  )r  )r_   r  rl   rn   rn   ro   ra    r  ra  r    c                 C  sB   | j jr| d|j |jr| |j}n| j }t| ||jS )Nz"async generators are unimplemented)	r   is_coroutinerQ  rl   rs   rh   r_   rx   r  )r_   rs   r}   rn   rn   ro   transform_yield_expr  s   
r  r!   c                 C     t | | |j|jddS )NFr  r  rh   rs   rl   rx  rn   rn   ro   transform_yield_from_expr  r  r  r   c                 C  r  r  r  rx  rn   rn   ro   transform_await_expr  r  r  mr   c                 C  s   | t| | d S rq   )rh   r^   )r_   r  rn   rn   ro   transform_match_stmt  r5  r  )r_   r?   r`   r   ra   rb   )r_   r?   rm   r   ra   rb   )r_   r?   rm   r   ra   rb   )r_   r?   rm   r   ra   rb   )rs   r   ra   r   )r_   r?   rm   r   ra   rb   )r   r   r   r   ra   r   )r_   r?   r   r   ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   rm   r   ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   r   r	   ra   rb   )r_   r?   r   r
   ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   rg   r  r  r  r   r  rl   r  ra   rb   )r_   r?   r   r   ra   rb   )r_   r?   r9  r%   r:  r%   r;  r%   r<  r  ra   r=  )r_   r?   r9  r%   r:  r%   r;  r%   rA  r%   r>  r=  ra   r4   )
r_   r?   rA  r%   rC  r  r   r4   ra   rD  )r_   r?   r  r%   rE  rD   r   r4   r>  r=  ra   r%   )r_   r?   r<  r  rC  r  ra   rb   )r_   r?   ra   rS  )r_   r?   rs   r   r   rX  rg   r  r	  r   rl   r  ra   rb   )r_   r?   rt  r   ra   rb   )r_   r?   rY  r   ra   rb   )r_   r?   rt  r   ra   rb   )r_   r?   r   rF   rl   r  ra   rb   )r_   r?   r  r4   rl   r  ra   r4   )
r_   r?   r  r4   rl   r  r  r   ra   r4   )r_   r?   rs   r    ra   r4   )r_   r?   rt  r!   ra   r4   )r_   r?   rt  r   ra   r4   )r_   r?   r  r   ra   rb   )__doc__
__future__r   importlib.utilr   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!   mypyc.ir.opsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   mypyc.ir.rtypesr5   r6   r7   r8   r9   r:   r;   r<   mypyc.irbuild.ast_helpersr=   r>   mypyc.irbuild.builderr?   r@   mypyc.irbuild.for_helpersrA   mypyc.irbuild.generatorrB   mypyc.irbuild.nonlocalcontrolrC   rD   rE   mypyc.irbuild.targetsrF   rG   rH   rI   rJ   mypyc.primitives.exc_opsrK   rL   rM   rN   rO   rP   rQ   rR   mypyc.primitives.generic_opsrS   rT   rU   mypyc.primitives.misc_opsrV   rW   rX   rY   rZ   r[   r\   matchr^   r  ValueGenFuncrp   rv   r~   r   r   r   r   r   r   r   r   r  r
  r  r  r  r(  r8  r@  rB  rF  rM  rN  rR  rW  rs  ry  r  r  r  r  r  ra  r  r  r  r  rn   rn   rn   ro   <module>   sp    |T(
(
$





	
?



F
"







U




,
%


T



!

R


