
    hi?L                       d Z ddlmZ ddlmZ ddl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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;  G d d          Z<d	d
d?dZ=d@dZ>dAdZ? e
d          Z@eAeBeeCf         eDe@         f         ZE G d de	e@                   ZFeBeDe@         eDe@         f         ZG G d de,eGe@                            ZH G d deHe;                   ZIdBd!ZJ	 dCdDd%ZK G d& d'eHe;                   ZLdEd)ZM G d* d+eHe;                   ZNdFd.ZO G d/ d0eHe;                   ZPdGd1ZQdZRd2ZS	 dHdId>ZTd3S )JzData-flow analyses.    )annotations)abstractmethod)IterableIterator)GenericTypeVar)0AssignAssignMulti
BasicBlockBoxBranchCallCallCCastComparisonOp	ControlOpDecRefExtendFloatFloatComparisonOpFloatNegFloatOpGetAttrGetElementPtrGotoIncRef
InitStaticIntegerIntOp	KeepAliveLoadAddressLoadErrorValue
LoadGlobalLoadLiteralLoadMem
LoadStatic
MethodCallOp	OpVisitorPrimitiveOpRaiseStandardError
RegisterOpReturnSetAttr
SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUndefUnreachableValuec                  "    e Zd ZdZdd	ZddZdS )CFGzyControl-flow graph.

    Node 0 is always assumed to be the entry point. There must be a
    non-empty set of exits.
    succ"dict[BasicBlock, list[BasicBlock]]predexitsset[BasicBlock]returnNonec                8    |sJ || _         || _        || _        d S N)r;   r=   r>   )selfr;   r=   r>   s       g/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/analysis/dataflow.py__init__zCFG.__init__D   s&     		


    strc                Z    t          | j        d           }d| d| j         d| j         S )Nc                *    t          | j                  S rC   )intlabel)es    rE   <lambda>zCFG.__str__.<locals>.<lambda>P   s    QW rG   )keyzexits: z
succ: z
pred: )sortedr>   r;   r=   )rD   r>   s     rE   __str__zCFG.__str__O   s<    tz'='=>>>FFF	FF49FFFrG   N)r;   r<   r=   r<   r>   r?   r@   rA   r@   rH   )__name__
__module____qualname____doc__rF   rQ    rG   rE   r:   r:   =   sL         	 	 	 	G G G G G GrG   r:   F)
use_yieldsblockslist[BasicBlock]rX   boolr@   c               t   i }i }t                      }| D ]}t          d |j        dd         D                       r
J d            |r4t          |j        t
                    r|j        j        r|j        j        g}n&t          |j                                                  }|s|	                    |           |g|z   D ]#}|j
        r|                    |j
                   $|||<   g ||<   |                                D ]%\  }}	|	D ]}
||
                             |           &t          |||          S )zCalculate basic block control-flow graph.

    If use_yields is set, then we treat returns inserted by yields as gotos
    instead of exits.
    c              3  @   K   | ]}t          |t                    V  d S rC   )
isinstancer   ).0ops     rE   	<genexpr>zget_cfg.<locals>.<genexpr>^   s=       
 
*,Jr9%%
 
 
 
 
 
rG   Nz-Control-flow ops must be at the end of blocks)setanyopsr^   
terminatorr-   yield_targetlisttargetsadderror_handlerappenditemsr:   )rY   rX   succ_mappred_mapr>   blockr;   error_pointprevnxtrL   s              rE   get_cfgrt   T   s    H35HEEE   
 
