+
    :iz                     >   ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ]R9   d   ]	! . RO4      t
M]R9   d   ]	! . RO4      t
M]! ]4      h ! R R]4      t ! R R] P                  ! RR4      4      t ! R	 R
] P                   4      t ! R R]4      t ! R R]4      tR# )    N)Loc)UnsupportedError)	PYVERSIONc                   2   a  ] tR t^t o R tR tR tRtV tR# )CFBlockc                J    Wn         . V n        / V n        / V n        R V n        R# )FN)offsetbodyoutgoing_jumpsincoming_jumpsterminating)selfr	   s   &&T/var/www/html/photoedit/myenv/lib/python3.14/site-packages/numba/core/controlflow.py__init__CFBlock.__init__   s*    	 ! !     c                ~    V P                   \        V P                  4      \        V P                  4      3pR V,          # )z,block(offset:%d, outgoing: %s, incoming: %s))r	   sortedr   r   )r   argss   & r   __repr__CFBlock.__repr__$   s9    t**+t**+- >DDr   c                ,    \        V P                  4      # N)iterr
   r   s   &r   __iter__CFBlock.__iter__*   s    DIIr   )r
   r   r	   r   r   N)	__name__
__module____qualname____firstlineno__r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r      s     	!E r   r   c                   4   a  ] tR t^.t o RtRtR tR tRtV t	R# )Loopz7
A control flow loop, as detected by a CFGraph object.
c                d    \        V\        4      ;'       d    VP                  V P                  8H  # r   )
isinstancer'   headerr   others   &&r   __eq__Loop.__eq__;   s$    %&FF5<<4;;+FFr   c                ,    \        V P                  4      # r   )hashr*   r   s   &r   __hash__Loop.__hash__>   s    DKK  r    N)
r   r   r    r!   __doc__	__slots__r-   r1   r"   r#   r$   s   @r   r'   r'   .   s!      IG! !r   r'   c                   6   a  ] tR t^Bt o RtR tR tR tRtV t	R# )_DictOfContainerszA defaultdict with customized equality checks that ignore empty values.

Non-empty value is checked by: `bool(value_item) == True`.
c                    \        V\        4      '       d%   V P                  4       pVP                  4       pW#8H  # \        # r   )r)   r7   _non_empty_itemsNotImplemented)r   r,   minetheirss   &&  r   r-   _DictOfContainers.__eq__H   s:    e.//((*D++-F>!r   c                J    V P                  V4      pV\        J d   V# V'       * # r   )r-   r:   )r   r,   rets   && r   __ne___DictOfContainers.__ne__P   s$    kk% . J7Nr   c                ~    \        V P                  4       4       UUu. uF  w  rV'       g   K  W3NK  	  upp# u uppi r   )r   items)r   kvss   &  r   r9   "_DictOfContainers._non_empty_itemsW   s/    %+DJJL%9@%9EAR%9@@@s   99r3   N)
r   r   r    r!   r4   r-   r@   r9   r"   r#   r$   s   @r   r7   r7   B   s      
A Ar   r7   c                     a  ] tR t^[t o RtR tR tR;R ltR tR t	R t
R	 tR
 tR tR tR tR t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       t]P$                  R 4       tR tR tR t R t!R t"R t#R  t$R! t%R" t&R<R# lt'R;R$ lt(R=R% lt)R;R& lt*R' t+R;R( lt,R) t-R* t.R+ t/R, t0R- t1R. t2R<R/ lt3R0 t4R1 t5R;R2 lt6R3 t7R4 t8R5 t9R6 t:R7 t;R8 t<R9 t=R:t>V t?R# )>CFGraphz:
