
    Ng޾                        d dl mZ d dlZ ej        eeeeeeeeeeee           ddlmZ ddlmZ ddlm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mZ  G d dej                  Z ee
j                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z  G d$ d%e          Z! G d& d'e          Z" G d( d)e#          Z$ G d* d+e          Z% G d, d-e          Z& G d. d/e          Z'd0 Z( G d1 d2e          Z) G d3 d4e          Z*dS )5    )absolute_importN)
PyrexTypes	ExprNodesNodesBuiltinOptionsTreeVisitorCythonTransformInternalErrorerrorwarningfake_rhs_exprTypedExprNode   )r   )r   )r   )r   )r   )r	   r
   )r   r   r   c                   &     e Zd Zd fd	Zd Z xZS )r   Nc                 t    t          t          |                               |           || _        || _        d S N)superr   __init__type_may_be_none)selfr   may_be_nonepos	__class__s       W/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/FlowControl.pyr   zTypedExprNode.__init__   s6    mT""++C000	'    c                     | j         dk    S NF)r   r   s    r   r   zTypedExprNode.may_be_none   s     E))r   NN)__name__
__module____qualname__r   r   __classcell__r   s   @r   r   r      sL        ( ( ( ( ( (
* * * * * * *r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )ControlBlocka  Control flow graph node. Sequence of assignments and name references.

       children  set of children nodes
       parents   set of parent nodes
       positions set of position markers

       stats     list of block statements
       gen       dict of assignments generated by this block
       bounded   set  of entries that are definitely bounded in this block

       Example:

        a = 1
        b = a + c # 'c' is already bounded or exception here

        stats = [Assignment(a), NameReference(a), NameReference(c),
                     Assignment(b)]
        gen = {Entry(a): Assignment(a), Entry(b): Assignment(b)}
        bounded = {Entry(a), Entry(c)}

    c                     t                      | _        t                      | _        t                      | _        g | _        i | _        t                      | _        d| _        d| _        d| _	        d| _
        d| _        d S Nr   )setchildrenparents	positionsstatsgenboundedi_inputi_outputi_geni_killi_stater    s    r   r   zControlBlock.__init__;   sc    uu
uu
r   c                 "    | j          o| j         S r   )r/   r.   r    s    r   emptyzControlBlock.emptyJ   s    J5t~#56r   c                     | j         D ]}|j                            |            | j        D ]}|j                             |            | j                                         | j                                          dS )z'Detach block from parents and children.N)r,   r-   removeclear)r   childparents      r   detachzControlBlock.detachM   s    ] 	' 	'EM  &&&&l 	) 	)FO""4((((r   c                 n    | j                             |           |j                            |            d S r   )r,   addr-   r   blocks     r   	add_childzControlBlock.add_childV   s4    %   $r   N)r"   r#   r$   __doc__r   r8   r>   rC    r   r   r(   r(   $   sZ         ,  7 7 7           r   r(   c                       e Zd ZdZd ZdS )	ExitBlockzNon-empty exit point block.c                     dS r   rE   r    s    r   r8   zExitBlock.empty^   s    ur   N)r"   r#   r$   rD   r8   rE   r   r   rG   rG   [   s)        %%    r   rG   c                       e Zd Zd ZdS )AssignmentListc                     g | _         d S r   )r/   r    s    r   r   zAssignmentList.__init__c   s    


r   Nr"   r#   r$   r   rE   r   r   rJ   rJ   b   s#            r   rJ   c                   l    e Zd ZdZd ZddZddZd Zd Zd Z	dd	Z
d
 Zd Zd Zd Zd Zd Zd ZdS )ControlFlowa  Control-flow graph.

       entry_point ControlBlock entry point for this graph
       exit_point  ControlBlock normal exit point
       block       ControlBlock current block
       blocks      set    children nodes
       entries     set    tracked entries
       loops       list   stack for loop descriptors
       exceptions  list   stack for exception descriptors
       in_try_block  int  track if we're in a try...except or try...finally block
    c                    t                      | _        t                      | _        g | _        g | _        t                      | _        t                      | _        | j        	                    | j                   | j        | _
        d| _        d S r*   )r+   blocksentriesloops
exceptionsr(   entry_pointrG   
exit_pointr@   rB   in_try_blockr    s    r   r   zControlFlow.__init__t   sk    eeuu
'>>#++(((%
r   Nc                     t                      }| j                            |           |r|                    |           |S )zoCreate floating block linked to `parent` if given.

           NOTE: Block is NOT added to self.blocks
        )r(   rP   r@   rC   r   r=   rB   s      r   newblockzControlFlow.newblock   sB    
  	$U###r   c                     t                      }| j                            |           |r|                    |           n!| j        r| j                            |           || _        | j        S )z|Create block children block linked to current or `parent` if given.

           NOTE: Block is added to self.blocks
        )r(   rP   r@   rC   rB   rX   s      r   	nextblockzControlFlow.nextblock   so    
  	(U####Z 	(J  '''
zr   c                 h    |j         rdS |j        p"|j        p|j        p|j        p|j        p|j        S r   )is_anonymousis_localis_pyclass_attris_argfrom_closure
in_closureerror_on_uninitializedr   entrys     r   
is_trackedzControlFlow.is_tracked   sP     	5 -%"7 -5< -"-&+&6-,	.r   c                     |j         r@|j        r9|j        j        s+|j        j        s|j        j        s|j        j        r	|j        sdS dS NTF)r^   is_variabler   is_struct_or_union
is_complexis_arrayis_cpp_classis_cpp_optionalrd   s     r   is_statically_assignedz"ControlFlow.is_statically_assigned   sg    N 	u0 	.	&	 $	 *)		 382G		 4ur   c                 p    | j         r.| j         j                            |j        dd                    dS dS )z0Mark position, will be used to draw graph nodes.N   )rB   r.   r@   r   r   nodes     r   mark_positionzControlFlow.mark_position   s?    : 	3J $$TXbqb\22222	3 	3r   c                     | j         rr|                     |          r_t          ||||          }| j         j                            |           || j         j        |<   | j                            |           d S d S d S )N	rhs_scope)rB   rf   NameAssignmentr/   appendr0   rQ   r@   )r   lhsrhsre   rw   
assignments         r   mark_assignmentzControlFlow.mark_assignment   s    : 	$$//%00 	$'S%9MMMJJ##J///$.DJN5!LU#####		$ 	$ 	$ 	$r   c                     | j         rp|                     |          r]t          |||          }| j         j                            |           || j         j        |<   | j                            |           d S d S d S r   )rB   rf   Argumentr/   ry   r0   rQ   r@   )r   rz   r{   re   r|   s        r   mark_argumentzControlFlow.mark_argument   s    : 	$$//%00 	$!#sE22JJ##J///$.DJN5!LU#####		$ 	$ 	$ 	$r   c                     | j         rt|                     |          rat          ||          }| j         j                            |           t
          | j         j        |<   | j                            |           d S d S d S r   )	rB   rf   NameDeletionr/   ry   Uninitializedr0   rQ   r@   )r   rs   re   r|   s       r   mark_deletionzControlFlow.mark_deletion   s    : 	$$//%00 	$%dE22JJ##J///$1DJN5!LU#####		$ 	$ 	$ 	$r   c                     | j         r^|                     |          rK| j         j                            t	          ||                     | j                            |           d S d S d S r   )rB   rf   r/   ry   NameReferencerQ   r@   r   rs   re   s      r   mark_referencezControlFlow.mark_reference   st    : 	$$//%00 	$J##M$$>$>??? LU#####	$ 	$ 	$ 	$r   c                 B   | j         h}t                      }|rN|                                }|                    |           |j        D ]}||vr|                    |           |N| j        |z
  }|D ]}|                                 |                    | j                    |D ]h}|                                rR|j	        D ]!}|j        D ]}|
                    |           "|                                 |                    |           i| xj        |z  c_        dS )z%Delete unreachable and orphan blocks.N)rT   r+   popr@   r,   rP   r>   r:   r8   r-   rC   )r   queuevisitedrootr<   unreachablerB   r=   s           r   	normalizezControlFlow.normalize   sH   !"%% 	%99;;DKK % %''IIe$$$  	% kG+  	 	ELLNNNNt'((( 	' 	'E{{}} '#m 0 0F!& 0 0((////0&&&{"r   c                 f   i | _         d}| j        D ]-}t                      }|x|_        |_        || j         |<   |dz  }.| j        D ]i}|j        D ]_}t          |t                    rH||_        | j         |j	                 }|j        
                    |           |xj        |z  c_        |dz  }`j| j        D ]}|j                                        D ][\  }}| j         |         }|t          u r|xj        |j        z  c_        n|xj        |j        z  c_        |xj        |j        z  c_        \|j        |_        |j        D ]"}|xj        | j         |         j        z  c_        #| j                                         D ]}| j        xj        |j        z  c_        | j        j        | j        _        dS )z+Set initial state, map assignments to bits.r   N)assmtsrQ   rJ   maskbitrP   r/   
isinstancerx   re   ry   r0   itemsr   r4   r5   r3   r1   valuesrT   )r   r   re   r   rB   stats         r   
initializezControlFlow.initialize   s   \ 	 	E#%%F'**FK&*!'DKAICC[ 	 	E  dN33 "DH![4FL''---KK3&KKAIC [ 
	7 
	7E$y00 , ,tU+=((KK6:-KKKKK48+KK+"[EN 7 7E 2 667 k((** 	1 	1F""fj0"""$($4$:!!!r   c                    t                      }| j        |         }||j        z  rt|                     |          r#|                    t          |                     n<|j        r|                    t                     n|                    t                     |j	        D ]!}||j        z  r|                    |           "|S r   )
r+   r   r   ro   r@   StaticAssignmentra   Unknownr   r/   )r   istatere   retr   assmts         r   map_onezControlFlow.map_one	  s    eeU#FJ 	'**511 '(//0000# '    &&&\ 	 	E	! 
r   c                     d}|rTd}| j         D ]F}d}|j        D ]}||j        z  }||j         z  |j        z  }||j        k    rd}||_        ||_        G|RdS dS )z(Per-block reaching definitions analysis.TFr   N)rP   r-   r3   r5   r4   r2   )r   dirtyrB   r2   r=   r3   s         r   reaching_definitionsz ControlFlow.reaching_definitions  s     
	*E * *#m / /Fv.GG#u|m3u{Bu~-- E '!)  
	* 
	* 
	* 
	* 
	*r   r   )r"   r#   r$   rD   r   rY   r[   rf   ro   rt   r}   r   r   r   r   r   r   r   rE   r   r   rN   rN   g   s        
 

 
 
	 	 	 	   . . .  3 3 3
$ $ $ $$ $ $$ $ $$ $ $# # #."; "; ";H  * * * * *r   rN   c                       e Zd Zd ZdS )	LoopDescrc                 0    || _         || _        g | _        d S r   )
next_block
loop_blockrS   )r   r   r   s      r   r   zLoopDescr.__init__)  s    $$r   NrL   rE   r   r   r   r   (  s#            r   r   c                       e Zd ZdZddZdS )ExceptionDescrzException handling helper.

    entry_point   ControlBlock Exception handling entry point
    finally_enter ControlBlock Normal finally clause entry point
    finally_exit  ControlBlock Normal finally clause exit point
    Nc                 0    || _         || _        || _        d S r   )rT   finally_enterfinally_exit)r   rT   r   r   s       r   r   zExceptionDescr.__init__7  s     &*(r   r!   )r"   r#   r$   rD   r   rE   r   r   r   r   /  s2         ) ) ) ) ) )r   r   c                   >    e Zd ZddZd Zd Zd Zed             ZdS )rx   Nc                     |j         t                      |_         || _        || _        || _        |j        | _        t                      | _        d| _        d| _        d | _	        || _
        d S r   )cf_stater+   rz   r{   re   r   refsr`   is_deletioninferred_typerw   )r   rz   r{   re   rw   s        r   r   zNameAssignment.__init__>  s`    <55CL
7EE	 !"r   c                 0    | j         j        d| j        dS Nz(entry=)r   r"   re   r    s    r   __repr__zNameAssignment.__repr__L      !%!8!8!8$***EEr   c                 p    | j                             | j        p| j        j                  | _        | j        S r   )r{   
infer_typerw   re   scoper   r    s    r   r   zNameAssignment.infer_typeO  s/    !X001S4:CSTT!!r   c                 X    | j                             | j        p| j        j                  S r   )r{   type_dependenciesrw   re   r   r    s    r   r   z NameAssignment.type_dependenciesS  s$    x))$.*LDJ<LMMMr   c                 J    | j         j        j        s| j         j        S | j        S r   )re   r   is_unspecifiedr   r    s    r   r   zNameAssignment.typeV  s$    z- 	#:?"!!r   r   )	r"   r#   r$   r   r   r   r   propertyr   rE   r   r   rx   rx   =  sv        # # # #F F F" " "N N N " " X" " "r   rx   c                   .     e Zd ZdZ fdZd Zd Z xZS )r   z7Initialised at declaration time, e.g. stack allocation.c                     |j         j        sd}nd }t          |j         ||j                  }t	          t
          |                               |||           d S )NFr   r   )r   is_pyobjectr   r   r   r   r   )r   re   r   rz   r   s       r   r   zStaticAssignment.__init___  sg    z% 	KKKJKUY@ @ @%%..sC?????r   c                     | j         j        S r   )re   r   r    s    r   r   zStaticAssignment.infer_typeh  s    zr   c                     dS )NrE   rE   r    s    r   r   z"StaticAssignment.type_dependenciesk  s    rr   )r"   r#   r$   rD   r   r   r   r%   r&   s   @r   r   r   ]  sa        AA@ @ @ @ @        r   r   c                       e Zd Zd ZdS )r   c                 N    t                               | |||           d| _        d S NT)rx   r   r`   )r   rz   r{   re   s       r   r   zArgument.__init__p  s'    c3666r   NrL   rE   r   r   r   r   o  s#            r   r   c                       e Zd Zd Zd ZdS )r   c                 N    t                               | |||           d| _        d S r   )rx   r   r   )r   rz   re   s      r   r   zNameDeletion.__init__v  s*    c3666r   c                     | j                             | j        j                  }|j        s+|                    | j        j                  rt          j        S || _        |S r   )	r{   r   re   r   r   can_coerce_to_pyobjectr   py_object_typer   )r   r   s     r   r   zNameDeletion.infer_typez  sY    ++DJ,<==) 	-!889IJJ	-,,*r   N)r"   r#   r$   r   r   rE   r   r   r   r   u  s2                 r   r   c                       e Zd ZdZdS )r   zDefinitely not initialised yet.Nr"   r#   r$   rD   rE   r   r   r   r     s        ))))r   r   c                       e Zd ZdZdS )r   z7Coming from outer closure, might be initialised or not.Nr   rE   r   r   r   r     s        AAAAr   r   c                       e Zd Zd Zd ZdS )r   c                 n    |j         t                      |_         || _        || _        |j        | _        d S r   )r   r+   rs   re   r   r   s      r   r   zNameReference.__init__  s0    = EEDM	
8r   c                 0    | j         j        d| j        dS r   r   r    s    r   r   zNameReference.__repr__  r   r   N)r"   r#   r$   r   r   rE   r   r   r   r     s7          F F F F Fr   r   c                   0     e Zd ZdZdZdZ fdZd Z xZS )ControlFlowStateFc                 ^   t           |v r+|                    t                      d| _        |sd| _        nEt          |v r"|                    t                     d| _        nt          |          dk    rd| _        t          t          |           	                    d |D                        d S )NTr   c                 .    g | ]}|j         t          u|S rE   )r{   r   ).0is     r   
<listcomp>z-ControlFlowState.__init__.<locals>.<listcomp>  s$    <<<1m!;!;Q!;!;!;r   )
r   discardcf_maybe_null
cf_is_nullr   len	is_singler   r   r   )r   stater   s     r   r   zControlFlowState.__init__  s    E!!MM-(((!%D '"&MM'"""!%D5zzQ!%%%..<<<<<	> 	> 	> 	> 	>r   c                     | d         S r*   rE   r    s    r   onezControlFlowState.one  s    Awr   )	r"   r#   r$   r   r   r   r   r   r%   r&   s   @r   r   r     sX         MJI> > > > >       r   r   c                   8    e Zd ZdZd Zd Zd Zd Zd
dZd Z	d	S )	GVContextzGraphviz subgraph object.c                 >    i | _         d| _        g | _        i | _        d S r*   )blockidsnextidr,   sourcesr    s    r   r   zGVContext.__init__  s"    r   c                 :    | j                             |           d S r   )r,   ry   )r   r<   s     r   r@   zGVContext.add  s    U#####r   c                 r    || j         vr"d| j        z  | j         |<   | xj        dz  c_        | j         |         S )Nzblock%dr   )r   r   rA   s     r   nodeidzGVContext.nodeid  s?    %%#,t{#:DM% KK1KK}U##r   c                 ^   |j         sdS t          |j                   }t          |j                   }|d         }|| j        vr)t	          |                                          | j        |<   | j        |         }d                    d ||d         dz
  |d                  D                       S )N r   \nc                 6    g | ]}|                                 S rE   )strip)r   ls     r   r   z-GVContext.extract_sources.<locals>.<listcomp>  s     JJJ17799JJJr   r   )r.   minmaxr   list	get_linesjoin)r   rB   startstopsrcdescrliness         r   extract_sourceszGVContext.extract_sources  s     	2EO$$5?##84<''%)(*<*<*>*>%?%?DL"X&zzJJeE!HqLa4H.IJJJKKKr   Fc                     |                     d|z             |                     d           | j        D ]}|                    || |           |                     d           dS )zRender graphviz dot graphzdigraph %s {
z node [shape=box];
z}
N)writer,   render)r   fpnameannotate_defsr<   s        r   r   zGVContext.render  sj    
!D()))
'(((] 	2 	2ELLT=1111
r   c                 V    |                     dd                               dd          S )N"z\"
r   )replace)r   texts     r   escapezGVContext.escape  s&    ||C''//e<<<r   NF)
r"   r#   r$   rD   r   r@   r   r   r   r  rE   r   r   r   r     s|        ##  $ $ $$ $ $	L 	L 	L   = = = = =r   r   c                        e Zd ZdZd ZddZdS )GVzGraphviz DOT renderer.c                 "    || _         || _        d S r   )r  flow)r   r  r  s      r   r   zGV.__init__  s    				r   Fc           
         |                     d| j        z             | j        j        D ]}|                    |          }|r|j        D ]}t          |t                    r.|d|j        j        d|j	        rdndd|j
        d         dz  }Et          |t                    r(|j        r!|d|j        j        d	|j
        d         dz  }|sd
}|                    |          }|                     d|d|                    |          d           | j        j        D ]P}|                    |          }|j        D ]1}|                     d|d|                    |          d           2Q|                     d           d S )Nz subgraph %s {
z
 z [deletion
definition r   ]z [reference r8   z  z	 [label="z"];
z -> z;
z }
)r   r  r  rP   r   r/   r   rx   re   r   r   r   r   r  r,   )	r   r   ctxr  rB   labelr   pidr<   s	            r   r   z	GV.render  s   
#di/000Y% 	H 	HE''..E ]!K ] ]D!$77 ] JOOO4;K-]ZZQ]-]-]_c_ghi_j_j_j"l l#D-88 ]: ]!EtzPTPXYZP[P[P[%\\E  **U##CHHHsssCJJu4E4E4E4EFGGGGY% 	E 	EE**U##C E ECCCE1B1B1B1BCDDDDE
r   Nr	  )r"   r#   r$   rD   r   r   rE   r   r   r  r    s=                 r   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )MessageCollectionz/Collect error/warnings messages first then sortc                 ,    t                      | _        d S r   )r+   messagesr    s    r   r   zMessageCollection.__init__  s    r   c                 @    | j                             |d|f           d S r   r  r@   r   r   messages      r   r   zMessageCollection.error  s%    3g./////r   c                 @    | j                             |d|f           d S r   r  r  s      r   r   zMessageCollection.warning  s%    3w/00000r   c                     t          | j                  D ]*\  }}}|rt          ||           t          ||d           +d S )Nrq   )sortedr  r   r   )r   r   is_errorr  s       r   reportzMessageCollection.report  s\    &,T]&;&; 	) 	)"C7 )c7####Wa((((		) 	)r   N)r"   r#   r$   rD   r   r   r   r"  rE   r   r   r  r    sV        99  0 0 01 1 1) ) ) ) )r   r  c                 
   |                                   |                                  t                      }i }t                      }| j        D ]}|j        }|j        D ]}| j        |j                 }|                     ||j                  }	t          |t                    r|j        j                            |	           |                    |j                   ||j         z  }|j        r||j        z  }n
||j        z  }|                    |           |j        t&          ur|j        j                            |           t          |t,                    r|j        ||j        <   |j        j                            |           |j        j                            |	           |	                    t4                     |	                    t6                     |	D ]}
|
j                            |           |d         }|d         }|d         }|d         }t;                      }|D ]c}t4          |j        v r/d|_        t?          |j                  dk    rd|_         7d|_         ?t6          |j        v rd|_        Ud|_         d|_        d|!                                D ]R\  }}t4          |j        v rd|_        |j"        s2t?          |j                  dk    r|j#        |j$        j%        vrd|_         |j&        s|j"        s|j'        s|j(        j)        rw|j         rz|j*        ss|j+        s$tX          j+        r<|j(        j-        s|j(        j.        r$|/                    |j0        d|j#        z             |1                    |j0        d|j#        z             |r1d	|j#        z  }|j*        r|d
z  }|1                    |j0        |           -t6          |j        v r	d|_        Dd|_         d|_        T|D ]}
|
j        s|
j        j'        s~|
j        j*        sr|
j        j        rZ|rX|
j2        r)|1                    |
j0        d|
j        j#        z             n(|1                    |
j0        d|
j        j#        z             d|
j        _3        | j4        D ]}|j        s|j'        s~|j#        dk    rl|j#        5                    d          sR|j2        r&|r#|1                    |j0        d|j#        z             n%|r#|1                    |j0        d|j#        z             d|_3        |6                                 |D ]}to          |j                  |_        |D ]}to          |j                  |_        d S )Nzwarn.maybe_uninitializedzwarn.unused_resultzwarn.unusedzwarn.unused_argTr   Fz0local variable '%s' referenced before assignmentz9local variable '%s' might be referenced before assignmentz% (maybe initialized inside a closure)zUnused argument value '%s'zUnused result in '%s'_unusedzUnused argument '%s'zUnused entry '%s')8r   r   r+   rP   r2   r/   r   re   r   r   rx   rz   r   updater@   r   r   r   r{   r   cf_assignmentsry   r   rs   cf_referencesr   r   r   r   r  r   r   r   r   ra   r  r   scope_predefined_names
allow_nullr_   r   r!  rb   rc   r   r   r   r   r   r   r`   cf_usedrQ   
startswithr"  r   )r  compiler_directivesassignments
referencesassmt_nodesrB   r6   r   i_assmtsr   r   warn_maybe_uninitializedwarn_unused_resultwarn_unusedwarn_unused_argr  rs   re   msgs                      r   check_definitionsr7    s%   OO %%KJ%%K ) )-K 	) 	)D{4:.HLL$*55E$// )!((///)))!X]N2# (x|+GGtx'G%%%8=00J-44T:::D-00 
)(,

49%
(//555	"))%000 m,,,g&&&" ) )EJNN4((((1	)6  33MN,-AB%m4K)*;<O ""H  ' 'DM))!%D4=!!Q&&"&"'%%!%D#DO!&D "'')) %' %'eDM))!%D& '3t}+=+=+B+B
%+*LLL"& 5#5 ,05
0C )9 / &6&
.&27*2K& NNJ*%& & & &
 $$J*%& & & & * QTYT^^# CBBC  H   %%
 "&D#DO!&D  
& 
&
 		&5;#> 		&.		&{( 7-? 7< 7$$UY0L%*[%516 7 7 7 7 $$UY0G%*[%516 7 7 7 %EI  " "# 	"-	"zS  )>)>x)H)H < 5& 5 ((4J).54 5 5 5 # 5 ((4G).54 5 5 5!EMOO 8 8(77 8 8(778 8r   c                   0     e Zd Z fdZd Zd Zd Z xZS )AssignmentCollectorc                 d    t          t          |                                            g | _        d S r   )r   r9  r   r.  )r   r   s    r   r   zAssignmentCollector.__init__  s.    !4((11333r   c                 4    |                      | d d            d S r   )_visitchildrenr    s    r   
visit_NodezAssignmentCollector.visit_Node  s     D$-----r   c                 R    | j                             |j        |j        f           d S r   )r.  ry   rz   r{   rr   s     r   visit_SingleAssignmentNodez.AssignmentCollector.visit_SingleAssignmentNode  s(    48 455555r   c                 \    |j         D ]#}| j                            ||j        f           $d S r   )lhs_listr.  ry   r{   r   rs   rz   s      r   visit_CascadedAssignmentNodez0AssignmentCollector.visit_CascadedAssignmentNode  s=    = 	5 	5C##S$(O4444	5 	5r   )r"   r#   r$   r   r=  r?  rC  r%   r&   s   @r   r9  r9    se            . . .6 6 65 5 5 5 5 5 5r   r9  c                   &   e Zd Zd Zd Zd Zd Zd Zd Zd0dZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd1dZd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0dS )2ControlFlowAnalysisc                 n    || j         k    r| j        S t          | j                  D ]\  }}||u r|c S J r   )envr  reversedstack)r   rG  er  s       r   find_in_stackz!ControlFlowAnalysis.find_in_stack  sN    $(??9
++ 	 	GAtCxx r   c                 >   | j         d         }|rt                      nd | _        ddlm}  |            | _        t                      | _        d| _        |j	        | _
        t                      | _        g | _        t          t          j        d          | _        |                     |           t'          | j        | j                    |rR| j         d         }t)          |d          5 }| j                            |d	|
           d d d            n# 1 swxY w Y   |S )Ncontrol_flow.dot_outputr   )ConstantFoldingFTr   zcontrol_flow.dot_annotate_defswtmodule)r  )current_directivesr   gv_ctxOptimizerN  constant_folderr+   
reductionsin_inplace_assignmentr   rG  rN   r  rI  r   r   r   object_exprvisitchildrenr7  openr   )r   rs   
dot_outputrN  r  r   s         r   visit_ModuleNodez$ControlFlowAnalysis.visit_ModuleNode  sc   ,-FG
%/9ikkkT------.00 %%%*":MM	
()BPTUUU4   $)T%<=== 	N 34TUMj$'' N2""2x}"MMMN N N N N N N N N N N N N N Ns   (DDDc                    |j         D ]}|j        r|                     |           |                     |d           | j                            | j        | j        f           |j        | _        t                      | _        |j        j	        
                                D ];}| j                            |          r| j        j	                            |           <|                     |           | j                                         |j         D ]}|                     |           |j        rD| j                            |j        t%          t&          j        d          |j        j                   |j        rD| j                            |j        t%          t&          j        d          |j        j                   |                     |j                   |j        r|                     |j        j                   | j        j        r)| j        j                            | j        j                   | j                                         t?          | j        | j                    | j        j!                            | j        j"                   | j#        7| j#                            tI          |j        j%        | j                             | j        &                                \  | _        | _        |S )N)
decoratorsFrO  )'argsdefaultrY  rI  ry   rG  r  local_scoperN   rQ   r   rf   r@   rt   r[   _visitstar_argr   r   r   
tuple_typere   starstar_arg	dict_typebodyis_generatorgbodyrB   rC   rU   r   r7  rR  rP   rT   rS  r  r  r   r   rs   argre   s       r   visit_FuncDefNodez%ControlFlowAnalysis.visit_FuncDefNode  s   9 	( 	(C{ (""3'''4111
48TY/000#MM	 %-4466 	- 	-Ey##E** -	!%%e,,,4   	9 	 	CKK= 	9I##DM$1'2D>C%E %E %E$(M$79 9 9  	=I##D$5$1'2C>C%E %E %E$($5$;= = = 	DI 	)KK
((( 9? 	<IO%%di&:;;; 		$)T%<===	TY2333;"KOOBt/4di@@AAA"jnn..$)r   c                 :    d|_         |                     |          S r   )usedrl  rr   s     r   visit_DefNodez!ControlFlowAnalysis.visit_DefNode  s    	%%d+++r   c                     |S r   rE   rr   s     r   visit_GeneratorBodyDefNodez.ControlFlowAnalysis.visit_GeneratorBodyDefNode      r   c                     |S r   rE   rr   s     r   visit_CTypeDefNodez&ControlFlowAnalysis.visit_CTypeDefNode  rr  r   Nc                    | j         j        sd S | j         j        rO| j         j        d         }| j         j                            |j                   | j                                          |s| j        }|j        rQ|j        |j        }n| j	        
                    |j                  }|d S | j                             ||||           n|j        r{t          |j                  D ]e\  }}|j        r"t#          t$          j        d|j                  }n!|| j        u r|}n|                    |          }|                     ||           fn|                     |           | j         j        rQ| j         j        d         }| j         j                            |j                   | j                                          d S d S )Nrv   Fr   )r  rB   rS   rC   rT   r[   rX  is_namere   rG  lookupr  r}   is_sequence_constructor	enumerater_  
is_starredr   r   	list_typer   inferable_item_noderb  )	r   rz   r{   rw   	exc_descrre   r   rk  	item_nodes	            r   r}   z#ControlFlowAnalysis.mark_assignment  s   y 	F9 	"	,R0IIO%%i&;<<<I!!! 	#"C; 	y$	11}I%%c3%KKKK( 	#CH-- 5 53> ; -g.?UX[X_ ` ` `IID,,, #II # 7 7 : :I$$S)44445 KK9 	"	,R0IIO%%i&;<<<I!!!!!	" 	"r   c                 X    | j         d         r| j                            |           dS dS )z'Mark position if DOT output is enabled.rM  N)rR  r  rt   rr   s     r   rt   z!ControlFlowAnalysis.mark_position,  s9    "#<= 	*I##D)))))	* 	*r   c                     |j         D ] \  }}|dk    r|                     |           !|                     |           |S )N*)r   r}   rY  )r   rs   r  targets       r   visit_FromImportStatNodez,ControlFlowAnalysis.visit_FromImportStatNode1  sN     J 	- 	-LD&s{{$$V,,,4   r   c                 @    t          dt          |          z            )NzUnhandled assignment node %s)r   r   rr   s     r   visit_AssignmentNodez(ControlFlowAnalysis.visit_AssignmentNode8  s    :T$ZZGHHHr   c                 z    |                      |j                   |                     |j        |j                   |S r   )rb  r{   r}   rz   rr   s     r   r?  z.ControlFlowAnalysis.visit_SingleAssignmentNode;  s5    DHTXtx000r   c                     |                      |j                   |j        D ]}|                     ||j                   |S r   )rb  r{   rA  r}   rB  s      r   rC  z0ControlFlowAnalysis.visit_CascadedAssignmentNode@  sG    DH= 	0 	0C  dh////r   c                     t                      }|                    |           |j        D ]\  }}|                     |           |j        D ]\  }}|                     ||           |S r   )r9  rY  r.  rb  r}   )r   rs   	collectorrz   r{   s        r   visit_ParallelAssignmentNodez0ControlFlowAnalysis.visit_ParallelAssignmentNodeF  s    '))	%%%!- 	 	HCKK!- 	+ 	+HC  c****r   c                     d| _         |                     |           d| _         |                     |j        |                     |                                                     |S rh   )rW  rY  r}   rz   rU  create_binop_noderr   s     r   visit_InPlaceAssignmentNodez/ControlFlowAnalysis.visit_InPlaceAssignmentNodeO  s]    %)"4   %*"TXt';';D<R<R<T<T'U'UVVVr   c                 d   |j         D ]}|j        r|j        p| j                            |j                  }|j        s|j        rt          |j	        d|j        z             |j
        s|                     |           | j                            ||           |                     |           |S )Nz7can not delete variable '%s' referenced in nested scope)r_  rw  re   rG  rx  r  rb   ra   r   r   ignore_nonexistingrb  r  r   rj  s       r   visit_DelStatNodez%ControlFlowAnalysis.visit_DelStatNodeV  s    9 	! 	!C{ 
!	>TX__SX%>%># Eu'9 E#'79>DE E E . %KK$$$	''U3333C    r   c                     | j                             |j                  }|r7|j         }| j                            |t          |j        |          |           |S r   )rG  rx  r  not_noner  r   r   r   )r   rs   re   r   s       r   visit_CArgDeclNodez&ControlFlowAnalysis.visit_CArgDeclNodee  s_    	** 	E"m+KI##mEJ<<eE E Er   c                     | j         j        rh|j        p| j                            |j                  }|r@| j                             ||           || j        v r| j        st          |j
        d           |S )Nz+Cannot read reduction variable in loop body)r  rB   re   rG  rx  r  r   rV  rW  r   r   r   s      r   visit_NameNodez"ControlFlowAnalysis.visit_NameNodem  s    9? 	IJ<$(//$)"<"<E I	((u555DO++D4N+$(GI I I r   c                     | j         j        r4|j        D ],}|                     |           | j         j        s	d|_         n-|S r   )r  rB   r/   rb  is_terminator)r   rs   r   s      r   visit_StatListNodez&ControlFlowAnalysis.visit_StatListNodey  sV    9? 	
  D!!!y )-D&E r   c                 Z    |                      |           |                     |           |S r   )rY  rt   rr   s     r   r=  zControlFlowAnalysis.visit_Node  s/    4   4   r   c                     |S r   rE   rr   s     r   visit_SizeofVarNodez'ControlFlowAnalysis.visit_SizeofVarNode  rr  r   c                     |S r   rE   rr   s     r   visit_TypeidNodez$ControlFlowAnalysis.visit_TypeidNode  rr  r   c                    | j                                         }| j         j        }|j        D ]}| j                             |          }|                     |j                   | j                                          |                     |j                   | j         j        r| j         j                            |           |j	        ra| j                             |           |                     |j	                   | j         j        r| j         j                            |           n|                    |           |j
        r|| j         _        nd | j         _        |S Nr=   )r  rY   rB   
if_clausesr[   rb  	conditionrg  rC   else_clauser-   )r   rs   r   r=   clauses        r   visit_IfStatNodez$ControlFlowAnalysis.visit_IfStatNode  s<   Y''))
o 	6 	6FY((00FKK()))I!!!KK$$$y 6	))*555 	)Iv...KK()))y 6	))*555Z((( 	#(DIOO"DIOr   c                    |                      |           | j                                        }| j        j        }| j                            |          }|                     |j                   | j                                         |                     |j                   | j        j        r| j        j                            |           |                    |           |j	        r|| j        _        nd| j        _        |S )z@Essentially an if-condition that wraps a RaiseStatNode.
        N)
rt   r  rY   rB   r[   rb  r  	exceptionrC   r-   )r   rs   r   r=   s       r   visit_AssertStatNodez(ControlFlowAnalysis.visit_AssertStatNode  s     	4   Y''))
$$V,,DN###	DN###9? 	2IO%%j111$$$ 	#(DIOO"DIOr   c                 v   | j                                         }| j                                         }| j         j                            t          ||                     |j        r|                     |j                   | j                                          |                     |j                   | j         j        	                                 | j         j
        r>| j         j
                            |           | j         j
                            |           |j        ra| j                             |           |                     |j                   | j         j
        r| j         j
                            |           n|                    |           |j        r|| j         _
        nd | j         _
        |S r  )r  r[   rY   rR   ry   r   r  rb  rg  r   rB   rC   r  r-   r   rs   condition_blockr   s       r   visit_WhileStatNodez'ControlFlowAnalysis.visit_WhileStatNode  sx   )--//Y''))
	y_EEFFF> 	(KK'''	DI	9? 	2IO%%o666IO%%j111 	2I777KK()))y 6	))*555%%j111 	#(DIOO"DIOr   c                    d}|j         j        }|j        }|j         j        p| j        }t          |t          j                  rI|j        }|j	        :|j
        r2|                    |j                  }|r|j        r|j        dk    r&t          |j                  dk    r|j        d         }n|j        dk    rt          |j                  dk    r|j        rt          |j                  dk    r|j        d         }|j
        r|                    |          }	|	j        rk|                     |j        d         t          j        |j        dt,          j                  |j         j        	           |j        d         }|j        d         }t          |t          j                  r|j        }|j	        |j
        r|                    |j                  }|r|j        r|j        d
v rd}|j        d d         D ]$}
|                     ||
|j         j        	           %t          |j                  dk    re|                     ||                     t          j        |j        d|j        d         |j        d                             |j         j        	           |s)|                     ||j        |j         j        	           d S d S )NFrH  r   r   rz  rq   PY_SSIZE_T_MAX)valuer   rv   )rangexrangeT+)iteratorsequencer  
expr_scoperG  r   r   SimpleCallNodefunctionr   rw  rx  r  
is_builtinr   r_  ry  r   is_builtin_typer}   IntNoder   r   c_py_ssize_t_typerU  
binop_nodeitem)r   rs   
is_specialr  r  rG  r  re   r  iterator_typerk  s              r   mark_forloop_targetz'ControlFlowAnalysis.mark_forloop_target  s    
=)m&2$(h	 899 	@(H}$)9$

8=11 @ 0 @}
22s8=7I7IQ7N7N#+=#3!+55#hm:L:LPQ:Q:Q!9 @c&+>N>NRS>S>S'/}Q'7H'/ 
@080C0CC0H0H#0#@ !@$($8$8(.A(1(9&*L\?I?[)] )] )]26-2J	 %9 %L %L %L
 .4[^F/7}Q/?Hh	 899 	T(H}$)9$

8=11 T 0 T}(;;;%)
#+=!#4 b bC 00H`0aaaax}--11 009M9M ) 4TX585=]15E5=]15E!G !G:H :H
 ;?-:R 1 T T T  	X   dm>V WWWWW	X 	Xr   c                 ,    |                      |          S r   )visit_ForInStatNoderr   s     r   visit_AsyncForStatNodez*ControlFlowAnalysis.visit_AsyncForStatNode  s    ''---r   c                    | j                                         }| j                                         }| j         j                            t          ||                     |                     |j                   | j                                          t          |t          j
                  r|                     |           nUt          |t          j                  r!|                     |j        |j                   n|                     |j                   t          |t          j                  r!|                     ||j        j                   | j                                          |                     |j                   | j         j                                         | j         j        r| j         j                            |           |j        ra| j                             |           |                     |j                   | j         j        r| j         j                            |           n|                    |           |j        r|| j         _        nd | j         _        |S )N)excluder  )r  r[   rY   rR   ry   r   rb  r  r   r   ForInStatNoder  AsyncForStatNoder}   r  r  ParallelRangeNode_delete_privatesre   rg  r   rB   rC   r  r-   r  s       r   r  z'ControlFlowAnalysis.visit_ForInStatNode  s   )--//Y''))
	y_EEFFFDM"""	dE/00 	.$$T****e455 	.  di8888  --- dE344 	C!!$0A!BBB	DI	 9? 	7IO%%o666 	2I777KK()))y 6	))*555%%j111 	#(DIOO"DIOr   c                 p    |j         D ]-}|r	|j        |ur | j                            ||j                   .d S r   )assigned_nodesre   r  r   )r   rs   r  private_nodes       r   r  z$ControlFlowAnalysis._delete_privates=  sT     / 	J 	JL Jl0??	''l6HIII	J 	Jr   c                 6   | j         }t          |j        d          rut          |          | _         |j        D ]D}d|j        _        |j        |j                 \  }}|r| j                             |j                   E| 	                    |          }|| _         |S )Nre   T)