05	#2#
 
 
 
 
 	; 	;:	; 	; 	;  	4*U%5v>> 	45CSC` 	4$12DD(002233D 	IIe "7T> 	7 	7K( 7K5666^^%% ) )	c 	) 	)EUO""4((((	)x5)))rG   rL   r   c                    t          | j                  dk    r2t          | j        d         t                    r| j        d         j        } | S )N   rb   )lenre   r^   r   rL   )rL   s    rE   get_real_targetrx      s=    
59~~z%)B->>	"#LrG   rA   c                   d}|r| D ]V}t          |j                                                  D ]-\  }}|j                            |t	          |                     .Wd}t          |           }|                                 }|                                  t          |          D ]0\  }}|dk    s|j        |         r| 	                    |           .d}1|dS dS )zCleanup the control flow graph.

    This eliminates obviously dead basic blocks and eliminates blocks that contain
    nothing but a single jump.

    There is a lot more that could be done.
    TFr   N)
	enumeraterf   ri   
set_targetrx   rt   copyclearr=   rl   )rY   changedrp   itgtcfgorig_blockss          rE   cleanup_cfgr      s    G
  	E 	EE#E$4$<$<$>$>?? E E3 ++As/C/CDDDDE fookkmm!+.. 	 	HAuAvv%ve$$$$      rG   Tc                      e Zd Zd
dZddZd	S )AnalysisResultbeforeAnalysisDict[T]afterr@   rA   c                "    || _         || _        d S rC   r   r   )rD   r   r   s      rE   rF   zAnalysisResult.__init__   s    


rG   rH   c                (    d| j          d| j         dS )Nzbefore: z
after: 
r   )rD   s    rE   rQ   zAnalysisResult.__str__   s    >$+>>
>>>>rG   N)r   r   r   r   r@   rA   rR   )rS   rT   rU   rF   rQ   rW   rG   rE   r   r      s<           ? ? ? ? ? ?rG   r   c                  f   e Zd ZdKdZedLd            ZedMd	            ZedNd            ZedOd            ZdPdZ	dQdZ
dRdZdSdZdTdZdUdZdVdZdWdZdXdZdYd!ZdZd#Zd[d%Zd\d'Zd]d)Zd^d+Zd_d-Zd`d/Zdad1Zdbd3Zdcd5Zddd7Zded9Zdfd;Zdgd=Z dhd?Z!didAZ"djdCZ#dkdEZ$dldGZ%dmdIZ&dJS )nBaseAnalysisVisitorr`   r   r@   GenAndKill[T]c                :    t                      t                      fS rC   rc   rD   r`   s     rE   
visit_gotozBaseAnalysisVisitor.visit_goto       uucee|rG   r,   c                    t           rC   NotImplementedErrorr   s     rE   visit_register_opz%BaseAnalysisVisitor.visit_register_op       !!rG   r	   c                    t           rC   r   r   s     rE   visit_assignz BaseAnalysisVisitor.visit_assign   r   rG   r
   c                    t           rC   r   r   s     rE   visit_assign_multiz&BaseAnalysisVisitor.visit_assign_multi   r   rG   r0   c                    t           rC   r   r   s     rE   visit_set_memz!BaseAnalysisVisitor.visit_set_mem   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   