Generic (almost) implementation of a Control Flow Graph.
c                    \        4       V n        \        \         4      V n        \        \         4      V n        / V n        R V n        R # r   )set_nodesr7   _preds_succs
_edge_data_entry_pointr   s   &r   r   CFGraph.__init__`   s2    e',', r   c                <    V P                   P                  V4       R# )z{
Add *node* to the graph.  This is necessary before adding any
edges from/to the node.  *node* can be any hashable object.
N)rK   addr   nodes   &&r   add_nodeCFGraph.add_nodeg   s    
 	r   Nc                    WP                   9  d   \        RV: RV P                   : 24      hW P                   9  d   \        RV: RV P                   : 24      hV P                  WV4       R# )z
Add an edge from node *src* to node *dest*, with optional
per-edge *data*.
If such an edge already exists, it is replaced (duplicate edges
are not possible).
zCannot add edge as src node z not in nodes zCannot add edge as dest node N)rK   
ValueError	_add_edge)r   srcdestdatas   &&&&r   add_edgeCFGraph.add_edgen   s\     kk!!4;;0 1 1{{""DKK1 2 2s$'r   c              #  p   "   V P                   V,           F  pW P                  W3,          3x  K  	  R# 5i)z
Yield (node, data) pairs representing the successors of node *src*.
(*data* will be None if no data was specified when adding the edge)
N)rM   rN   )r   rZ   r[   s   && r   
successorsCFGraph.successors}   s1     
 KK$$D	222 %   46c              #  p   "   V P                   V,           F  pW P                  W!3,          3x  K  	  R# 5i)z
Yield (node, data) pairs representing the predecessors of node *dest*.
(*data* will be None if no data was specified when adding the edge)
N)rL   rN   )r   r[   rZ   s   && r   predecessorsCFGraph.predecessors   s1     
 ;;t$$Csy111 %rb   c                6    WP                   9   g   Q hWn        R# )z-
Set the entry point of the graph to *node*.
N)rK   rO   rS   s   &&r   set_entry_pointCFGraph.set_entry_point   s     {{""" r   c                X    V P                   f   \        R4      hV P                  4        R# )z
Compute essential properties of the control flow graph.  The graph
must have been fully populated, and its entry point specified. Other
graph properties are computed on-demand.
Nzno entry point defined!)rO   RuntimeError_eliminate_dead_blocksr   s   &r   processCFGraph.process   s(     $899##%r   c                    V P                   # )z
Return a dictionary of {node -> set(nodes)} mapping each node to
the nodes dominating it.

A node D dominates a node N when any path leading to N must go through D
)_domsr   s   &r   
dominatorsCFGraph.dominators        zzr   c                    V P                   # )z
Return a dictionary of {node -> set(nodes)} mapping each node to
the nodes post-dominating it.

A node P post-dominates a node N when any path starting from N must go
through P.
)
_post_domsr   s   &r   post_dominatorsCFGraph.post_dominators   s     r   c                    V P                   # )z
Return a dictionary of {node -> node} mapping each node to its
immediate dominator (idom).

The idom(B) is the closest strict dominator of V
)_idomr   s   &r   immediate_dominatorsCFGraph.immediate_dominators   rr   r   c                    V P                   # )z
Return a dictionary of {node -> set(nodes)} mapping each node to
the nodes in its dominance frontier.

The dominance frontier _df(N) is the set of all nodes that are
immediate successors to blocks dominated by N but which aren't
strictly dominated by N
)_dfr   s   &r   dominance_frontierCFGraph.dominance_frontier   s     xxr   c                    V P                   # )z
return a dictionary of {node -> set(nodes)} mapping each node to
the set of nodes it immediately dominates

The domtree(B) is the closest strict set of nodes that B dominates
)_domtreer   s   &r   dominator_treeCFGraph.dominator_tree   s     }}r   c                "    V P                  4       # r   )_find_exit_pointsr   s   &r   _exit_pointsCFGraph._exit_points       %%''r   c                "    V P                  4       # r   )_find_dominatorsr   s   &r   ro   CFGraph._doms       $$&&r   c                "    V P                  4       # r   )_find_back_edgesr   s   &r   _back_edgesCFGraph._back_edges   r   r   c                "    V P                  4       # r   )_find_topo_orderr   s   &r   _topo_orderCFGraph._topo_order   r   r   c                "    V P                  4       # r   )_find_descendentsr   s   &r   _descsCFGraph._descs   r   r   c                "    V P                  4       # r   )_find_loopsr   s   &r   _loopsCFGraph._loops   s    !!r   c                "    V P                  4       # r   )_find_in_loopsr   s   &r   	_in_loopsCFGraph._in_loops   s    ""$$r   c                "    V P                  4       # r   )_find_post_dominatorsr   s   &r   rt   CFGraph._post_doms   s    ))++r   c                "    V P                  4       # r   )_find_immediate_dominatorsr   s   &r   rx   CFGraph._idom   s    ..00r   c                "    V P                  4       # r   )_find_dominance_frontierr   s   &r   r|   CFGraph._df   s    ,,..r   c                "    V P                  4       # r   )_find_dominator_treer   s   &r   r   CFGraph._domtree   s    ((**r   c                (    V P                   V,          # )z`
Return the set of descendents of the given *node*, in topological
order (ignoring back edges).
)r   rS   s   &&r   descendentsCFGraph.descendents   s    
 {{4  r   c                :    V P                   f   Q hV P                   # )z
Return the entry point node.
)rO   r   s   &r   entry_pointCFGraph.entry_point  s"       ,,,   r   c                    V P                   # )z7
Return the computed set of exit nodes (may be empty).
)r   r   s   &r   exit_pointsCFGraph.exit_points  s        r   c                <    V P                   V P                  ,          # )z
Return the set of nodes constituting the graph's backbone.
(i.e. the nodes that every path starting from the entry point
 must go through).  By construction, it is non-empty: it contains
 at least the entry point.
)rt   rO   r   s   &r   backboneCFGraph.backbone  s     t0011r   c                    V P                   # )zp
Return a dictionary of {node -> loop} mapping each loop header
to the loop (a Loop instance) starting with it.
)r   r   s   &r   loopsCFGraph.loops  s    
 {{r   c                    V P                   P                  VR4       Uu. uF  q P                  V,          NK  	  up# u upi )zU
Return the list of Loop objects the *node* belongs to,
from innermost to outermost.
r3   )r   getr   )r   rT   xs   && r   in_loopsCFGraph.in_loops  s7    
 )-(:(:4(DE(D1A(DEEEs   =c                    V P                   # )z;
Return the set of dead nodes (eliminated from the graph).
)_dead_nodesr   s   &r   
dead_nodesCFGraph.dead_nodes%  s     r   c                    V P                   # )z
Return the set of live nodes.
)rK   r   s   &r   nodesCFGraph.nodes+  s     {{r   c                    V P                   # )zJ
Return the sequence of nodes in topological order (ignoring back
edges).
)r   r   s   &r   
topo_orderCFGraph.topo_order1  s    
 r   c              #     "   \        V4      pV P                  pV'       d   \        V4      pV F  pWA9   g   K  Vx  K  	  R# 5i)zn
Iterate over the *nodes* in topological order (ignoring back edges).
The sort isn't guaranteed to be stable.
N)rJ   r   reversed)r   r   reverseitns   &&&  r   	topo_sortCFGraph.topo_sort8  s;     
 E
"BAz s
   3A
Ac                n   ^ RI pT;'       g    \        P                  p \        RVR7       V P	                  V4       \        RVR7       VP                  V P
                  VR7       \        RVR7       VP                  V P                  VR7       \        R\        V P                  4      VR7       \        RVR7       VP                  V P                  VR7       \        R	VR7       VP                  V P                  VR7       \        R
VR7       VP                  V P                  4       VR7       R# )z#
Dump extensive debug information.
NzCFG adjacency lists:filezCFG dominators:streamzCFG post-dominators:zCFG back edges:z
CFG loops:zCFG node-to-loops:zCFG backbone:)pprintsysstdoutprint_dump_adj_listsro   rt   r   r   r   r   r   )r   r   r   s   && r   dumpCFGraph.dumpE  s     	!!szz(t4  &d+djj.$40dood3(8(8!9El&dkk$/".dnnT2oD)dmmod3r   c                d    ^ RI pTP                  TR7      pT P                   F  pTP	                  \        T4      4       K  	  T P                   FA  pT P                  T,           F'  pTP                  \        T4      \        T4      4       K)  	  KC  	  T#   \         d    \        R4      hi ; i)zRender the controlflow graph with GraphViz DOT via the
``graphviz`` python binding.

Returns
-------
g : graphviz.Digraph
    Use `g.view()` to open the graph in the default PDF application.
NzcThe feature requires `graphviz` but it is not available. Please install with `pip install graphviz`)filename)graphvizImportErrorDigraphrK   rT   strrM   edge)r   r   gvgr   r   s   &&    r   
render_dotCFGraph.render_dotZ  s    	! JJJ)AFF3q6N  AAs1vs4y) '    	= 	s   B B/c                    V P                   V,          P                  V4       V P                  V,          P                  V4       W0P                  W3&   R # r   )rL   rR   rM   rN   )r   from_tor\   s   &&&&r   rY   CFGraph._add_edgew  s?     	BE"Er"%)	"r   c                R   V P                   P                  VR4       F3  pV P                  V,          P                  V4       V P                  W3 K5  	  V P                  P                  VR4       F3  pV P                   V,          P                  V4       V P                  W13 K5  	  R # )Nr3   )rM   poprL   removerN   )r   rT   succpreds   &&  r   _remove_node_edgesCFGraph._remove_node_edges~  s    KKOOD"-DKK$$T*
+ . KKOOD"-DKK$$T*
+ .r   c              #    "   Vf   V P                   3p\        4       p\        V4      pV'       d[   VP                  4       pWB9  g   K   Vx  VP	                  V4       V P
                  V,           F  pVP                  V4       K  	  Kb  R # 5ir   )rO   rJ   listr   rR   rM   append)r   entriesseenstackrT   r   s   &&    r   _dfsCFGraph._dfs  ss     ?((*GuW99;D
 KK--DLL& . s   .BB	ABc                    \        4       pV P                  4        F  pVP                  V4       K  	  V P                  V,
          V n        Wn        V P                   F  pV P                  V4       K  	  R# )z`
