
    ڏDj                        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 jL                  d/ed0e'fd1       Z( G d2 d3e
      Z) G d4 d5e      Z*y)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   c                 @    t         |   |       || _        || _        y N)super__init__type_may_be_none)selfr   may_be_nonepos	__class__s       _C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/FlowControl.pyr   zTypedExprNode.__init__   s    	'    c                      | j                   dk7  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      s    (
*r   r   c                   0    e Zd ZdZd Zd Zd Zd ZddZy)	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| _        y 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   sW    u
u
r   c                 :    | j                    xr | j                   S r   )r.   r-   r   s    r   emptyzControlBlock.emptyH   s    JJ5t~~#56r   c                    | j                   D ]  }|j                  j                  |         | j                  D ]  }|j                   j                  |         | j                  j                          | j                   j                          y)z'Detach block from parents and children.N)r+   r,   removeclear)r   childparents      r   detachzControlBlock.detachK   sl    ]] 	'EMM  &	'll 	)FOO""4(	)r   c                 p    | j                   j                  |       |j                  j                  |        y r   )r+   addr,   r   blocks     r   	add_childzControlBlock.add_childT   s&    % $r   Nc                    |
t               }t        d|z   |  d| |v rdnd        | |v ry | j                  D ]  }t        d|dz   z   d|         |j                  |        | j                  D ]  }|j                  |dz   |        y )N * r   -)r*   printr.   r?   r+   )r   levelseenstatr;   s        r   rH   zControlBlock.printX   s    <5DUD6$$,3B"?@A4<JJ 	-DS%']O1TF+,	-]] 	'EKKa&	'r   )r   N)	r!   r"   r#   __doc__r   r7   r=   rB   rH    r   r   r'   r'   "   s     ,7 
'r   r'   c                       e Zd ZdZd Zy)	ExitBlockzNon-empty exit point block.c                      yr   rM   r   s    r   r7   zExitBlock.emptyh   s    r   N)r!   r"   r#   rL   r7   rM   r   r   rO   rO   e   s
    %r   rO   c                       e Zd Zd Zy)AssignmentListc                     g | _         y r   )r.   r   s    r   r   zAssignmentList.__init__m   s	    
r   Nr!   r"   r#   r   rM   r   r   rR   rR   l   s    r   rR   c                   j    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y)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                         | j                  | _
        d| _        y r)   )r*   blocksentriesloops
exceptionsr'   entry_pointrO   
exit_pointr?   rA   in_try_blockr   s    r   r   zControlFlow.__init__~   s^    eu
'>#+(%%
r   Nc                 v    t               }| j                  j                  |       |r|j                  |       |S )zoCreate floating block linked to `parent` if given.

           NOTE: Block is NOT added to self.blocks
        )r'   rX   r?   rB   r   r<   rA   s      r   newblockzControlFlow.newblock   s1    
 U#r   c                     t               }| j                  j                  |       |r|j                  |       n'| j                  r| j                  j                  |       || _        | j                  S )z|Create block children block linked to current or `parent` if given.

           NOTE: Block is added to self.blocks
        )r'   rX   r?   rB   rA   r`   s      r   	nextblockzControlFlow.nextblock   sV    
 U#ZZJJ  '
zzr   c                     |j                   ry|j                  xsD |j                  xs6 |j                  xs( |j                  xs |j
                  xs |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   s\     -%"7"7 -5<< -""-&+&6&6-,,	.r   c                 *   |j                   r|j                  r{|j                  j                  sd|j                  j                  sN|j                  j
                  s8|j                  j                  s"|j                  j                  r|j                  syyNTF)	rf   is_variabler   is_struct_or_union
is_complexis_arrayis_cython_lock_typeis_cpp_classis_cpp_optionalrl   s     r   is_statically_assignedz"ControlFlow.is_statically_assigned   s`    NNu00..&&$$//**))%2G2Gr   c                     | j                   r3| j                   j                  j                  |j                  dd        yy)z0Mark position, will be used to draw graph nodes.N   )rA   r-   r?   r   r   nodes     r   mark_positionzControlFlow.mark_position   s0    ::JJ  $$TXXbq\2 r   c                    | j                   r{| j                  |      rit        ||||      }| j                   j                  j	                  |       || j                   j
                  |<   | j                  j                  |       y y y )N	rhs_scope)rA   rn   NameAssignmentr.   appendr/   rY   r?   )r   lhsrhsrm   r   
assignments         r   mark_assignmentzControlFlow.mark_assignment   sg    ::$//%0'S%9MJJJ##J/$.DJJNN5!LLU#	 1:r   c                    | j                   ry| j                  |      rgt        |||      }| j                   j                  j	                  |       || j                   j
                  |<   | j                  j                  |       y y y r   )rA   rn   Argumentr.   r   r/   rY   r?   )r   r   r   rm   r   s        r   mark_argumentzControlFlow.mark_argument   se    ::$//%0!#sE2JJJ##J/$.DJJNN5!LLU#	 1:r   c                    | j                   r|| j                  |      rjt        ||      }| j                   j                  j	                  |       t
        | j                   j                  |<   | j                  j                  |       y y y r   )	rA   rn   NameDeletionr.   r   Uninitializedr/   rY   r?   )r   r|   rm   r   s       r   mark_deletionzControlFlow.mark_deletion   sc    ::$//%0%dE2JJJ##J/$1DJJNN5!LLU#	 1:r   c                     | j                   r]| j                  |      rK| j                   j                  j                  t	        ||             | j
                  j                  |       y y y r   )rA   rn   r.   r   NameReferencerY   r?   r   r|   rm   s      r   mark_referencezControlFlow.mark_reference   sN    ::$//%0JJ##M$$>? LLU# 1:r   c                 P   | j                   h}t               }|rK|j                         }|j                  |       |j                  D ]  }||vs|j                  |        |rK| j
                  |z
  }|D ]  }|j                           |j                  | j                          |D ]g  }|j                         s|j                  D ]$  }|j                  D ]  }|j                  |        & |j                          |j                  |       i | xj
                  |z  c_        y)z%Delete unreachable and orphan blocks.N)r\   r*   popr?   r+   rX   r=   r9   r7   r,   rB   )r   queuevisitedrootr;   unreachablerA   r<   s           r   	normalizezControlFlow.normalize   s   !!"%99;DKK %'IIe$%   ;;0  	ELLN	 	t''(  	'E{{}#mm 0F!& 0((/00 &	' 	{"r   c                 f   i | _         d}| j                  D ].  }t               }|x|_        |_        || j                   |<   |dz  }0 | j
                  D ]y  }|j                  D ]h  }t        |t              s||_        | j                   |j                     }|j                  j                  |       |xj                  |z  c_        |dz  }j { | j
                  D ]  }|j                  j                         D ]z  \  }}| 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_        0  | j                   j%                         D ]+  }| j&                  xj                  |j                  z  c_        - | j&                  j                  | j&                  _        y)z+Set initial state, map assignments to bits.r   N)assmtsrY   rR   maskbitrX   r.   
