
    BVh{                         d 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 ddl	m
Z
  G d d	e      Z G d
 dej                        Zd Zy)z(Lowers break statements to conditionals.    )	converter)anno)
qual_names)	templates)activity)NodeAnnoc                       e Zd Zd Zd Zy)_Breakc                      d| _         d | _        y )NFusedcontrol_var_nameselfs    g/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/autograph/converters/break_statements.py__init__z_Break.__init__   s    DI D    c                 :    d| j                   d| j                  S )Nzused: z, var: r   r   s    r   __repr__z_Break.__repr__   s    "&))T-B-BCCr   N)__name__
__module____qualname__r   r    r   r   r
   r
      s    !Dr   r
   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)BreakTransformerz<Canonicalizes break statements into additional conditionals.c                     d| j                   t           _        | j                   t           j                  }d}t	        j
                  ||      S )NTz*
      var_name = True
      continue
    var_name)stater
   r   r   r   replace)r   noder   templates       r   visit_BreakzBreakTransformer.visit_Break&   sC    "DJJvzz&!22HH X99r   c                 B    |s|S d}t        j                  |||      }|S )z5Prevents the block from executing if var_name is set.z0
        if not var_name:
          block
      )r   block)r   r    )r   r%   r   r"   r!   s        r   _guard_if_presentz"BreakTransformer._guard_if_present0   s3    l
H D Kr   c                    | j                   t           j                          || j                   t           _        | j	                  |      }| j                   t           j
                  }| j                   t           j                          ||fS N)r   r
   enterr   visit_blockr   exit)r   nodes	break_var
break_useds       r   _process_bodyzBreakTransformer._process_body?   sl    JJv*3DJJv'U#EF#((JJJv*r   c                 \   |}t        j                  |t        j                        }| j                  j
                  j                  d|j                        }| j                  |j                        |_	        | j                  |j                  |      \  |_        }| j                  |j                        |_        |sod}t        j                  ||j                  |j                  |j                        }|d   }t        j                   ||t         j"                  j$                         |S | j'                  |j                  |      }d}t        j                  |||j                  |j                  |      }|d   }t        j                   ||t         j"                  j$                         |S )Nbreak_z9
        while test:
          body
        orelse
      )testbodyorelser   zY
      var_name = False
      while not var_name and test:
        body
      orelse
    )r   r2   r3   r4      )r   getannor   
BODY_SCOPEctxnamer
new_symbol
referencedvisitr2   r/   r3   r*   r4   r   r    copyannoBasic
DIRECTIVESr&   )	r   r!   original_nodescoper-   r.   r"   new_while_nodeguarded_orelses	            r   visit_WhilezBreakTransformer.visit_WhileG   sR   MLLx223E))(E4D4DEI

499%DI ..tyy)DDIz""4;;/DK
h
 
4;;Hd Awn
mmM>4::3H3HIk ++DKKCNH YYYYD !WNMM-1F1FGKr   c                    |}t        j                  |t        j                        }| j                  j
                  j                  d|j                        }| j                  |j                        |_	        | j                  |j                        |_
        | j                  |j                  |      \  |_        }| j                  |j                        |_        |sd}t        j                   ||j                  |j                  |j                  |j                        }|d   }t        j"                  ||t         j$                  j&                         t        j"                  ||t         j$                  j(                         |S | j+                  |j                  |      }t        j,                  d|      }	d}t        j                   |||j                  |j                  |j                  |      }|d	   }t        j.                  |t         j$                  j&                  |	       t        j"                  ||t         j$                  j(                         |S )
Nr1   zB
        for target in iter_:
          body
        orelse
      )iter_targetr3   r4   r   znot var_namer   ze
      var_name = False
      for target in iter_:
        (var_name,)
        body
      orelse
    )r   rF   rG   r3   r4   r5   )r   r6   r   r7   r8   r9   r:   r;   r<   rG   iterr/   r3   r*   r4   r   r    r=   r>   EXTRA_LOOP_TESTr?   r&   replace_as_expressionsetanno)
r   r!   r@   rA   r-   r.   r"   new_for_noderC   
extra_tests
             r   	visit_ForzBreakTransformer.visit_Foru   s   MLLx223E))(E4D4DEI**T[[)DK

499%DI ..tyy)DDIz""4;;/DK
h
 
		yyd !Wl
mmM<1K1KL
mmM<1F1FGk ++DKKCN00,JH ii{{YYD 7LLLtzz99:FMM-tzz/D/DEKr   N)	r   r   r   __doc__r#   r&   r/   rD   rN   r   r   r   r   r   #   s    D:,\;r   r   c                     t        j                  |       } t        j                  | |d       } t        |      }|j	                  |       } | S r(   )r   resolver   r   r<   )r!   r8   transformers      r   	transformrS      sE    			D	!$			$T	*$ %+			4	 $	+r   N)rO    tensorflow.python.autograph.corer    tensorflow.python.autograph.pyctr   r   r   0tensorflow.python.autograph.pyct.static_analysisr   6tensorflow.python.autograph.pyct.static_analysis.annosr   objectr
   Baser   rS   r   r   r   <module>rZ      sB    / 6 1 7 6 E KDV DMy~~ M`r   