Eliminate all blocks not reachable from the entry point, and
stash them into self._dead_nodes.
N)rJ   r   rR   rK   r   r   )r   liverT   deads   &   r   rk   CFGraph._eliminate_dead_blocks  sZ    
 uIIKDHHTN  ;;-$$D##D) %r   c                    \        4       pV P                   F7  pV P                  P                  V4      '       d   K&  VP	                  V4       K9  	  V# )z"
Compute the graph's exit points.
)rJ   rK   rM   r   rR   )r   r   r   s   &  r   r   CFGraph._find_exit_points  s@     eA;;??1%%"  r   c                   aaaaaa V P                   oV P                  o. o\        4       o. oVVVVVV3R  loSV P                  3.oS'       d   SP	                  4       w  rV! V4       K$  S# )c                    < V S9  d^   SP                  V 4       SP                  SP                  V 34       SV ,           F   pW3S9  g   K  SP                  SV34       K"  	  R # R # r   rR   r   )rT   r[   
back_edgesdfs_rec
post_orderr   r   succss   & r   r  (CFGraph._find_postorder.<locals>.dfs_rec  s\    4j//67!$KKD|:5gt_5 (  r   )rM   r   rJ   rO   r   )	r   cbr\   r  r  r  r   r   r  s	   &  @@@@@@r   _find_postorderCFGraph._find_postorder  sd    %%

u
	6 	6 4,,-.yy{HBtHr   c                  a
a V
V3R  lpV P                   pV P                  pV P                  4       p\        V4       UUu/ uF  w  rVWebK	  	  uppoW"/o
VP	                  4        VP                  4        RpV'       dS   RpV FH  p\        P                  ! VV
3R lW8,           4       4      p	VS
9  g   S
V,          V	8w  g   KA  V	S
V&   RpKJ  	  KZ  S
# u uppi )c                    < W8w  dC   SV ,          SV,          8  d   SV ,          p K   SV ,          SV,          8  g   K=  SV,          pK"  V # r   r3   )uvidomidxs   &&r   	intersect5CFGraph._find_immediate_dominators.<locals>.intersect  s=    &!fs1voQA!fs1voQAHr   TFc              3   :   <"   T F  pVS9   g   K  Vx  K  	  R # 5ir   r3   ).0r  r  s   & r   	<genexpr>5CFGraph._find_immediate_dominators.<locals>.<genexpr>  s      -;101T	 ./Qs   	
)rO   rL   r
  	enumerater   r   	functoolsreduce)r   r  entrypreds_tableorderiechangedr  new_idomr  r  s   &         @@r   r   "CFGraph._find_immediate_dominators  s    	 !!kk$$& )% 01 0qt 01		G$++I-; -;< D=DGx$7&DG"G  ! 2s    Cc                    V P                   p\        \        4      pVP                  4        F6  w  r4W29  d   \        4       W#&   W48w  g   K  W$,          P	                  V4       K8  	  V# r   )rx   r7   rJ   rC   rR   )r   r  domtreer  r  s   &    r   r   CFGraph._find_dominator_tree  sP    zz#C(JJLDA U
