
    -Ph                        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          Z G d de          Z G d d          Z G d d          Z G d d          Z G d d          Z G d d          Z G d de          Z G d de          Z G d d e          Z G d! d"          Z G d# d$          Z G d% d&          Z  G d' d(e!          Z" G d) d*          Z# G d+ d,          Z$ G d- d.          Z%e j&        d/ed0e'fd1            Z( G d2 d3e
          Z) G d4 d5e          Z*dS )6    N)
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                 f    t                                          |           || _        || _        d S N)super__init__type_may_be_none)selfr   may_be_nonepos	__class__s       [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/FlowControl.pyr   zTypedExprNode.__init__   s0    	'    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__9   sc    uu
uu
r   c                 "    | j          o| j         S r   )r.   r-   r   s    r   emptyzControlBlock.emptyH   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.detachK   s    ] 	' 	'EM  &&&&l 	) 	)FO""4((((r   c                 n    | j                             |           |j                            |            d S r   )r+   addr,   r   blocks     r   	add_childzControlBlock.add_childT   s4    %   $r   N)r!   r"   r#   __doc__r   r7   r=   rB    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   rD   r   s    r   r7   zExitBlock.empty\   s    ur   N)r!   r"   r#   rC   r7   rD   r   r   rF   rF   Y   s)        %%    r   rF   c                       e Zd Zd ZdS )AssignmentListc                     g | _         d S r   )r.   r   s    r   r   zAssignmentList.__init__a   s    


r   Nr!   r"   r#   r   rD   r   r   rI   rI   `   s#            r   rI   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_pointrF   
exit_pointr?   rA   in_try_blockr   s    r   r   zControlFlow.__init__r   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'   rO   r?   rB   r   r<   rA   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'   rO   r?   rB   rA   rW   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         rL|j        rE|j        j        s7|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_cython_lock_typeis_cpp_classis_cpp_optionalrc   s     r   is_statically_assignedz"ControlFlow.is_statically_assigned   sv    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   )rA   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)rA   re   NameAssignmentr.   appendr/   rP   r?   )r   lhsrhsrd   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   )rA   re   Argumentr.   ry   r/   rP   r?   )r   rz   r{   rd   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   )	rA   re   NameDeletionr.   ry   Uninitializedr/   rP   r?   )r   rs   rd   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   )rA   re   r.   ry   NameReferencerP   r?   r   rs   rd   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)rS   r*   popr?   r+   rO   r=   r9   r7   r,   rB   )r   queuevisitedrootr;   unreachablerA   r<   s           r   	normalizezControlFlow.normalize   sJ   !"%% 	%99;;DKK % %''IIe$$$  	%  ;0  	 	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)assmtsrP   rI   maskbitrO   r.   
isinstancerx   rd   ry   r/   itemsr   r3   r4   r2   r0   valuesrS   )r   r   rd   r   rA   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?   StaticAssignmentr`   Unknownr   r.   )r   istaterd   retr   assmts         r   map_onezControlFlow.map_one  s    ee!%U!3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)rO   r,   r2   r4   r3   r1   )r   dirtyrA   r1   r<   r2   s         r   reaching_definitionsz ControlFlow.reaching_definitions   s    
  
	*E * *#m / /Fv.GG#u|m3u{Bu~-- E '!)  
	* 
	* 
	* 
	* 
	*r   r   )r!   r"   r#   rC   r   rX   rZ   re   ro   rt   r}   r   r   r   r   r   r   r   rD   r   r   rM   rM   e   s        
 

 
 
	 	 	 	   . . .	 	 	3 3 3
$ $ $ $$ $ $$ $ $$ $ $# # #8$; $; $;L  "* * * * *r   rM   c                       e Zd Zd ZdS )	LoopDescrc                 0    || _         || _        g | _        d S r   )
next_block
loop_blockrR   )r   r   r   s      r   r   zLoopDescr.__init__4  s    $$r   NrK   rD   r   r   r   r   3  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   )rS   finally_enterfinally_exit)r   rS   r   r   s       r   r   zExceptionDescr.__init__B  s     &*(r   r    )r!   r"   r#   rC   r   rD   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{   rd   r   refsr_   is_deletioninferred_typerw   )r   rz   r{   rd   rw   s        r   r   zNameAssignment.__init__I  s`    <55CL
7EE	 !"r   c                 0    | j         j        d| j        dS Nz(entry=)r   r!   rd   r   s    r   __repr__zNameAssignment.__repr__W      !%!8!8!8$***EEr   c                 p    | j                             | j        p| j        j                  | _        | j        S r   )r{   
infer_typerw   rd   scoper   r   s    r   r   zNameAssignment.infer_typeZ  s/    !X001S4:CSTT!!r   c                 X    | j                             | j        p| j        j                  S r   )r{   type_dependenciesrw   rd   r   r   s    r   r   z NameAssignment.type_dependencies^  s$    x))$.*LDJ<LMMMr   c                 J    | j         j        j        s| j         j        S | j        S r   )rd   r   is_unspecifiedr   r   s    r   r   zNameAssignment.typea  s$    z- 	#:?"!!r   r   )	r!   r"   r#   r   r   r   r   propertyr   rD   r   r   rx   rx   H  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	                                          |||           d S )NFr   r   )r   is_pyobjectr   r   r   r   )r   rd   r   rz   r   s       r   r   zStaticAssignment.__init__j  s`    z% 	KKKJKUY@ @ @c5)))))r   c                     | j         j        S r   )rd   r   r   s    r   r   zStaticAssignment.infer_types  s    zr   c                     dS )NrD   rD   r   s    r   r   z"StaticAssignment.type_dependenciesv  s    rr   )r!   r"   r#   rC   r   r   r   r$   r%   s   @r   r   r   h  s\        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{   rd   s       r   r   zArgument.__init__{  s'    c3666r   NrK   rD   r   r   r   r   z  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   rd   s      r   r   zNameDeletion.__init__  s*    c3666r   c                     | j                             | j        j                  }|j        s+|                    | j        j                  rt          j        S || _        |S r   )	r{   r   rd   r   r   can_coerce_to_pyobjectr   py_object_typer   )r   r   s     r   r   zNameDeletion.infer_type  sY    ++DJ,<==) 	-!889IJJ	-,,*r   N)r!   r"   r#   r   r   rD   r   r   r   r     s2                 r   r   c                       e Zd ZdZdS )r   zDefinitely not initialised yet.Nr!   r"   r#   rC   rD   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   rD   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   rd   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   rD   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                 P   t           |v r+|                    t                      d| _        |sd| _        nEt          |v r"|                    t                     d| _        nt          |          dk    rd| _        t                                          d |D                        d S )NTr   c                 .    g | ]}|j         t          u|S rD   )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   stater   s     r   r   zControlFlowState.__init__  s    E!!MM-(((!%D '"&MM'"""!%D5zzQ!%<<<<<	> 	> 	> 	> 	>r   c                     | d         S r)   rD   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   r@   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 rD   )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   rA   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#   rC   r   r?   r   r   r   r  rD   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 r7   z  z	 [label="z"];
z -> z;
z }
)r   r  r  rO   r   r.   r   rx   rd   r   r   r   r   r  r+   )	r   r   ctxr  rA   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#   rC   r   r   rD   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#   rC   r   r   r   r#  rD   r   r   r  r    sV        99  0 0 01 1 1) ) ) ) )r   r  r  compiler_directivesc                 
   |                                   |                                  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*   rO   r1   r.   r   rd   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   r`   r  r   scope_predefined_names
allow_nullr^   r   r"  ra   rb   r   r   r   r   r   r   r_   cf_usedrP   
startswithr#  r   )r  r$  assignments
referencesassmt_nodesrA   r5   r   i_assmtsr   r   warn_maybe_uninitializedwarn_unused_resultwarn_unusedwarn_unused_argr  rs   rd   msgs                      r   check_definitionsr8    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                 V    t                                                       g | _        d S r   )r   r   r/  )r   r   s    r   r   zAssignmentCollector.__init__  s'    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@  rD  r$   r%   s   @r   r:  r:    se            . . .6 6 65 5 5 5 5 5 5r   r:  c                   8   e Zd Zd Zd Zd Zd Zd Zd Zd3d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d Zd4d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/ Z0d0 Z1d1 Z2d2 Z3dS )5ControlFlowAnalysisc                 n    || j         k    r| j        S t          | j                  D ]\  }}||u r|c S J r   )envr  reversedstack)r   rH  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wmodule)r  )current_directivesr   gv_ctxOptimizerO  constant_folderr*   
reductionsin_inplace_assignmentr   rH  rM   r  rJ  r   r   r   object_exprvisitchildrenr8  openr   )r   rs   
dot_outputrO  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"""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)
decoratorsFrP  )'argsdefaultrZ  rJ  ry   rH  r  local_scoperM   rP   r   re   r?   rt   rZ   _visitstar_argr   r   r   
tuple_typerd   starstar_arg	dict_typebodyis_generatorgbodyrA   rB   rT   r   r8  rS  rO   rS   rT  r  r  r   r   rs   argrd   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   )usedrm  rr   s     r   visit_DefNodez!ControlFlowAnalysis.visit_DefNode  s    	%%d+++r   c                     |S r   rD   rr   s     r   visit_GeneratorBodyDefNodez.ControlFlowAnalysis.visit_GeneratorBodyDefNode      r   c                     |S r   rD   rr   s     r   visit_CTypeDefNodez&ControlFlowAnalysis.visit_CTypeDefNode  rs  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 ]g\  }}|j        r"t#          t$          j        d|j                  }n!|| j        u r|}n|                    |          }|                     |||           hn|                     |           | j         j        rQ| j         j        d         }| j         j                            |j                   | j                                          d S d S )Nrv   Fr   )r  rA   rR   rB   rS   rZ   rY  is_namerd   rH  lookupr  r}   is_sequence_constructor	enumerater`  
is_starredr   r   	list_typer   inferable_item_noderc  )	r   rz   r{   rw   	exc_descrrd   r   rl  	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-- J J3> ; -g.?UX[X_ ` ` `IID,,, #II # 7 7 : :I$$S)y$IIIIJ 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.rN  N)rS  r  rt   rr   s     r   rt   z!ControlFlowAnalysis.mark_position:  s9    "#<= 	*I##D)))))	* 	*r   c                     |j         D ] \  }}|dk    r|                     |           !|                     |           |S )N*)r   r}   rZ  )r   rs   r  targets       r   visit_FromImportStatNodez,ControlFlowAnalysis.visit_FromImportStatNode?  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_AssignmentNodeF  s    :T$ZZGHHHr   c                 z    |                      |j                   |                     |j        |j                   |S r   )rc  r{   r}   rz   rr   s     r   r@  z.ControlFlowAnalysis.visit_SingleAssignmentNodeI  s5    DHTXtx000r   c                     |                      |j                   |j        D ]}|                     ||j                   |S r   )rc  r{   rB  r}   rC  s      r   rD  z0ControlFlowAnalysis.visit_CascadedAssignmentNodeN  sG    DH= 	0 	0C  dh////r   c                     t                      }|                    |           |j        D ]\  }}|                     |           |j        D ]\  }}|                     ||           |S r   )r:  rZ  r/  rc  r}   )r   rs   	collectorrz   r{   s        r   visit_ParallelAssignmentNodez0ControlFlowAnalysis.visit_ParallelAssignmentNodeT  s    '))	%%%!- 	 	HCKK!- 	+ 	+HC  c****r   c                     d| _         |                     |           d| _         |                     |j        |                     |                                                     |S rg   )rX  rZ  r}   rz   rV  create_binop_noderr   s     r   visit_InPlaceAssignmentNodez/ControlFlowAnalysis.visit_InPlaceAssignmentNode]  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`  rx  rd   rH  ry  r  ra   r`   r   r   ignore_nonexistingrc  r  r   rk  s       r   visit_DelStatNodez%ControlFlowAnalysis.visit_DelStatNoded  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   )rH  ry  r  not_noner  r   r   r   )r   rs   rd   r   s       r   visit_CArgDeclNodez&ControlFlowAnalysis.visit_CArgDeclNodes  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  rA   rd   rH  ry  r  r   rW  rX  r   r   r   s      r   visit_NameNodez"ControlFlowAnalysis.visit_NameNode{  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  rA   r.   rc  is_terminator)r   rs   r   s      r   visit_StatListNodez&ControlFlowAnalysis.visit_StatListNode  sV    9? 	
  D!!!y )-D&E r   c                 Z    |                      |           |                     |           |S r   )rZ  rt   rr   s     r   r>  zControlFlowAnalysis.visit_Node  s/    4   4   r   c                     |S r   rD   rr   s     r   visit_SizeofVarNodez'ControlFlowAnalysis.visit_SizeofVarNode  rs  r   c                     |S r   rD   rr   s     r   visit_TypeidNodez$ControlFlowAnalysis.visit_TypeidNode  rs  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  rX   rA   
if_clausesrZ   rc  	conditionrh  rB   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  rX   rA   rZ   rc  r  	exceptionrB   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  rZ   rX   rQ   ry   r   r  rc  rh  r   rA   rB   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 )NFrI  r   r   r{  rq   PY_SSIZE_T_MAX)valuer   rv   )rangexrangeT+)iteratorsequencer  
expr_scoperH  r   r   SimpleCallNodefunctionr   rx  ry  r  
is_builtinr   r`  rz  r   is_builtin_typer}   IntNoder   r   c_py_ssize_t_typerV  
binop_nodeitem)r   rs   
is_specialr  r  rH  r  rd   r  iterator_typerl  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                    |j         }|j        d d         D ]}|                     ||           t          |j                  dk    rY|                     ||                     t          j        |j        d|j        d         |j        d                                        |j        s|                     |           d S d S )Nrq   r  r   )r  r`  r}   r   rV  r   r  r   )r   rs   r  rl  s       r    mark_parallel_forloop_assignmentz4ControlFlowAnalysis.mark_parallel_forloop_assignment  s    9RaR= 	. 	.C  ----ty>>A  )=)=$TX(+(,	!(,	!6 6*7 *7 8 8 8
 y 	)  (((((	) 	)r   c                 ,    |                      |          S r   )visit_ForInStatNoderr   s     r   visit_AsyncForStatNodez*ControlFlowAnalysis.visit_AsyncForStatNode*  s    ''---r   c                 6   | j                                         }| j                                         }| j         j                            t          ||                     |                     |j                   | j                                          t          |t          j
                  r|                     |           nt          |t          j                  r!|                     |j        |j                   nGt          |t          j                  r|                     |           nJ t%          |                      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 )NF)excluder  )r  rZ   rX   rQ   ry   r   rc  r  r   r   ForInStatNoder  AsyncForStatNoder}   r  r  ParallelRangeNoder  r   _delete_privatesrd   rh  r   rA   rB   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e566 	%11$7777$$t**$$$ 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_nodesrd   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 )Nrd   T)
rW  hasattrr  r*   r  rd   rb   r/  r?   r  )r   rs   rW  r  r   	reductions         r   visit_ParallelRangeNodez+ControlFlowAnalysis.visit_ParallelRangeNode`  s    _
 4;(( 		2!*ooDO $ 3 < <<@"9!%!1,2D!EY <O''(:;;;++D11D$r   c                     |j         D ]}d|j        _        |                     |           |                     |           |                     |           |S r   )r  rd   rb   r  rZ  )r   rs   r  s      r   visit_ParallelWithBlockNodez/ControlFlowAnalysis.visit_ParallelWithBlockNodes  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  rZ   rX   rQ   ry   r   rc  bound1bound2stepr}   r  rV  r   r  r   rh  r   rA   rB   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   )rc  managerr  rh  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  rw  )r  rX   rR   ry   r   rZ   rA   rB   rU   rc  rh  r   r  except_clausespatternr  r}   rS   r,   )r   rs   r   rS   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 )Nrw  r   r  )r  rZ   rX   rA   rc  finally_except_clauserR   rB   rS   finally_clauser   ry   rQ   rU   rh  r   )r   rs   
body_blockrS   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 )Nrw  T)rt   rZ  r  rR   rA   rB   rS   rU   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 Nrw  )rt   r  rR   rA   rB   rS   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   rZ  iterr  rR   r   rA   rB   r   rT   )r   rs   outer_exception_handlershandlerrT   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  rQ   rt   rR   r   rA   rB   r   r   r   rs   loopr  s       r   visit_BreakStatNodez'ControlFlowAnalysis.visit_BreakStatNode1      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  rQ   rt   rR   r   rA   rB   r   r   r  s       r   visit_ContinueStatNodez*ControlFlowAnalysis.visit_ContinueStatNodeB  r  r   c                     |j         r2| j                            | j        | j        f           |j         | _        |                     |j                   |j         r!| j                                        \  | _        }|S r   )r  rJ  ry   rH  r  rc  r  r   r   rs   r&  s      r   visit_ComprehensionNodez+ControlFlowAnalysis.visit_ComprehensionNodeS  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  rJ  ry   rH  r  rL  rZ  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)rh  )rZ  r  r}   r  classobjrH  ry  r  rJ  ry   r   rZ   doc_noder   rd   r   r  s      r   visit_PyClassDefNodez(ControlFlowAnalysis.visit_PyClassDefNodej  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   )rJ  ry   r   r  rZ  r   rr   s     r   visit_CClassDefNodez'ControlFlowAnalysis.visit_CClassDefNodey  sL    
4:ty12224   
r   c                     |j         j        r |                     |j         t                     |                     |           |S r   )operandrx  r}   r   rZ  rr   s     r   visit_AmpersandNodez'ControlFlowAnalysis.visit_AmpersandNode  s@    < 	>  }===4   r   c                    t          |j                  dk    sJ | j                                        }| j        j        }|                     |j                   | j                                         |                     |j                   | j        j        r| j        j        	                    |           |	                    |           |j
        r|| j        _        nd | j        _        |S r   )r   subexprsr  rX   rA   rc  operand1rZ   operand2rB   r,   r  s       r   visit_BoolBinopNodez'ControlFlowAnalysis.visit_BoolBinopNode  s    4=!!Q&&&&Y''))