isinstancer   rm   r   r/   itemsr   r3   r4   r2   r0   valuesr\   )r   r   rm   r   rA   rK   s         r   
initializezControlFlow.initialize   s    \\ 	E#%F'**FK&*!'DKKAIC		 [[ 	E dN3"DH![[4FLL''-KK3&KAIC	 [[ 
	7E$yy0 ,tU+=(KK6::-KKK488+K+, #[[EN 7E 2 6 667
	7 kk((* 	1F""fjj0"	1$($4$4$:$:!r   c                    t               }| j                  |   }||j                  z  rc| j                  |      r|j	                  t        |             n7|j                  r|j	                  t               n|j	                  t               |j                  D ]#  }||j                  z  s|j	                  |       % |S r   )
r*   r   r   rx   r?   StaticAssignmentri   Unknownr   r.   )r   istaterm   retr   assmts         r   map_onezControlFlow.map_one  s    e!%U!3FJJ**51(/0## & \\ 	E		!	 
r   c                     d}|rud}| j                   D ]`  }d}|j                  D ]  }||j                  z  } ||j                   z  |j                  z  }||j                  k7  rd}||_        ||_        b |rtyy)z(Per-block reaching definitions analysis.TFr   N)rX   r,   r2   r4   r3   r1   )r   dirtyrA   r1   r<   r2   s         r   reaching_definitionsz ControlFlow.reaching_definitions,  s    
 E *#mm /Fv.G/#u||m3u{{Bu~~- E '!)* r   r   )r!   r"   r#   rL   r   ra   rc   rn   rx   r}   r   r   r   r   r   r   r   r   rM   r   r   rV   rV   q   sN    

	.	3
$$$$#8$;L"*r   rV   c                       e Zd Zd Zy)	LoopDescrc                 .    || _         || _        g | _        y r   )
next_block
loop_blockr[   )r   r   r   s      r   r   zLoopDescr.__init__@  s    $$r   NrT   rM   r   r   r   r   ?  s    r   r   c                       e Zd ZdZddZy)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                 .    || _         || _        || _        y r   )r\   finally_enterfinally_exit)r   r\   r   r   s       r   r   zExceptionDescr.__init__N  s    &*(r   r    )r!   r"   r#   rL   r   rM   r   r   r   r   F  s    )r   r   c                   6    e Zd ZddZd Zd Zd Zed        Zy)r   Nc                     |j                   t               |_         || _        || _        || _        |j
                  | _        t               | _        d| _        d| _        d | _	        || _
        y r   )cf_stater*   r   r   rm   r   refsrh   is_deletioninferred_typer   )r   r   r   rm   r   s        r   r   zNameAssignment.__init__U  s^    <<5CL
77E	 ! #r   c                 N    | j                   j                  d| j                  dS Nz(entry=)r   r!   rm   r   s    r   __repr__zNameAssignment.__repr__d      !%!8!8$**EEr   c                     | j                   j                  | j                  xs | j                  j                        | _        | j
                  S r   )r   
infer_typer   rm   scoper   r   s    r   r   zNameAssignment.infer_typeg  s8    !XX001S4::CSCST!!!r   c                 |    | j                   j                  | j                  xs | j                  j                        S r   )r   type_dependenciesr   rm   r   r   s    r   r   z NameAssignment.type_dependenciesk  s*    xx))$..*LDJJ<L<LMMr   c                     | j                   j                  j                  s| j                   j                  S | j                  S r   )rm   r   is_unspecifiedr   r   s    r   r   zNameAssignment.typen  s-    zz--::??"!!!r   r   )	r!   r"   r#   r   r   r   r   propertyr   rM   r   r   r   r   T  s,    #F"N " "r   r   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        |   |||       y )NFr   r   )r   is_pyobjectr   r   r   r   )r   rm   r   r   r   s       r   r   zStaticAssignment.__init__w  sE    zz%%KKJJKUYY@c5)r   c                 .    | j                   j                  S r   )rm   r   r   s    r   r   zStaticAssignment.infer_type  s    zzr   c                      y)NrM   rM   r   s    r   r   z"StaticAssignment.type_dependencies  s    r   )r!   r"   r#   rL   r   r   r   r$   r%   s   @r   r   r   u  s    A*r   r   c                       e Zd Zd Zy)r   c                 B    t         j                  | |||       d| _        y NT)r   r   rh   )r   r   r   rm   s       r   r   zArgument.__init__  s    c36r   NrT   rM   r   r   r   r     s    r   r   c                       e Zd Zd Zd Zy)r   c                 B    t         j                  | |||       d| _        y r   )r   r   r   )r   r   rm   s      r   r   zNameDeletion.__init__  s    c36r   c                     | j                   j                  | j                  j                        }|j                  s5|j                  | j                  j                        rt        j                  S || _        |S r   )	r   r   rm   r   r   can_coerce_to_pyobjectr   py_object_typer   )r   r   s     r   r   zNameDeletion.infer_type  s[    ++DJJ,<,<=))!889I9IJ,,,*r   N)r!   r"   r#   r   r   rM   r   r   r   r     s     r   r   c                       e Zd ZdZy)r   zDefinitely not initialised yet.Nr!   r"   r#   rL   rM   r   r   r   r     s    )r   r   c                       e Zd ZdZy)r   z7Coming from outer closure, might be initialised or not.Nr   rM   r   r   r   r     s    Ar   r   c                       e Zd Zd Zd Zy)r   c                 x    |j                   t               |_         || _        || _        |j                  | _        y r   )r   r*   r|   rm   r   r   s      r   r   zNameReference.__init__  s.    == EDM	
88r   c                 N    | j                   j                  d| j                  dS r   r   r   s    r   r   zNameReference.__repr__  r   r   N)r!   r"   r#   r   r   rM   r   r   r   r     s    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&|j                  t                d| _        |sBd| _        n:t        |v r|j                  t               d| _        nt        |      dk(  rd| _        t        | !  |D cg c]  }|j                  t        us| c}       y c c}w )NTr   )r   discardcf_maybe_null
cf_is_nullr   len	is_singler   r   r   r   )r   stateir   s      r   r   zControlFlowState.__init__  s    E!MM-(!%D"&MM'"!%D5zQ!%<1m!;Q<	><s   7BBc                     | d   S r)   rM   r   s    r   onezControlFlowState.one  s    Awr   )	r!   r"   r#   r   r   r   r   r   r$   r%   s   @r   r   r     s     MJI> r   r   c                   6    e Zd ZdZd Zd Zd Zd Zd	dZd Z	y)
	GVContextzGraphviz subgraph object.c                 <    i | _         d| _        g | _        i | _        y r)   )blockidsnextidr+   sourcesr   s    r   r   zGVContext.__init__  s    r   c                 :    | j                   j                  |       y r   )r+   r   )r   r;   s     r   r?   zGVContext.add  s    U#r   c                     || j                   vr1d| j                  z  | j                   |<   | xj                  dz  c_        | j                   |   S )Nzblock%dr   )r   r   r@   s     r   nodeidzGVContext.nodeid  sB    %#,t{{#:DMM% KK1K}}U##r   c                 |   |j                   syt        |j                         }t        |j                         }|d   }|| j                  vr&t	        |j                               | j                  |<   | j                  |   }dj                  ||d   dz
  |d    D cg c]  }|j                          c}      S c c}w )NrF   r   \nr   )r-   minmaxr   list	get_linesjoinstrip)r   rA   startstopsrcdescrlinesls          r   extract_sourceszGVContext.extract_sources  s    EOO$5??#84<<'%)(*<*<*>%?DLL"X&zzeE!HqLa.IJ1779JKKJs   B9c                     |j                  d|z         |j                  d       | j                  D ]  }|j                  || |        |j                  d       y)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  sO    
!D()
'(]] 	2ELLT=1	2
r   c                 F    |j                  dd      j                  dd      S )N"z\"
r   )replace)r   texts     r   escapezGVContext.escape  s     ||C'//e<<r   NF)
r!   r"   r#   rL   r   r?   r   r   r  r  rM   r   r   r   r     s$    #$$	L=r   r   c                       e Zd ZdZd ZddZy)GVzGraphviz DOT renderer.c                      || _         || _        y r   )r  flow)r   r  r  s      r   r   zGV.__init__  s    		r   c           
      T   |j                  d| j                  z         | j                  j                  D ]  }|j	                  |      }|r|j
                  D ]  }t        |t              r?|d|j                  j                  d|j                  rdndd|j                  d   dz  }Rt        |t              sc|j                  sp|d|j                  j                  d	|j                  d   dz  } |sd
}|j                  |      }|j                  d|d|j                  |      d        | j                  j                  D ]K  }|j                  |      }|j                  D ])  }|j                  d|d|j                  |      d       + M |j                  d       y )Nz subgraph %s {
z
 z [deletion
definitionrD   r   ]z [reference r7   z  z	 [label="z"];
z -> z;
z }
)r  r  r  rX   r   r.   r   r   rm   r   r   r   r   r  r+   )	r   r  ctxr  rA   labelrK   pidr;   s	            r   r  z	GV.render  so   
#dii/0YY%% 	HE''.E!KK ]D!$7 JJOO4;K;KZQ]-]_c_g_ghi_j"l l#D-8::!tzzPTPXPXYZP[%\\E] **U#CHHsCJJu4EFG	H YY%% 	EE**U#C ECE1BCDE	E 	r   Nr  )r!   r"   r#   rL   r   r  rM   r   r   r  r    s     r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)MessageCollectionz/Collect error/warnings messages first then sortc                 "    t               | _        y r   )r*   messagesr   s    r   r   zMessageCollection.__init__  s    r   c                 @    | j                   j                  |d|f       y r   r  r?   r   r   messages      r   r   zMessageCollection.error  s    3g./r   c                 @    | j                   j                  |d|f       y r   r  r  s      r   r   zMessageCollection.warning  s    3w/0r   c                 x    t        | j                        D ]"  \  }}}|rt        ||       t        ||d       $ y Nrz   )sortedr  r   r   )r   r   is_errorr  s       r   reportzMessageCollection.report   s:    &,T]]&; 	)"C7c7#Wa(		)r   N)r!   r"   r#   rL   r   r   r   r%  rM   r   r   r  r    s    901)r   r  r  compiler_directivesc                     | j                          | j                          t               }i }t               }| j                  D ]  }|j                  }|j
                  D ]  }| j                  |j                     }| j                  ||j                        }	t        |t              r|j                  j                  j                  |	       |j                  |j                         ||j                   z  }|j                   r||j"                  z  }n||j"                  z  }|j                  |       |j$                  t&        us|j                  j(                  j+                  |       t        |t,              s!|j                  ||j.                  <   |j                  j0                  j+                  |       |j.                  j                  j                  |	       |	j3                  t4               |	j3                  t6               |	D ]  }
|
j8                  j                  |          |d   }|d   }|d   }|d   }t;               }|D ]k  }t4        |j                  v r/d|_        t?        |j                        dk(  rd|_         <d|_         Dt6        |j                  v rd|_        ^d|_         d|_        m |jC                         D ]  \  }}t4        |j                  v rd|_        |jD                  sAt?        |j                        dk(  r)|jF                  |jH                  jJ                  vrd|_         |jL                  s.|jD                  s"|jN                  s|jP                  jR                  r|j@                  r|jT                  s|jV                  s<tX        jV                  rW|jP                  jZ                  s|jP                  j\                  r+|j_                  |j`                  d|jF                  z         4|jc                  |j`                  d|jF                  z         _|scd	|jF                  z  }|jT                  r|d
z  }|jc                  |j`                  |       t6        |j                  v r	d|_        d|_         d|_         |D ]  }
|
j8                  r|
j                  jN                  r'|
j                  jT                  r>|
j                  j0                  ru|rs|
jd                  r4|jc                  |
j`                  d|
j                  jF                  z         n3|jc                  |
j`                  d|
j                  jF                  z         d|
j                  _3         | jh                  D ]  }|j0                  r|jN                  r|jF                  dk7  r~|jF                  jk                  d      sc|jd                  r,|rU|jc                  |j`                  d|jF                  z         n+|r)|jc                  |j`                  d|jF                  z         d|_3         |jm                          |D ]  }to        |j                        |_         |D ]  }to        |j                        |_         y )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*   rX   r1   r.   r   rm   r   r   r   r   r   updater?   r   r   r   r   r   cf_assignmentsr   r   r|   cf_referencesr   r   r   r   r  r   r   r   r   ri   r  r   scope_predefined_names
allow_nullrg   r   r$  rj   rk   r   r   r   r   r   r   rh   cf_usedrY   
startswithr%  r   )r  r&  assignments
referencesassmt_nodesrA   r5   rK   i_assmtsr   r   warn_maybe_uninitializedwarn_unused_resultwarn_unusedwarn_unused_argr  r|   rm   msgs                      r   check_definitionsr:  (  sL   OO %KJ%K  )--KK 	)D{{4::.HLL$**5E$/!!((/)!X]]N2##x||+Gtxx'G%88=0JJ--44T:D-0(,


499%

((//5		""))%0 m,g&" )EJJNN4()/	)):  33MN,-AB%m4K)*;<O "H  'DMM)!%D4==!Q&"&"'%!%D#DO!&D' "'') %'eDMM)!%D&&3t}}+=+B

%++*L*LL"&5#5#5,,

0C0C)9)9//66

..%**2K2KNNJ**%&
 $$J**%& *QTYT^T^^##BBC  HH %
 "&D#DO!&DK%'P  
&

5;;#>#>..{{((-?<<$$UYY0L%*[[%5%516 7 $$UYY0G%*[[%5%516 7 %EII
&  "##--zzS )>)>x)H<<& ((4J).54 5 # ((4G).54 5!EM" OO 8(78 8(78r   c                   0     e Zd Z fdZd Zd Zd Z xZS )AssignmentCollectorc                 0    t         |           g | _        y r   )r   r   r1  )r   r   s    r   r   zAssignmentCollector.__init__  s    r   c                 *    | j                  | d d        y r   )_visitchildrenr   s    r   
visit_NodezAssignmentCollector.visit_Node  s    D$-r   c                 f    | j                   j                  |j                  |j                  f       y r   )r1  r   r   r   r{   s     r   visit_SingleAssignmentNodez.AssignmentCollector.visit_SingleAssignmentNode  s#    488 45r   c                 t    |j                   D ])  }| j                  j                  ||j                  f       + y r   )lhs_listr1  r   r   r   r|   r   s      r   visit_CascadedAssignmentNodez0AssignmentCollector.visit_CascadedAssignmentNode  s1    == 	5C##S$((O4	5r   )r!   r"   r#   r   r@  rB  rF  r$   r%   s   @r   r<  r<    s    .65r   r<  c                   6   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 Z3y)5ControlFlowAnalysisc                     || j                   k(  r| j                  S t        | j                        D ]  \  }}||u s|c S  J r   )envr  reversedstack)r   rJ  er  s       r   find_in_stackz!ControlFlowAnalysis.find_in_stack  sD    $((?99

+ 	GAtCx	 	r   c                 0   | j                   d   }|r
t               nd | _        ddlm}  |       | _        t               | _        d| _        |j                  | _
        t               | _        g | _        t        t        j                   d      | _        | j%                  |       t'        | j                  | j                          |rD| j                   d   }t)        |d      5 }| j                  j+                  |d	|
       d d d        |S |S # 1 sw Y   |S xY w)Ncontrol_flow.dot_outputr   )ConstantFoldingFTr   zcontrol_flow.dot_annotate_defswmodule)r  )current_directivesr   gv_ctxOptimizerQ  constant_folderr*   