rV  hasattrr  r+   r  re   rc   r.  r@   r  )r   rs   rV  r  r   	reductions         r   visit_ParallelRangeNodez+ControlFlowAnalysis.visit_ParallelRangeNodeB  s    _
 4;(( 		2!*ooDO $ 3 < <<@"9!%!1,2D!EY <O''(:;;;++D11D$r   c                     |j         D ]}d|j        _        |                     |           |                     |           |                     |           |S r   )r  re   rc   r  rY  )r   rs   r  s      r   visit_ParallelWithBlockNodez/ControlFlowAnalysis.visit_ParallelWithBlockNodeU  sc     / 	= 	=L8<L55d###4   d###r   c                    | j                                         }| j                                         }| j         j                            t          ||                     |                     |j                   |                     |j                   |j	        |                     |j	                   | j                                          | 
                    |j        |j                   |j	        R| 
                    |j        |                     t          j        |j        d|j        |j	                                       | j                                          |                     |j                   | j         j                                         | j         j        r| j         j                            |           |j        ra| j                             |           |                     |j                   | j         j        r| j         j                            |           n|                    |           |j        r|| j         _        nd | j         _        |S )Nr  r  )r  r[   rY   rR   ry   r   rb  bound1bound2stepr}   r  rU  r   r  r   rg  r   rB   rC   r  r-   r  s       r   visit_ForFromStatNodez)ControlFlowAnalysis.visit_ForFromStatNode_  s   )--//Y''))
	y_EEFFFDK   DK   9 KK	"""	T[$+6669   d.B.B$TXsDKKK/M /M N N N 		DI	9? 	7IO%%o666 	2I777KK()))y 6	))*555%%j111 	#(DIOO"DIOr   c                      t          d          )NzGeneric loops are not supported)r   rr   s     r   visit_LoopNodez"ControlFlowAnalysis.visit_LoopNode  s    =>>>r   c                 P    |                      |j        |j        j                   |S r   )r}   rz   	with_node
enter_callrr   s     r   "visit_WithTargetAssignmentStatNodez6ControlFlowAnalysis.visit_WithTargetAssignmentStatNode  s$    TXt~'@AAAr   c                     |                      |j                   |                      |j                   |                      |j                   |S r   )rb  managerr  rg  rr   s     r   visit_WithStatNodez&ControlFlowAnalysis.visit_WithStatNode  sC    DL!!!DO$$$DIr   c                    | j                                         }| j                                          | j                                         }| j         j                            t	          |                     | j                                          | j         j                            |           | j                                          | j         xj        dz  c_        | 	                    |j
                   | j         xj        dz  c_        | j         j                                         | j         j        re|j        r3| j                                          | 	                    |j                   | j         j        r| j         j                            |           |j        D ]}|| j         _        |j        r |j        D ]}| 	                    |           n	 | j                             | j         j                  }| j                                          |j        r|                     |j                   | 	                    |j
                   | j         j        r| j         j                            |           | j         j        r*|                    | j         j        d         j                   |j        r|| j         _        nd | j         _        |S )Nr   r  rv  )r  rY   rS   ry   r   r[   rB   rC   rV   rb  rg  r   r  except_clausespatternr  r}   rT   r-   )r   rs   r   rT   r  r  s         r   visit_TryExceptStatNodez+ControlFlowAnalysis.visit_TryExceptStatNode  s   Y''))
	i((**	##N;$?$?@@@	 		!!+...		!#DI	!#	  """ 9? 	6 .	##%%%D,---y 6	))*555) 	6 	6F)DIO~ %~ ) )GKK(((() ),,DIO,DDKI!!!} 4$$V]333KK$$$y 6	))*5559 	H!!$)"6r":"FGGG 	#(DIOO"DIOr   c                    | j                                         }| j                                         }|| j         _        |                     |j                   | j         j        r@| j         j        r4| j         j                            | j         j        d         j                   | j                                         }|| j         _        |                     |j	                   | j         j        }t          |||          }| j         j                            |           | j         j        r*| j         j        d         j                            |           || j         _        |                    |           | j                                          | j         xj        dz  c_        |                     |j                   | j         xj        dz  c_        | j         j                                         | j         j        r)| j         j        d         j                                         | j         j        rS| j         j                            |           |r&| j                             |          | j         _        nd | j         _        |S )Nrv  r   r  )r  r[   rY   rB   rb  finally_except_clauserS   rC   rT   finally_clauser   ry   rR   rV   rg  r   )r   rs   