DM"""	DM"""9? 	2IO%%j111$$$ 	#(DIOO"DIOr   c                 t   t          |j                  dk    sJ |                     |j                   | j        j        }| j                                        }| j                                         |                     |j                   | j        j        r| j        j        	                    |           | j                            |           |                     |j
                   | j        j        r| j        j        	                    |           |j        r|| j        _        nd | j        _        |S )N   r  )r   r  rc  testr  rA   rX   rZ   true_valrB   	false_valr,   )r   rs   r<   r   s       r   visit_CondExprNodez&ControlFlowAnalysis.visit_CondExprNode  s   4=!!Q&&&&DIY''))
	DM"""9? 	2IO%%j111	6***DN###9? 	2IO%%j111 	#(DIOO"DIOr   r    r   )4r!   r"   r#   rL  r]  rm  rp  rr  ru  r}   rt   r  r  r@  rD  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!  rD   r   r   rF  rF    s           20 0 0d, , ,    "" "" "" ""H* * *
  I I I  
          
 
 
    
      4  (  <3X 3X 3Xj) ) ). . ., , ,\J J J J
  &  # # #J? ? ?    1 1 1f% % %N      .  "  "            ,    r   rF  )+cythondeclareobjectr   r   r   r   r   r   Visitorr   r	   Errorsr   r   r
   ExprNoder   unspecified_typer   r'   rF   rI   rM   r   r   rx   r   r   r   r   r   r   r   r   r   r  r  cfuncr
  r8  r:  rF  rD   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  4  4  4 n              
K* K* K* K* K* K* K* K*\       ) ) ) ) ) ) ) )" " " " " " " "@    ~   $    ~       >   * * * * * * * *B B B B B B B B	F 	F 	F 	F 	F 	F 	F 	F    t   >&= &= &= &= &= &= &= &=R       <) ) ) ) ) ) ) )& H8K H8d H8 H8 H8 H8V5 5 5 5 5+ 5 5 5 x x x x x/ x x x x xr   