v
q! ! r   c                .   V P                   pV P                  pV Uu/ uF  q3\        4       bK  	  ppV FX  p\        W#,          4      ^8  d   K  W#,           F1  pWQV,          8w  g   K  WE,          P	                  V4       W,          pK0  	  KZ  	  V# u upi )   )rx   rL   rJ   lenrR   )r   r  r  r  dfr  s   &     r   r    CFGraph._find_dominance_frontier  s    zzkk $%1h%A;>"Q& ^^7lEIIaLA $  	 &s   Bc           	     P   V'       d/   \        V P                  4      pV P                  pV P                  pM.\        V P                  .4      pV P                  pV P                  pV'       g   \        R 4      h/ pV F  p\        V.4      WV&   K  	  . pV P                   F3  pW9  g   K  \        V P                  4      WX&   VP                  V4       K5  	  V'       d   VP                  4       pW9   d   K   \        V.4      p	W8,          p
V
'       dC   T	\        P                  ! \         P                  V
 Uu. uF  qV,          NK  	  up4      ,          p	WV,          8w  g   K  \        V	4      \        WX,          4      8  g   Q hWV&   VP                  WH,          4       K  V# u upi )z5no entry points: dominator algorithm cannot be seeded)rJ   r   rM   rL   rO   rj   rK   r   r   r  r  intersectionr(  extend)r   postr   r  succs_tabledomsr  todor   new_domspredsps   &&          r   _find_dominators_internal!CFGraph._find_dominators_internal  s]   
 $++,G++K++K4,,-.G++K++K  2 3 3 A1#hDG  Adkk*A 
 