reductionsin_inplace_assignmentr   rJ  rV   r  rL  r   r   r   object_exprvisitchildrenr:  openr  )r   r|   
dot_outputrQ  r  r  s         r   visit_ModuleNodez$ControlFlowAnalysis.visit_ModuleNode  s    ,,-FG
%/ikT-.0 %%*"::M	
()B)BPTU4 $))T%<%<= 334TUMj#& N"""2x}"MNtNs    DDc                     |j                   D ]   }|j                  s| j                  |       " | j                  |d       | j                  j	                  | j
                  | j                  f       |j                  | _        t               | _        |j                  j                  j                         D ]C  }| j                  j                  |      s| j                  j                  j                  |       E | j                  |       | j                  j                          |j                   D ]  }| j                  |        |j                   rT| j                  j#                  |j                   t%        t&        j(                  d      |j                   j*                         |j,                  rT| j                  j#                  |j,                  t%        t&        j.                  d      |j,                  j*                         | j                  |j0                         |j2                  r%| j                  |j4                  j0                         | j                  j6                  r9| j                  j6                  j9                  | j                  j:                         | j                  j=                          t?        | j                  | j@                         | j                  jB                  j                  | j                  jD                         | jF                  C| jF                  j                  tI        |j                  jJ                  | j                               | j                  jM                         \  | _        | _        |S )N)