visit_callzBaseAnalysisVisitor.visit_call       %%b)))rG   r'   c                ,    |                      |          S rC   r   r   s     rE   visit_method_callz%BaseAnalysisVisitor.visit_method_call   r   rG   r"   c                ,    |                      |          S rC   r   r   s     rE   visit_load_error_valuez*BaseAnalysisVisitor.visit_load_error_value   r   rG   r$   c                ,    |                      |          S rC   r   r   s     rE   visit_load_literalz&BaseAnalysisVisitor.visit_load_literal   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_get_attrz"BaseAnalysisVisitor.visit_get_attr   r   rG   r.   c                ,    |                      |          S rC   r   r   s     rE   visit_set_attrz"BaseAnalysisVisitor.visit_set_attr   r   rG   r&   c                ,    |                      |          S rC   r   r   s     rE   visit_load_staticz%BaseAnalysisVisitor.visit_load_static   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_init_staticz%BaseAnalysisVisitor.visit_init_static   r   rG   r2   c                ,    |                      |          S rC   r   r   s     rE   visit_tuple_getz#BaseAnalysisVisitor.visit_tuple_get   r   rG   r3   c                ,    |                      |          S rC   r   r   s     rE   visit_tuple_setz#BaseAnalysisVisitor.visit_tuple_set   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   	visit_boxzBaseAnalysisVisitor.visit_box   r   rG   r5   c                ,    |                      |          S rC   r   r   s     rE   visit_unboxzBaseAnalysisVisitor.visit_unbox   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   
visit_castzBaseAnalysisVisitor.visit_cast   r   rG   r+   c                ,    |                      |          S rC   r   r   s     rE   visit_raise_standard_errorz.BaseAnalysisVisitor.visit_raise_standard_error   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_call_cz BaseAnalysisVisitor.visit_call_c   r   rG   r*   c                ,    |                      |          S rC   r   r   s     rE   visit_primitive_opz&BaseAnalysisVisitor.visit_primitive_op   r   rG   r1   c                ,    |                      |          S rC   r   r   s     rE   visit_truncatez"BaseAnalysisVisitor.visit_truncate   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_extendz BaseAnalysisVisitor.visit_extend   r   rG   r#   c                ,    |                      |          S rC   r   r   s     rE   visit_load_globalz%BaseAnalysisVisitor.visit_load_global   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_int_opz BaseAnalysisVisitor.visit_int_op   r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_float_opz"BaseAnalysisVisitor.visit_float_op  r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_float_negz#BaseAnalysisVisitor.visit_float_neg  r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_comparison_opz'BaseAnalysisVisitor.visit_comparison_op	  r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_float_comparison_opz-BaseAnalysisVisitor.visit_float_comparison_op  r   rG   r%   c                ,    |                      |          S rC   r   r   s     rE   visit_load_memz"BaseAnalysisVisitor.visit_load_mem  r   rG   r   c                ,    |                      |          S rC   r   r   s     rE   visit_get_element_ptrz)BaseAnalysisVisitor.visit_get_element_ptr  r   rG   r/   c                ,    |                      |          S rC   r   r   s     rE   visit_set_elementz%BaseAnalysisVisitor.visit_set_element  r   rG   r!   c                ,    |                      |          S rC   r   r   s     rE   visit_load_addressz&BaseAnalysisVisitor.visit_load_address  r   rG   r    c                ,    |                      |          S rC   r   r   s     rE   visit_keep_alivez$BaseAnalysisVisitor.visit_keep_alive  r   rG   r4   c                ,    |                      |          S rC   r   r   s     rE   visit_unborrowz"BaseAnalysisVisitor.visit_unborrow  r   rG   N)r`   r   r@   r   )r`   r,   r@   r   )r`   r	   r@   r   )r`   r
   r@   r   )r`   r0   r@   r   )r`   r   r@   r   )r`   r'   r@   r   )r`   r"   r@   r   )r`   r$   r@   r   )r`   r   r@   r   )r`   r.   r@   r   )r`   r&   r@   r   )r`   r   r@   r   )r`   r2   r@   r   )r`   r3   r@   r   )r`   r   r@   r   )r`   r5   r@   r   )r`   r   r@   r   )r`   r+   r@   r   )r`   r   r@   r   )r`   r*   r@   r   )r`   r1   r@   r   )r`   r   r@   r   )r`   r#   r@   r   )r`   r   r@   r   )r`   r   r@   r   )r`   r   r@   r   )r`   r   r@   r   )r`   r   r@   r   )r`   r%   r@   r   )r`   r   r@   r   )r`   r/   r@   r   )r`   r!   r@   r   )r`   r    r@   r   )r`   r4   r@   r   )'rS   rT   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rG   rE   r   r      s            " " " ^" " " " ^" " " " ^" " " " ^"* * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * ** * * * * *rG   r   c                  T    e Zd ZdZdddZddZddZddZddZddZ	d dZ