A|A3xHNEI,,S-=-=?D-Eu!1ggu-EG G7"8}s47|333"QKN+ .Fs   6F#c                &    V P                  R R7      # )Fr.  )r5  r   s   &r   r   CFGraph._find_dominators2  s    --5-99r   c                   \        4       pV P                  P                  V4       V P                  P	                  4        F;  pVP
                  '       d   K  VP                   F  pV P                  W14       K  	  K=  	  V P                  R R7      pWA VP	                  4        F  pVP                  V4       K  	  V P                  V4       V P                  P                  V4       V# )Tr8  )objectr   rR   r   valuesexitsr
   rY   r5  discardr   r   )r   
dummy_exitloopbpdomsr0  s   &     r   r   CFGraph._find_post_dominators5  s     X
j)KK&&(D:::ANN11 # ) ..D.9LLNDLL$ #
+  ,r   c                N  a a
a Ve@   \        V\        4      '       g   \        R\        V4       24      hVP	                  R^ 4       \        4       p. o
/ oS P                  4       p\        4       pV V
V3R lpV! V4       ^ pS
'       d   V^,          pS
R,          pSV,          pV'       d>   VP                  4       p	V	S
9   d   VP                  Wy34       KV  W9  d   V! V	4       Kf  Kh  S
P                  4        VP                  V4       K  Ve   VR;;,          V,          uu&   V# )z]
Find back edges.  An edge (src, dest) is a back edge if and
only if *dest* dominates *src*.
z*stats* must be a dict; got iteration_countc                 ~   < SP                  V 4       SP                  V ,           Uu. uF  qNK  	  upSV &   R # u upi r   )r   rM   )rT   r[   r   r   succs_states   & r   
push_state,CFGraph._find_back_edges.<locals>.push_statea  s6    LL26++d2C D2C$2C DK Ds   
:)	r)   dict	TypeErrortype
setdefaultrJ   r   r   rR   )r   statsr  r   checkedrH  iter_cttos	tos_succscur_noder   rG  s   f&        @@r   r   CFGraph._find_back_edgesJ  s	    eT**">tE{m LMM.2
 U
&&(%	E 	; qLG)C#C(I$==?u$NNC?3,x( -
 		C #$/$r   c                   aaaaa V P                   oV P                  o. o\        4       oVVVVV3R  loS! V P                  4       SP	                  4        S# )c                    < V S9  dG   SP                  V 4       SV ,           F  pW3S9  g   K  S! V4       K  	  SP                  V 4       R # R # r   r  )rT   r[   _dfs_recr  r  r   r  s   & r   rX  *CFGraph._find_topo_order.<locals>._dfs_rec  sL    4!$KKD|:5  ( !!$'  r   )rM   r   rJ   rO   r   )r   rX  r  r  r   r  s   &@@@@@r   r   CFGraph._find_topo_order  sO    %%

u	( 	( 	""#r   c                
   / p\        V P                  4       Fg  p\        4       ;W&   pV P                  V,           F?  pW$3V P                  9  g   K  VP                  V4       VP                  W,          4       KA  	  Ki  	  V# r   )r   r   rJ   rM   r   rR   update)r   descsrT   
node_descsr   s   &    r   r   CFGraph._find_descendents  ss    T--.D'*u,EK*D))<t'7'77NN4(%%ek2 * / r   c                |   / pV P                    F  w  r#Tp\        V.4      pV.pV'       dN   VP                  4       pWu9  g   K   VP                  V4       VP	                  V P
                  V,          4       KU  WA9   d   W,          P                  V4       K  WQV&   K  	  / pVP                  4        F  w  rE\        4       p	\        4       p
V FU  pV	P                  V P
                  V,          V,
          4       V
P                  V P                  V,          V,
          4       KW  	  \        WEWR7      pWV&   K  	  V# )z3
Find the loops defined by the graph's back edges.
)r*   r
   r   r=  )