decoratorsFrR  )'argsdefaultr\  rL  r   rJ  r  local_scoperV   rY   r   rn   r?   r}   rc   _visitstar_argr   r   r   
tuple_typerm   starstar_arg	dict_typebodyis_generatorgbodyrA   rB   r]   r   r:  rU  rX   r\   rV  r  r  r   r   r|   argrm   s       r   visit_FuncDefNodez%ControlFlowAnalysis.visit_FuncDefNode  s{   99 	(C{{""3'	( 	41

488TYY/0##M	 %%--446 	-Eyy##E*		!!%%e,	- 	4 		99 	CKK	==II##DMM$1'2D2D>C%E$(MM$7$79 II##D$5$5$1'2C2C>C%E$($5$5$;$;= 	DIIKK

( 99??IIOO%%dii&:&:; 			$))T%<%<=		TYY223;;"KKOOBt//44dii@A"jjnn.$)r   c                 2    d|_         | j                  |      S r   )usedro  r{   s     r   visit_DefNodez!ControlFlowAnalysis.visit_DefNode  s    	%%d++r   c                     |S r   rM   r{   s     r   visit_GeneratorBodyDefNodez.ControlFlowAnalysis.visit_GeneratorBodyDefNode      r   c                     |S r   rM   r{   s     r   visit_CTypeDefNodez&ControlFlowAnalysis.visit_CTypeDefNode   ru  r   Nc                 n   | j                   j                  sy | j                   j                  rb| j                   j                  d   }| j                   j                  j                  |j                         | j                   j                          |s| j                  }|j                  ro|j                  |j                  }n%| j                  j                  |j                        }|y | j                   j                  ||||xs | j                         n|j                  rt        |j                        D ]n  \  }}|j                   r't#        t$        j&                  d|j(                        }n"|| j                  u r|}n|j+                  |      }| j                  |||       p n| j-                  |       | j                   j                  rc| j                   j                  d   }| j                   j                  j                  |j                         | j                   j                          y y )Nr   Fr   )r  rA   r[   rB   r\   rc   r[  is_namerm   rJ  lookupr  r   is_sequence_constructor	enumeraterb  
is_starredr   r   	list_typer   inferable_item_nodere  )	r   r   r   r   	exc_descrrm   r   rn  	item_nodes	            r   r   z#ControlFlowAnalysis.mark_assignment#  s   yy99		,,R0IIIOO%%i&;&;<II!""C;;yy$		1}II%%c3)BWtxx%Y((#CHH- J3>> -g.?.?UX[X_X_ `ID,,, #I # 7 7 :I$$S)y$IJ KK99		,,R0IIIOO%%i&;&;<II!  r   c                 Z    | j                   d   r| j                  j                  |       yy)z'Mark position if DOT output is enabled.rP  N)rU  r  r}   r{   s     r   r}   z!ControlFlowAnalysis.mark_positionG  s(    ""#<=II##D) >r   c                 ~    |j                   D ]  \  }}|dk7  s| j                  |        | j                  |       |S )NrE   )r   r   r\  )r   r|   r  targets       r   visit_FromImportStatNodez,ControlFlowAnalysis.visit_FromImportStatNodeL  sC     JJ 	-LD&s{$$V,	- 	4 r   c                 0    t        dt        |      z        )NzUnhandled assignment node %s)r
   r   r{   s     r   visit_AssignmentNodez(ControlFlowAnalysis.visit_AssignmentNodeS  s    :T$ZGHHr   c                     | j                  |j                         | j                  |j                  |j                         |S r   )re  r   r   r   r{   s     r   rB  z.ControlFlowAnalysis.visit_SingleAssignmentNodeV  s/    DHHTXXtxx0r   c                     | j                  |j                         |j                  D ]  }| j                  ||j                           |S r   )re  r   rD  r   rE  s      r   rF  z0ControlFlowAnalysis.visit_CascadedAssignmentNode[  s>    DHH== 	0C  dhh/	0r   c                     t               }|j                  |       |j                  D ]  \  }}| j                  |        |j                  D ]  \  }}| j	                  ||        |S r   )r<  r\  r1  re  r   )r   r|   	collectorr   r   s        r   visit_ParallelAssignmentNodez0ControlFlowAnalysis.visit_ParallelAssignmentNodea  sk    ')	%!-- 	HCKK	!-- 	+HC  c*	+r   c                     d| _         | j                  |       d| _         | j                  |j                  | j	                  |j                                      |S rp   )rZ  r\  r   r   rX  create_binop_noder{   s     r   visit_InPlaceAssignmentNodez/ControlFlowAnalysis.visit_InPlaceAssignmentNodej  sM    %)"4 %*"TXXt';';D<R<R<T'UVr   c                    |j                   D ]  }|j                  r|j                  xs% | j                  j	                  |j
                        }|j                  s|j                  r#t        |j                  d|j
                  z         |j                  s| j                  |       | j                  j                  ||       | j                  |        |S )Nz7can not delete variable '%s' referenced in nested scope)rb  rz  rm   rJ  r{  r  rj   ri   r   r   ignore_nonexistingre  r  r   rm  s       r   visit_DelStatNodez%ControlFlowAnalysis.visit_DelStatNodeq  s    99 	!C{{		>TXX__SXX%>##u'9'9#''79>DE ..KK$		''U3C 	! r   c                     | j                   j                  |j                        }|r>|j                   }| j                  j                  |t        |j                  |      |       |S r   )rJ  r{  r  not_noner  r   r   r   )r   r|   rm   r   s       r   visit_CArgDeclNodez&ControlFlowAnalysis.visit_CArgDeclNode  sQ    		*"mm+KII##mEJJ<eEr   c                 4   | j                   j                  r|j                  xs% | j                  j	                  |j
                        }|rL| j                   j                  ||       || j                  v r"| j                  st        |j                  d       |S )Nz+Cannot read reduction variable in loop body)r  rA   rm   rJ  r{  r  r   rY  rZ  r   r   r   s      r   visit_NameNodez"ControlFlowAnalysis.visit_NameNode  sp    99??JJ<$((//$))"<E		((u5DOO+D4N4N$((GI r   c                     | j                   j                  rB|j                  D ]3  }| j                  |       | j                   j                  r+d|_         |S  |S r   )r  rA   r.   re  is_terminator)r   r|   rK   s      r   visit_StatListNodez&ControlFlowAnalysis.visit_StatListNode  sN    99??

 D!yy)-D&
 r   c                 J    | j                  |       | j                  |       |S r   )r\  r}   r{   s     r   r@  zControlFlowAnalysis.visit_Node  s#    4 4 r   c                     |S r   rM   r{   s     r   visit_SizeofVarNodez'ControlFlowAnalysis.visit_SizeofVarNode  ru  r   c                     |S r   rM   r{   s     r   visit_TypeidNodez$ControlFlowAnalysis.visit_TypeidNode  ru  r   c                    | j                   j                         }| j                   j                  }|j                  D ]  }| j                   j	                  |       | j                  |j                         | j                   j                  }| j                   j	                          | j                  |j                         | j                   j                  s| j                   j                  j                  |        |j                  rs| j                   j	                  |       | j                  |j                         | j                   j                  r7| j                   j                  j                  |       n|j                  |       |j                  r|| j                   _        |S d | j                   _        |S Nr<   )r  ra   rA   
if_clausesrc   re  	conditionrj  rB   else_clauser,   )r   r|   r   r<   clauses        r   visit_IfStatNodez$ControlFlowAnalysis.visit_IfStatNode  s4   YY'')
oo 	6FII'KK(()YY__FII!KK$yy		))*5	6 IIv.KK(()yy		))*5Z((DIIO  #DIIOr   c                 V   | j                  |       | j                  j                         }| j                  j                  }| j                  j	                  |      }| j                  |j                         | j                  j	                          | j                  |j                         | j                  j                  r%| j                  j                  j                  |       |j                  |       |j                  r|| j                  _        |S d| j                  _        |S )z@Essentially an if-condition that wraps a RaiseStatNode.
        N)