d!dZdS )"DefinedVisitora  Visitor for finding defined registers.

    Note that this only deals with registers and not temporaries, on
    the assumption that we never access temporaries when they might be
    undefined.

    If strict_errors is True, then we regard any use of LoadErrorValue
    as making a register undefined. Otherwise we only do if
    `undefines` is set on the error value.

    This lets us only consider the things we care about during
    uninitialized variable checking while capturing all possibly
    undefined things for refcounting.
    Fstrict_errorsr[   r@   rA   c                    || _         d S rC   r   )rD   r   s     rE   rF   zDefinedVisitor.__init__2  s    *rG   r`   r   GenAndKill[Value]c                :    t                      t                      fS rC   r   r   s     rE   visit_branchzDefinedVisitor.visit_branch5  r   rG   r-   c                :    t                      t                      fS rC   r   r   s     rE   visit_returnzDefinedVisitor.visit_return8  r   rG   r7   c                :    t                      t                      fS rC   r   r   s     rE   visit_unreachablez DefinedVisitor.visit_unreachable;  r   rG   r,   c                :    t                      t                      fS rC   r   r   s     rE   r   z DefinedVisitor.visit_register_op>  r   rG   r	   c                    t          |j        t                    r)|j        j        s| j        rt                      |j        hfS |j        ht                      fS rC   )r^   srcr"   	undefinesr   rc   destr   s     rE   r   zDefinedVisitor.visit_assignA  sR    bfn-- 	$263C 	$tGY 	$5527)##G9cee##rG   r
   c                :    t                      t                      fS rC   r   r   s     rE   r   z!DefinedVisitor.visit_assign_multiH  s    uucee|rG   r0   c                :    t                      t                      fS rC   r   r   s     rE   r   zDefinedVisitor.visit_set_memL  r   rG   NF)r   r[   r@   rA   r`   r   r@   r   r`   r-   r@   r   r`   r7   r@   r   r`   r,   r@   r   r`   r	   r@   r   r`   r
   r@   r   r`   r0   r@   r   )rS   rT   rU   rV   rF   r   r   r   r   r   r   r   rW   rG   rE   r   r   "  s         + + + + +            $ $ $ $        rG   r   r   initial_defined
set[Value]AnalysisResult[Value]c                N    t          | |t                      |dt                    S )zCalculate potentially defined registers at each CFG location.

    A register is defined if it has a value along some path from the initial location.
    FrY   r   gen_and_killinitialbackwardkind)run_analysisr   MAYBE_ANALYSIS)rY   r   r   s      rE   analyze_maybe_defined_regsr  P  s3     #%%   rG   regsIterable[Value]r   c                n    t          | |t          |          |dt          t          |                    S )aI  Calculate always defined registers at each CFG location.

    This analysis can work before exception insertion, since it is a
    sound assumption that registers defined in a block might not be
    initialized in its error handler.

    A register is defined if it has a value along all paths from the
    initial location.
    r   FrY   r   r   r   r  r  universe)r  r   MUST_ANALYSISrc   )rY   r   r   r  r   s        rE   analyze_must_defined_regsr  a  sA      #-@@@T   rG   c                  N    e Zd ZddZdd	ZddZddZddZddZddZ	ddZ
dS )BorrowedArgumentsVisitorargsr   r@   rA   c                    || _         d S rC   )r  )rD   r  s     rE   rF   z!BorrowedArgumentsVisitor.__init__}  s    			rG   r`   r   r   c                :    t                      t                      fS rC   r   r   s     rE   r   z%BorrowedArgumentsVisitor.visit_branch  r   rG   r-   c                :    t                      t                      fS rC   r   r   s     rE   r   z%BorrowedArgumentsVisitor.visit_return  r   rG   r7   c                :    t                      t                      fS rC   r   r   s     rE   r   z*BorrowedArgumentsVisitor.visit_unreachable  r   rG   r,   c                :    t                      t                      fS rC   r   r   s     rE   r   z*BorrowedArgumentsVisitor.visit_register_op  r   rG   r	   c                    |j         | j        v rt                      |j         hfS t                      t                      fS rC   )r   r  rc   r   s     rE   r   z%BorrowedArgumentsVisitor.visit_assign  s6    7di5527)##uucee|rG   r
   c                :    t                      t                      fS rC   r   r   s     rE   r   z+BorrowedArgumentsVisitor.visit_assign_multi  r   rG   r0   c                :    t                      t                      fS rC   r   r   s     rE   r   z&BorrowedArgumentsVisitor.visit_set_mem  r   rG   N)r  r   r@   rA   r   r   r   r   r   r   r   )rS   rT   rU   rF   r   r   r   r   r   r   r   rW   rG   rE   r  r  |  s                          
        rG   r  borrowedc           	     R    t          | |t          |          |dt          |          S )zCalculate arguments that can use references borrowed from the caller.

    When assigning to an argument, it no longer is borrowed.
    Fr	  )r  r  r  )rY   r   r  s      rE   analyze_borrowed_argumentsr    s8     -h77   rG   c                  F    e Zd ZddZddZdd	ZddZddZddZddZ	dS )UndefinedVisitorr`   r   r@   r   c                :    t                      t                      fS rC   r   r   s     rE   r   zUndefinedVisitor.visit_branch  r   rG   r-   c                :    t                      t                      fS rC   r   r   s     rE   r   zUndefinedVisitor.visit_return  r   rG   r7   c                :    t                      t                      fS rC   r   r   s     rE   r   z"UndefinedVisitor.visit_unreachable  r   rG   r,   c                N    t                      |j        s|hnt                      fS rC   )rc   is_voidr   s     rE   r   z"UndefinedVisitor.visit_register_op  s"    uu"*7rdd#%%77rG   r	   c                .    t                      |j        hfS rC   rc   r   r   s     rE   r   zUndefinedVisitor.visit_assign      uurwirG   r
   c                .    t                      |j        hfS rC   r#  r   s     rE   r   z#UndefinedVisitor.visit_assign_multi  r$  rG   r0   c                :    t                      t                      fS rC   r   r   s     rE   r   zUndefinedVisitor.visit_set_mem  r   rG   Nr   r   r   r   r   r   r   )