r   rJ   r   rR   r-  rL   r\  rC   rM   r'   )r   bodiesrZ   r[   r*   r
   queuer   r   r   r=  r@  s   &           r   r   CFGraph._find_loops  s    ))ICF x=DEEIIK=HHQKLLQ0 %%d+!%v# *( "LLNLFeGEEt{{1~45T[[^d23  v'OD &M + r   c                   V P                   p\        R  V P                   4       4      p\        VP	                  4       R R7       F7  pVP
                   F$  pW$,          P                  VP                  4       K&  	  K9  	  V# )c              3   (   "   T F  q. 3x  K
  	  R # 5ir   r3   )r  r   s   & r   r  )CFGraph._find_in_loops.<locals>.<genexpr>  s     5ABs   c                 ,    \        V P                  4      # r   )r(  r
   )r@  s   &r   <lambda>(CFGraph._find_in_loops.<locals>.<lambda>  s    C		Nr   )key)r   rK  rK   r   r<  r
   r   r*   )r   r   r   r@  r   s   &    r   r   CFGraph._find_in_loops  sc    555 5<<>/JKDYY""4;;/  L r   c                    \        R  V P                  P                  4        4       4      p^ RIpVP                  W!R7       R# )c              3   R   "   T F  w  rV\        \        V4      4      3x  K  	  R # 5ir   )r   r   )r  rZ   destss   &  r   r  *CFGraph._dump_adj_lists.<locals>.<genexpr>  s(      @+>ZS vd5k23+>s   %'Nr   )rK  rM   rC   r   )r   r   	adj_listsr   s   &&  r   r   CFGraph._dump_adj_lists  s:     @+/;;+<+<+>@ @	i-r   c                    \        V\        4      '       g   \        # R F$  p\        WR4      p\        WR4      pW48w  g   K#   R# 	  R# )rK   NFT)rK   rN   rO   rL   rM   )r)   rH   r:   getattr)r   r,   r   thisthats   &&   r   r-   CFGraph.__eq__  sE    %))!!MA4D)D5T*D|	 N
 r   c                .    V P                  V4      '       * # r   )r-   r+   s   &&r   r@   CFGraph.__ne__  s    ;;u%%%r   )r   rN   rO   rK   rL   rM   r   )F)znumba_cfg.dot)@r   r   r    r!   r4   r   rU   r]   r`   rd   rg   rl   rp   ru   ry   r}   r   r  cached_propertyr   ro   r   r   r   r   r   rt   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   rk   r   r
  r   r   r   r5  r   r   r   r   r   r   r   r   r-   r@   r"   r#   r$   s   @r   rH   rH   [   s    !(32!&	 ( ( ' ' ' ' ' ' ( ( " " % % , , 1 1 / / + +!!!2F  4*:*,'*0&P)V:*5n$"H	.	& &r   rH   c                     a  ] tR tRt o RtR tR tR tR tRR lt	R	 t
RR
 ltR tR tR tR tR tR tR tR tR t]t]t]t]t]t]t]t]tR t]t]tR t R t!]!t"R t#]$R9   d   R t%M]$R9   d   M]&! ]$4      hR t'R t(Rt)V t*R# ) ControlFlowAnalysisi  z
Attributes
----------
- bytecode

- blocks

- blockseq

- doms: dict of set
    Dominators

- backbone: set of block offsets
    The set of block that is common to all possible code path.

c                    Wn         / V n        / V n        . V n        R V n        R V n        RV n        R V n        . V n        . V n	        . V n
        R # )NT)bytecodeblocks
liveblocksblockseqr0  r   _force_new_block	_curblock_blockstackr   _withs)r   r}  s   &&r   r   ControlFlowAnalysis.__init__  sO     	 $r   c              #  ^   "   V P                    F  pV P                  V,          x  K  	  R# 5i)z-
Return all blocks in sequence of occurrence
N)r  r~  r   r  s   & r   
iterblocksControlFlowAnalysis.iterblocks   s#      A++a.  s   +-c              #     "   V P                    F*  pWP                  9   g   K  V P                  V,          x  K,  	  R# 5i)z2
Return all live blocks in sequence of occurrence
N)r  r  r~  r  s   & r   iterliveblocks"ControlFlowAnalysis.iterliveblocks  s-      AOO#kk!n$ s   ??c              #     "   VP                   P                  4        F.  w  r#W P                  9   g   K  V P                  V,          V3x  K0  	  R# 5i)zA
Yield (incoming block, number of stack pops) pairs for *block*.
N)r   rC   r  r~  )r   blockr  popss   &&  r   incoming_blocks#ControlFlowAnalysis.incoming_blocks  s?      ++113GAOO#kk!nd** 4s
   -AANc                >    V P                   P                  R R7       R # )Nr   )graphr   )r   r   s   &&r   r   ControlFlowAnalysis.dump  s    