r}   r  ra   rA   rc   re  r  	exceptionrB   r,   r   r|   r   r<   s       r   visit_AssertStatNodez(ControlFlowAnalysis.visit_AssertStatNode  s     	4 YY'')
$$V,DNN#		DNN#99??IIOO%%j1$(DIIO  #DIIOr   c                 8   | j                   j                         }| j                   j                         }| j                   j                  j	                  t        ||             |j                  r| j                  |j                         | j                   j                  }| j                   j                          | j                  |j                         | j                   j                  j                          | j                   j                  rJ| j                   j                  j                  |       | j                   j                  j                  |       |j                  rs| j                   j                  |       | j                  |j                         | j                   j                  r7| j                   j                  j                  |       n|j                  |       |j                  r|| j                   _        |S d | j                   _        |S r  )r  rc   ra   rZ   r   r   r  re  rA   rj  r   rB   r  r,   r   r|   condition_blockr   condition_block_ends        r   visit_WhileStatNodez'ControlFlowAnalysis.visit_WhileStatNode  s`   ))--/YY'')
		y_EF>>KK'"iioo		DII		99??IIOO%%o6IIOO%%j1II':;KK(()yy		))*5))*5(DIIO  #DIIOr   c                    d}|j                   j                  }|j                  }|j                   j                  xs | j                  }t        |t        j                        r|j                  }|j                  s|j                  rf|j                  |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#                  |      }	|	j$                  r| j'                  |j                  d   t        j(                  |j*                  dt,        j.                        |j                   j                  	       |j                  d   }|j                  d   }t        |t        j                        rA|j                  }|j                  (|j                  r|j                  d
v r|j                  |j                        }|r|j0                  r|j2                  t4        j6                  u rd}|j                  d d D ]*  }
| j'                  ||
|j                   j                  	       , t        |j                        dkD  rq| j'                  || j9                  t        j:                  |j*                  d|j                  d   |j                  d               |j                   j                  	       |s3| j'                  ||j<                  |j                   j                  	       y y )NFrK  r   r   r}  rz   PY_SSIZE_T_MAX)valuer   r   )rangexrangeT+)iteratorsequencer  
expr_scoperJ  r   r   SimpleCallNodefunctionr   rz  r{  r  
is_builtinr   rb  r|  r   is_builtin_typer   IntNoder   r   c_py_ssize_t_typeis_typer   r   
range_typerX  
binop_nodeitem)r   r|   
is_specialr  r  rJ  r  rm   r  iterator_typern  s              r   mark_forloop_targetz'ControlFlowAnalysis.mark_forloop_target  s   
==))mm&&2$((h	 8 89((H}}$)9)9

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