rS   rT   rU   r   r   r   r   r   r   r   rW   rG   rE   r  r    s                 8 8 8 8                   rG   r  r`   r(   c                    t                      }|                                 D ]9}t          |t          t          t
          f          s|                    |           :|S rC   )rc   sourcesr^   r   r   r6   rj   )r`   resultsources      rE   non_trivial_sourcesr+    sS    UUF**,,  &7E5"9:: 	JJvMrG   c                  V    e Zd ZddZddZdd	ZddZddZddZddZ	ddZ
ddZdS ) LivenessVisitorr`   r   r@   r   c                <    t          |          t                      fS rC   r+  rc   r   s     rE   r   zLivenessVisitor.visit_branch      "2&&--rG   r-   c                    t          |j        t          t          f          s|j        ht	                      fS t	                      t	                      fS rC   )r^   valuer   r   rc   r   s     rE   r   zLivenessVisitor.visit_return  s@    "(We$455 	 H:suu$$55#%%<rG   r7   c                :    t                      t                      fS rC   r   r   s     rE   r   z!LivenessVisitor.visit_unreachable  r   rG   r,   c                X    t          |          }|j        s||hfS |t                      fS rC   )r+  r!  rc   )rD   r`   gens      rE   r   z!LivenessVisitor.visit_register_op  s3    !"%%z 	9:rG   r	   c                0    t          |          |j        hfS rC   r+  r   r   s     rE   r   zLivenessVisitor.visit_assign      "2&&	11rG   r
   c                0    t          |          |j        hfS rC   r7  r   s     rE   r   z"LivenessVisitor.visit_assign_multi  r8  rG   r0   c                <    t          |          t                      fS rC   r/  r   s     rE   r   zLivenessVisitor.visit_set_mem  r0  rG   r   c                :    t                      t                      fS rC   r   r   s     rE   visit_inc_refzLivenessVisitor.visit_inc_ref  r   rG   r   c                :    t                      t                      fS rC   r   r   s     rE   visit_dec_refzLivenessVisitor.visit_dec_ref  r   rG   Nr   r   r   r   r   r   r   )r`   r   r@   r   )r`   r   r@   r   )rS   rT   rU   r   r   r   r   r   r   r   r<  r>  rW   rG   rE   r-  r-    s        . . . .             2 2 2 22 2 2 2. . . .        rG   r-  c                f    t          | |t                      t                      dt                    S )zCalculate live registers at each CFG location.

    A register is live at a location if it can be read along some CFG path starting
    from the location.
    Tr   )r  r-  rc   r  )rY   r   s     rE   analyze_live_regsr@    s7     $&&   rG   rv   Nr   OpVisitor[GenAndKill[T]]r   set[T]r  rK   r  r
  set[T] | NoneAnalysisResult[T]c                   i }i }| D ]z}	t                      }