T"r   c                  a  S P                  4        F  pR VP                  ,          p\        S VR4      pVe   V! V4       K1  VP                  '       dh   \	        S P
                  P                  P                  VP                  4      pVP                  R9   d   RpMRVP                  ,          p\        WTR7      hK  	  \        S P                  S P                  R,          4       FO  w  rgS P                  V,          pVP                  '       d   K,  VP                  '       d   K@  ^ VP                  V&   KQ  	  \        4       p	S P                   F  p
V	P!                  V
4       K  	  S P                  P#                  4        FB  p
V
P                  P%                  4        F!  w  rV	P'                  V
P(                  W4       K#  	  KD  	  V	P+                  \-        S P                  4      4       V	P/                  4        V	S n        S P                  P#                  4        FP  p
V
P                  P%                  4        F/  w  rVS P                  V,          P2                  V
P(                  &   K1  	  KR  	  \5        V 3R lS P0                  P7                  4        4       4      S n        \;        S P                  4       F  pVS P8                  9   g   K   M	  \=        R4      hS P0                  P?                  4       p\A        4       pS P                  PC                  4        F7  p
S P0                  PE                  V
4      '       g   K&  VPG                  V
4       K9  	  W,
          S n        R# )	zop_%sNz2'try' block not supported until python3.7 or laterz$Use of unsupported opcode (%s) found)loc:   NNc              3   N   <"   T F  pVSP                   V,          3x  K  	  R # 5ir   )r~  )r  r  r   s   & r   r  *ControlFlowAnalysis.run.<locals>.<genexpr>B  s%      <(:1 !"4;;q>2(:s   "%zNo live block that exits!?>   SETUP_FINALLY)$
_iter_instopnamers  is_jumpr   r}  func_idr   linenor   zipr  r~  r   r   rH   rU   r<  rC   r]   r	   rg   minrl   r  r   rK  r   r  r   AssertionErrorr   rJ   keysr   rR   )r   instfnamefnlmsgcurnxtblkr  rA  outr  lastblkr   inloopblockss   f               r   runControlFlowAnalysis.run  s   OO%Ddkk)Eud+B~4--66D;;"33NC@4;;NC&s22  &$ DMM4==+<=HC++c"C%%%cooo*+""3' >
 	ANN1 ##%A--335	qxx3 6 & 	c$++./
 ##%A--335	<@C //9 6 &
  <(,

(8(8(:< <  .G$//) / !!=>> ::&&( u!!#Azz""1%%  # $ !/r   c                6    W P                   P                  V&   R# )z~
Register a jump (conditional or not) to *target* offset.
*pops* is the number of stack pops implied by the jump (default 0).
N)r  r   )r   targetr  s   &&&r   jumpControlFlowAnalysis.jumpX  s    
 15%%f-r   c              #    "   V P                    Fo  pV P                  V4      '       d#   V P                  V4       V P                  V4       V P                  P
                  P                  VP                  4       Vx  Kq  	  R # 5ir   )r}  _use_new_block_guard_with_as_start_new_blockr  r
   r   r	   r   r  s   & r   r  ControlFlowAnalysis._iter_inst_  sa     MMD""4((##D)%%d+NN&&t{{3J "s   BBc                    VP                   V P                  P                  9   d   R pM$VP                  \        9   d   R pMV P
                  pRV n        V# )TF)r	   r}  labelsr  NEW_BLOCKERSr  )r   r  ress   && r   r  "ControlFlowAnalysis._use_new_blockg  sF    ;;$--...C[[L(C''C %
r   c                    \        VP                  4      V n        V P                  V P                  VP                  &   V P                  P                  VP                  4       R # r   )r   r	   r  r~  r  r   r  s   &&r   r  $ControlFlowAnalysis._start_new_blockr  s>     -#'>>DKK T[[)r   c                    VP                   R8X  d>   V P                  VP                  ,          P                   pVR8w  d   Rp\        V4      hR# R# )zChecks if the next instruction after a SETUP_WITH is something other
than a POP_TOP, if it is something else it'll be some sort of store
which is not supported (this corresponds to `with CTXMGR as VAR(S)`).
SETUP_WITHPOP_TOPzGThe 'with (context manager) as (variable):' construct is not supported.N)r  r}  nextr   )r   current_instnext_opr  s   &&  r   r  "ControlFlowAnalysis._guard_with_asw  sR     ,.mmL$5$56==G)#$ 's++	 $ /r   c                    VP                  4       pV P                  P                  V4       V P                  P                  VP                  V34       V P                  VP                  4       R V n        R# TN)get_jump_targetr  r   r   r	   r  r  r  r   r  ends   && r   op_SETUP_LOOP!ControlFlowAnalysis.op_SETUP_LOOP  Y    ""$$DKK-. 			$)) $r   c                    VP                  4       pV P                  P                  V4       V P                  P                  VP                  V34       V P                  VP                  4       R V n        R# r  )r  r  r   r  r	   r  r  r  r  s   && r   op_SETUP_WITH!ControlFlowAnalysis.op_SETUP_WITH  r  r   c                :    V P                   P                  4        R # r   )r  r   r  s   &&r   op_POP_BLOCK ControlFlowAnalysis.op_POP_BLOCK  s    r   c                    V P                  VP                  4       4       V P                  VP                  4       R V n        R# r  r  r  r  r  r  s   &&r   op_FOR_ITERControlFlowAnalysis.op_FOR_ITER  /    		$&&()		$)) $r   c                    V P                  VP                  4       4       V P                  VP                  4       R V n        R# r  r  r  s   &&r   _op_ABSOLUTE_JUMP_IF(ControlFlowAnalysis._op_ABSOLUTE_JUMP_IF  r  r   c                    V P                  VP                  4       4       V P                  VP                  ^R7       RV n        R# )r  )r  TNr  r  s   &&r   _op_ABSOLUTE_JUMP_OR_POP,ControlFlowAnalysis._op_ABSOLUTE_JUMP_OR_POP  s3    		$&&()		$))!	$ $r   c                R    V P                  VP                  4       4       R V n        R# r  r  r  r  r  s   &&r   op_JUMP_ABSOLUTE$ControlFlowAnalysis.op_JUMP_ABSOLUTE      		$&&() $r   c                R    V P                  VP                  4       4       R V n        R# r  r  r  s   &&r   op_JUMP_FORWARD#ControlFlowAnalysis.op_JUMP_FORWARD  r  r   c                6    R V P                   n        R V n        R# r  r  r   r  r  s   &&r   op_RETURN_VALUE#ControlFlowAnalysis.op_RETURN_VALUE      %)" $r   c                6    R V P                   n        R V n        R# r  r  r  s   &&r   op_RETURN_CONST#ControlFlowAnalysis.op_RETURN_CONST  s    )-DNN&$(D!r   c                6    R V P                   n        R V n        R# r  r  r  s   &&r   op_RAISE_VARARGS$ControlFlowAnalysis.op_RAISE_VARARGS  r  r   c                X    V P                  V P                  R,          4       RV n        R# )r  TNrJ  )r  r  r  r  s   &&r   op_BREAK_LOOP!ControlFlowAnalysis.op_BREAK_LOOP  s!    		$""2&' $r   )r  r  r  r   r  r   r~  r  r}  r0  r  r  r   )r   )      r     r     )r  
   r     )+r   r   r    r!   r4   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  op_POP_JUMP_IF_FALSEop_POP_JUMP_IF_TRUEop_JUMP_IF_FALSEop_JUMP_IF_TRUEop_POP_JUMP_FORWARD_IF_FALSEop_POP_JUMP_BACKWARD_IF_FALSEop_POP_JUMP_FORWARD_IF_TRUEop_POP_JUMP_BACKWARD_IF_TRUEr  op_JUMP_IF_FALSE_OR_POPop_JUMP_IF_TRUE_OR_POPr  r  op_JUMP_BACKWARDr  r   r  NotImplementedErrorr  r  r"   r#   r$   s   @r   r{  r{    s      !%+#<0|5	*

,%%%
%
 0.+*O#7 $8!"6#7 %
 75%% '% //	) 
(	(!),,%% %r   r{  )r  )
SETUP_LOOPFOR_ITERr  BEFORE_WITHLOAD_SPECIAL)r  r  r  r  )r  r  r  r  )r   r=  r*   r
   )collectionsr  r   numba.core.irr   numba.core.errorsr   numba.core.utilsr   	frozensetr  r  r;  r   
namedtupler'   defaultdictr7   rH   r{  r3   r   r   <module>r     s      
  . & 
  L 66  L i
((f .!;!!&"HJ !(A// A2C
&f C
&Lr%& r%r   