8==1U]]uzzW=O=O/O!%J'}}Ra0 ^,,VSDMMD\D\,]^8==)A-,,VT5I5I%00474<MM!4D4<MM!4DF6G
 7;mm6N6N - P    dmm>V>V W r   c                    |j                   }|j                  d d D ]  }| j                  ||        t        |j                        dkD  r[| j                  || j	                  t        j                  |j                  d|j                  d   |j                  d                      |j                  s| j                  |       y y )Nrz   r  r   )r  rb  r   r   rX  r   r  r   )r   r|   r  rn  s       r    mark_parallel_forloop_assignmentz4ControlFlowAnalysis.mark_parallel_forloop_assignment*  s    99Ra= 	.C  -	.tyy>A  )=)=$$TXX(+(,		!(,		!6*7 8
 yy  ( r   c                 $    | j                  |      S r   )visit_ForInStatNoder{   s     r   visit_AsyncForStatNodez*ControlFlowAnalysis.visit_AsyncForStatNode8  s    ''--r   c                 \   | j                   j                         }| j                   j                         }| j                   j                  j	                  t        ||             | j                  |j                         | j                   j                  }| j                   j                          t        |t        j                        r| j                  |       n}t        |t        j                        r'| j                  |j                  |j                          n<t        |t        j"                        r| j%                  |       nJ t'        |             | j                   j                          | j                  |j(                         | j                   j                  j+                          | j                   j                  r%| j                   j                  j-                  |       |j.                  rs| j                   j                  |       | j                  |j.                         | j                   j                  r7| j                   j                  j-                  |       n|j-                  |       |j0                  r|| j                   _        |S d | j                   _        |S r  )r  rc   ra   rZ   r   r   re  r  rA   r   r   ForInStatNoder  AsyncForStatNoder   r  r  ParallelRangeNoder  r   rj  r   rB   r  r,   r  s        r   r  z'ControlFlowAnalysis.visit_ForInStatNode;  s   ))--/YY'')
		y_EFDMM""iioo		dE//0$$T*e445  dii8e55611$7$$t*$ 			DII		 99??IIOO%%o6II':;KK(()yy		))*5))*5(DIIO  #DIIOr   c                     |j                   D ]9  }|r|j                  |us| j                  j                  ||j                         ; y r   )assigned_nodesrm   r  r   )r   r|   excludeprivate_nodes       r   _delete_privatesz$ControlFlowAnalysis._delete_privatesg  sC     // 	JLl00?		''l6H6HI	Jr   c                 f   | j                   }t        |j                  d      rt        |      | _         |j                  D ]W  }d|j
                  _        |j                  |j
                     \  }}|s3| j                   j                  |j
                         Y | j                  |      }|| _         |S )Nrm   T)