t                      }|	j        }|rt          t          |                    }|D ]*}|                    |          \  }}|
|z
  |z  }
||z
  |z  }+|
||	<   |||	<   {t          |           }|s|                                 t          |          }i }i }| D ]`}	|t          k    r#t                      ||	<   t                      ||	<   0|
J d            t          |          ||	<   t          |          ||	<   a|r|j        }|j        }n|j        }|j        }|r|	                                }|
                    |           ||         rLd}||         D ]<}|t          ||                   }|t          k    r|||         z  }1|||         z  }=|J nt          |          }|||<   |||         z
  ||         z  }|||         k    r9||         D ]0}||vr*|                    |           |                    |           1|||<   |i }i }| D ]t}	|	}||         }t          |	j                  }|rt          t          |                    }|D ]3\  }}||||f<   |                    |          \  }}||z
  |z  }||||f<   4u|r||}}t          ||          S )aP  Run a general set-based data flow analysis.

    Args:
        blocks: All basic blocks
        cfg: Control-flow graph for the code
        gen_and_kill: Implementation of gen and kill functions for each op
        initial: Value of analysis for the entry points (for a forward analysis) or the
            exit points (for a backward analysis)
        kind: MUST_ANALYSIS or MAYBE_ANALYSIS
        backward: If False, the analysis is a forward analysis; it's backward otherwise
        universe: For a must analysis, the set of all possible values. This is the starting
            value for the work list algorithm, which will narrow this down until reaching a
            fixed point. For a maybe analysis the iteration always starts from an empty set
            and this argument is ignored.

    Return analysis results: (before, after)
    Nz,Universe must be defined for a must analysis)rc   re   rh   reversedacceptreverser  r;   r=   popremoverl   rj   rz   r   ) rY   r   r   r   r  r  r
  	block_gen
block_killrp   r5  killre   r`   opgenopkillworklistworksetr   r   ro   rn   rL   
new_beforer=   	new_afterr;   	op_beforeop_aftercurops_enumidxs                                    rE   r  r    s{   4 IJ  ! !eeuui 	&x}}%%C 	+ 	+BIIl33ME6<5(C5LF*DD	% 
5 F||H (mmG')F&(E ) )>!!EEF5M55E%LL'')W'''MMF5Mx==E%LL 8888  !uE? 	&(,J  . .%!$U4[!1!1JJ^++%+-JJ%+-JJ))))WJ"u*U"33y7GG	e$$  & &w&&OOD)))KK%%% e-  !2 79I57H 
' 
'Um-6uy-A-A 	0X//H 	' 	'GC$'IeSj!IIl33ME6<5(C#&HUCZ  		'
  2'))X...rG   )rY   rZ   rX   r[   r@   r:   )rL   r   r@   r   )rY   rZ   r@   rA   )rY   rZ   r   r:   r   r   r@   r   r   )rY   rZ   r   r:   r   r   r  r  r   r[   r@   r   )rY   rZ   r   r:   r  r   r@   r   )r`   r(   r@   r   )rY   rZ   r   r:   r@   r   rC   )rY   rZ   r   r:   r   rA  r   rB  r  rK   r  r[   r
  rC  r@   rD  )UrV   
__future__r   abcr   collections.abcr   r   typingr   r   mypyc.ir.opsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r:   rt   rx   r   r   dicttuplerK   rc   AnalysisDictr   
GenAndKillr   r   r  r  r  r  r  r+  r-  r@  r  r  r  rW   rG   rE   <module>rb     s     " " " " " "       . . . . . . . . # # # # # # # #1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1hG G G G G G G G. =B ** ** ** ** ** **Z      6 GCLLE*c/*CF23? ? ? ? ?WQZ ? ? ? 3q63q6>"
l* l* l* l* l*)JqM2 l* l* l*^+ + + + +(/ + + +\   ,      6    259   8   $    *51   .   ! ! ! ! !)%0 ! ! !H   "  #l/ l/ l/ l/ l/ l/ l/rG   