body_blockrT   r   r   descrs          r   visit_TryFinallyStatNodez,ControlFlowAnalysis.visit_TryFinallyStatNode  s#   Y((**
 i((**%	D.///9? 	Lty3 	LIO%%di&:2&>&JKKK 	**,,'	D'(((y{M<HH	##E***9? 	9IOB*11%888$	[)))		!#DI	!#	  """9? 	1IOB*..0009? 	'IO%%m444 '"&)"5"5\"5"J"J	"&	r   c                    |                      |           |                     |           | j        j        r4| j        j                            | j        j        d         j                   d | j        _        | j        j        rd|_        |S )Nrv  T)rt   rY  r  rS   rB   rC   rT   rV   rr   s     r   visit_RaiseStatNodez'ControlFlowAnalysis.visit_RaiseStatNode  s    4   4   9 	LIO%%di&:2&>&JKKK	9! 	% $Dr   c                     |                      |           | j        j        r4| j        j                            | j        j        d         j                   d | j        _        |S Nrv  )rt   r  rS   rB   rC   rT   rr   s     r   visit_ReraiseStatNodez)ControlFlowAnalysis.visit_ReraiseStatNode  sW    4   9 	LIO%%di&:2&>&JKKK	r   c                    |                      |           |                     |           t          | j        j        d d d                   }|D ]q}|j        rh| j        j                            |j                   |j        r;| j        j	        }|D ]}|j        r	|j        } n|j                            |            n6r| j        j        r)| j        j                            | j        j	                   d | j        _        |S r  )
rt   rY  iterr  rS   r   rB   rC   r   rU   )r   rs   outer_exception_handlershandlerrU   next_handlers         r   visit_ReturnStatNodez(ControlFlowAnalysis.visit_ReturnStatNode  s   4   4   #'	(<TTrT(B#C#C / 	@ 	@G$ 
	))'*?@@@' ?!%!5J(@ " "'5 ")5)CJ!E" (22:>>>
 y @	))$)*>???	r   c                    | j         j        s|S | j         j        d         }|                     |           |j        d d d         D ]U}|j        rL| j         j                            |j                   |j        r|j                            |j                    n%V| j         j                            |j                   d | j         _        |S r  )	r  rR   rt   rS   r   rB   rC   r   r   r   rs   loopr  s       r   visit_BreakStatNodez'ControlFlowAnalysis.visit_BreakStatNode      y 	Kyr"4   2. 	7 	7I& 	)))*ABBB) F*44T_EEE	 IO%%do666	r   c                    | j         j        s|S | j         j        d         }|                     |           |j        d d d         D ]U}|j        rL| j         j                            |j                   |j        r|j                            |j                    n%V| j         j                            |j                   d | j         _        |S r  )	r  rR   rt   rS   r   rB   rC   r   r   r  s       r   visit_ContinueStatNodez*ControlFlowAnalysis.visit_ContinueStatNode$  r  r   c                     |j         r2| j                            | j        | j        f           |j         | _        |                     |j                   |j         r!| j                                        \  | _        }|S r   )r  rI  ry   rG  r  rb  r  r   r   rs   r$  s      r   visit_ComprehensionNodez+ControlFlowAnalysis.visit_ComprehensionNode5  sn    ? 	'Jtx3444DHDI? 	+*..**KDHar   c                    t          |t          j        t          j        f          s