rY  hasattrr  r*   r  rm   rk   r1  r?   r  )r   r|   rY  r  r   	reductions         r   visit_ParallelRangeNodez+ControlFlowAnalysis.visit_ParallelRangeNodel  s    __
 4;;(!*oDO $ 3 3 <<@""9!%!1!1,2D2D!EYOO''(:(:;	< ++D1D$r   c                     |j                   D ]  }d|j                  _         | j                  |       | j	                  |       |S r   )r  rm   rk   r\  r  )r   r|   r  s      r   visit_ParallelWithBlockNodez/ControlFlowAnalysis.visit_ParallelWithBlockNode  sH     // 	=L8<L5	= 	4 d#r   c                    | j                   j                         }| j                   j                         }| j                   j                  j	                  t        ||             | j                  |j                         | j                  |j                         |j                  | j                  |j                         | j                   j                  }| j                   j                          | j                  |j                  |j                         |j                  _| j                  |j                  | j                  t        j                  |j                   d|j                  |j                                     | j                   j                          | j                  |j"                         | j                   j                  j%                          | j                   j                  r%| j                   j                  j'                  |       |j(                  rs| j                   j                  |       | j                  |j(                         | j                   j                  r7| j                   j                  j'                  |       n|j'                  |       |j*                  r|| j                   _
        |S d | j                   _
        |S )Nr  r  )r  rc   ra   rZ   r   r   re  bound1bound2steprA   r   r  rX  r   r  r   rj  r   rB   r  r,   r  s        r   visit_ForFromStatNodez)ControlFlowAnalysis.visit_ForFromStatNode  s   ))--/YY'')
		y_EFDKK DKK 99 KK		""iioo		T[[$++699   d.B.B$$TXXsDKKK/M N 			DII		99??IIOO%%o6II':;KK(()yy		))*5))*5(DIIO  #DIIOr   c                     t        d      )NzGeneric loops are not supported)r
   r{   s     r   visit_LoopNodez"ControlFlowAnalysis.visit_LoopNode  s    =>>r   c                 f    | j                  |j                  |j                  j                         |S r   )r   r   	with_node
enter_callr{   s     r   "visit_WithTargetAssignmentStatNodez6ControlFlowAnalysis.visit_WithTargetAssignmentStatNode  s%    TXXt~~'@'@Ar   c                     | j                  |j                         | j                  |j                         | j                  |j                         |S r   )re  managerr  rj  r{   s     r   visit_WithStatNodez&ControlFlowAnalysis.visit_WithStatNode  s7    DLL!DOO$DIIr   c                    | j                   j                         }| j                   j                          | j                   j                         }| j                   j                  j                  t	        |             | j                   j                          | j                   j                  j                  |       | j                   j                          | j                   xj                  dz  c_        | j                  |j                         | j                   xj                  dz  c_        | j                   j                  j                          | j                   j                  r||j                  r5| j                   j                          | j                  |j                         | j                   j                  r%| j                   j                  j                  |       |j                  D ]  }|| j                   _        |j                  r#|j                  D ]  }| j                  |        n	 | j                   j                  | j                   j                        }| j                   j                          |j                  r&| j!                  |j                  |j"                         | j                  |j                         | j                   j                  s| j                   j                  j                  |        | j                   j                  r2|j                  | j                   j                  d   j$                         |j&                  r|| j                   _        |S d | j                   _        |S )Nr   r  ry  )r  ra   r[   r   r   rc   rA   rB   r^   re  rj  r   r  except_clausespatternr  r   	exc_valuer\   r,   )r   r|   r   r\   r  r  s         r   visit_TryExceptStatNodez+ControlFlowAnalysis.visit_TryExceptStatNode  s_   YY'')
		ii((*		##N;$?@		 			!!+.				!#DII		!#		  " 99??		##%D,,-yy		))*5)) 	6F)DIIO~~%~~ )GKK() )),,DIIOO,DKII!}}$$V]]F4D4DEKK$yy		))*5	6  99!!$))"6"6r":"F"FG(DIIO  #DIIOr   c                 L   | j                   j                         }| j                   j                         }|| j                   _        | j	                  |j
                         | j                   j                  r\| j                   j                  rF| j                   j                  j                  | j                   j                  d   j                         | j                   j                         }|| j                   _        | j	                  |j                         | j                   j                  }t        |||      }| j                   j                  j                  |       | j                   j                  r2| j                   j                  d   j                  j                  |       || j                   _        |j                  |       | j                   j                          | j                   xj                  dz  c_        | j	                  |j                         | j                   xj                  dz  c_        | j                   j                  j                          | j                   j                  r1| j                   j                  d   j                  j                          | j                   j                  re| j                   j                  j                  |       |r-| j                   j                  |      | j                   _        |S d | j                   _        |S )Nry  r   r  )r  rc   ra   rA   re  finally_except_clauser[   rB   r\   finally_clauser   r   rZ   r^   rj  r   )r   r|   
body_blockr\   r   r   descrs          r   visit_TryFinallyStatNodez,ControlFlowAnalysis.visit_TryFinallyStatNode  s   YY((*
 ii((*%		D../99??tyy33IIOO%%dii&:&:2&>&J&JK 		**,'		D''(yy{M<H		##E*99??IIOOB**11%8$		[)				!#DII		!#		  "99??IIOOB**..099??IIOO%%m4"&))"5"5\"5"J		  #'		r   c                 ^   | j                  |       | j                  |       | j                  j                  rF| j                  j                  j                  | j                  j                  d   j                         d | j                  _        | j                  j                  rd|_        |S )Nry  T)r}   r\  r  r[   rA   rB   r\   r^   r{   s     r   visit_RaiseStatNodez'ControlFlowAnalysis.visit_RaiseStatNode  s{    4 4 99IIOO%%dii&:&:2&>&J&JK		99!! $Dr   c                    | j                  |       | j                  j                  rF| j                  j                  j	                  | j                  j                  d   j
                         d | j                  _        |S Nry  )r}   r  r[   rA   rB   r\   r{   s     r   visit_ReraiseStatNodez)ControlFlowAnalysis.visit_ReraiseStatNode   sX    4 99IIOO%%dii&:&:2&>&J&JK		r   c                    | j                  |       | j                  |       t        | j                  j                  d d d         }|D ]  }|j
                  s| j                  j                  j                  |j
                         |j                  rR| j                  j                  }|D ]  }|j
                  s|j
                  } n |j                  j                  |        nP | j                  j                  r9| j                  j                  j                  | j                  j                         d | j                  _        |S r  )
r}   r\  iterr  r[   r   rA   rB   r   r]   )r   r|   outer_exception_handlershandlerr]   next_handlers         r   visit_ReturnStatNodez(ControlFlowAnalysis.visit_ReturnStatNode'  s   4 4 #'		(<(<TrT(B#C / 	@G$$		))'*?*?@''!%!5!5J(@ "'55)5)C)CJ!" ((22:>	@ yy		))$))*>*>?		r   c                    | j                   j                  s|S | j                   j                  d   }| j                  |       |j                  d d d   D ]p  }|j                  s| j                   j
                  j                  |j                         |j                  r%|j                  j                  |j                          n0 | j                   j
                  j                  |j                         d | j                   _        |S r  )	r  rZ   r}   r[   r   rA   rB   r   r   r   r|   loopr  s       r   visit_BreakStatNodez'ControlFlowAnalysis.visit_BreakStatNode>      yyKyyr"4 2. 	7I&&		)))*A*AB))**44T__E	7 IIOO%%doo6		r   c                    | j                   j                  s|S | j                   j                  d   }| j                  |       |j                  d d d   D ]p  }|j                  s| j                   j
                  j                  |j                         |j                  r%|j                  j                  |j                          n0 | j                   j
                  j                  |j                         d | j                   _        |S r  )	r  rZ   r}   r[   r   rA   rB   r   r   r  s       r   visit_ContinueStatNodez*ControlFlowAnalysis.visit_ContinueStatNodeO  r  r   c                 4   |j                   rB| j                  j                  | j                  | j                  f       |j                   | _        | j                  |j                         |j                   r"| j                  j                         \  | _        }|S r   )r  rL  r   rJ  r  re  r  r   r   r|   r(  s      r   visit_ComprehensionNodez+ControlFlowAnalysis.visit_ComprehensionNode`  se    ??JJtxx34DHDII??**..*KDHar   c                    t        |t        j                  t        j                  f      sJ |       |j                  rb| j
                  j                  | j                  | j                  f       | j                  |j                        | _        |j                  | _        | j                  |       |j                  r'| j
                  j                         \  | _        | _        |S r   )r   r   IteratorNodeAsyncIteratorNoder  rL  r   rJ  r  rN  r\  r   r{   s     r   visit_ScopedExprNodez(ControlFlowAnalysis.visit_ScopedExprNodej  s     $!7!79T9T UV\X\\??JJtxx34**4??;DIDH4 ??"&**.."2DHdir   c                    | j                  |d       | j                  j                  |j                  |j                  | j
                  j                  |j                  j                               | j                  j                  | j
                  | j                  f       |j                  | _        | j                  j                          |j                  r?| j                  j                  |j                  t        |j                  j                         | j                  |d       | j                  j                          | j                  j                         \  | _        }|S )N)dict	metaclassmkwbasesclass_result)rj  )r\  r  r   r  classobjrJ  r{  r  rL  r   r   rc   doc_noder   rm   r   r  s      r   visit_PyClassDefNodez(ControlFlowAnalysis.visit_PyClassDefNodew  s    4 "B 	C		!!$++t}}"&((//$++2B2B"C	E

488TYY/0::		==II%%dmm]DMMDWDWX4+		jjnn&!r   c                     | j                   j                  |j                  | j                  f       | j	                  |       | j                   j                          |S r   )rL  r   r   r  r\  r   r{   s     r   visit_CClassDefNodez'ControlFlowAnalysis.visit_CClassDefNode  sB    

4::tyy124 

r   c                     |j                   j                  r | j                  |j                   t               | j	                  |       |S r   )operandrz  r   r   r\  r{   s     r   visit_AmpersandNodez'ControlFlowAnalysis.visit_AmpersandNode  s6    <<  }=4 r   c                 2   t        |j                        dk(  sJ | j                  j                         }| j                  j                  }| j                  |j                         | j                  j                          | j                  |j                         | j                  j                  r%| j                  j                  j                  |       |j                  |       |j                  r|| j                  _        |S d | j                  _        |S r"  )r   subexprsr  ra   rA   re  operand1rc   operand2rB   r,   r  s       r   visit_BoolBinopNodez'ControlFlowAnalysis.visit_BoolBinopNode  s    4==!Q&&YY'')
DMM"		DMM"99??IIOO%%j1$(DIIO  #DIIOr   c                    t        |j                        dk(  sJ | j                  |j                         | j                  j
                  }| j                  j                         }| j                  j                          | j                  |j                         | j                  j
                  r%| j                  j
                  j                  |       | j                  j                  |       | j                  |j                         | j                  j
                  r%| j                  j
                  j                  |       |j                  r|| j                  _        |S d | j                  _        |S )N   r  )r   r  re  testr  rA   ra   rc   true_valrB   	false_valr,   )r   r|   r<   r   s       r   visit_CondExprNodez&ControlFlowAnalysis.visit_CondExprNode  s    4==!Q&&DIIYY'')
		DMM"99??IIOO%%j1		6*DNN#99??IIOO%%j1(DIIO  #DIIOr   r    r   )4r!   r"   r#   rN  r_  ro  rr  rt  rw  r   r}   r  r  rB  rF  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&  rM   r   r   rH  rH    s   20d,""H*
I


6(>2Xh).*XJ
&$L?1f%N."",r   rH  )+cythondeclareobjectrF   r   r   r   r   r   Visitorr   r	   Errorsr   r   r
   ExprNoder   unspecified_typer   r'   rO   rR   rV   r   r   r   r   r   r   r   r   r   r   r   r   r  r  cfuncr  r:  r<  rH  rM   r   r   <module>r/     sv    &F&&66#66#6;
      1 1 1*I&& * j99:@' @'F  
K* K*\ ) )" "B~ $~ > * *B B	F 	Ft >&= &=R <) )& H8K H8d H8 H8V5+ 5 x/ xr   