J |            |j        rQ| j                            | j        | j        f           | 	                    |j                  | _        |j        | _        | 
                    |           |j        r&| j                                        \  | _        | _        |S r   )r   r   IteratorNodeAsyncIteratorNoder  rI  ry   rG  r  rK  rY  r   rr   s     r   visit_ScopedExprNodez(ControlFlowAnalysis.visit_ScopedExprNode?  s     $!79T UVV\\X\\\\? 	'Jtx3444**4?;;DIDH4   ? 	3"&*.."2"2DHdir   c                 f   |                      |d           | j                            |j        |j        | j                            |j        j                             | j        	                    | j        | j        f           |j
        | _        | j                                         |j        r0| j                            |j        t          |j        j                   |                      |d           | j                                         | j                                        \  | _        }|S )N)dict	metaclassmkwbasesclass_result)rg  )rY  r  r}   r  classobjrG  rx  r  rI  ry   r   r[   doc_noder   re   r   r  s      r   visit_PyClassDefNodez(ControlFlowAnalysis.visit_PyClassDefNodeL  s   4 "B 	C 	C 	C	!!$+t}"&(//$+2B"C"C	E 	E 	E
48TY/000:	= 	YI%%dm]DMDWXXX4+++	jnn&&!r   c                     | j                             |j        | j        f           |                     |           | j                                          |S r   )rI  ry   r   r  rY  r   rr   s     r   visit_CClassDefNodez'ControlFlowAnalysis.visit_CClassDefNode[  sL    
4:ty12224   
r   c                     |j         j        r |                     |j         t                     |                     |           |S r   )operandrw  r}   r   rY  rr   s     r   visit_AmpersandNodez'ControlFlowAnalysis.visit_AmpersandNodeb  s@    < 	>  }===4   r   r!   r   )1r"   r#   r$   rK  r\  rl  ro  rq  rt  r}   rt   r  r  r?  rC  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  rE   r   r   rE  rE    s           20 0 0d, , ,    "" "" "" ""H* * *
  I I I  
          
 
 
    
      4  (  <3X 3X 3Xj. . .* * *XJ J J J
  &  # # #J? ? ?    1 1 1f% % %N      .  "  "            r   rE  )+
__future__r   cythondeclareobjectr   r   r   r   r   r   Visitorr	   r
   Errorsr   r   r   ExprNoder   unspecified_typer   r(   rG   rJ   rN   r   r   rx   r   r   r   r   r   r   r   r   r   r  r  r7  r9  rE  rE   r   r   <module>r     s   ' & & & & &  &F&&66#66#6; ; ; ;
                               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1* * * * *I& * * * j9::4  4  4  4  4 6 4  4  4 n           V   
~* ~* ~* ~* ~*& ~* ~* ~*B       ) ) ) ) )V ) ) )" " " " "V " " "@    ~   $    ~       >   * * * * *F * * *B B B B Bf B B B	F 	F 	F 	F 	FF 	F 	F 	F    t   >&= &= &= &= &= &= &= &=R       <) ) ) ) ) ) ) )&F8 F8 F8R5 5 5 5 5+ 5 5 5 ~
 ~
 ~
 ~
 ~
/ ~
 ~
 ~
 ~
 ~
r   