
    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      Z G d dej                        Zd Zy)zHCanonicalizes continue statements by de-sugaring into a control boolean.    )	converter)anno)
qual_names)	templates)activity)NodeAnnoc                       e Zd Zd Zd Zy)	_Continuec                      d| _         d | _        y NF)usedcontrol_var_nameselfs    j/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/autograph/converters/continue_statements.py__init__z_Continue.__init__   s    DI D    c                 N    dj                  | j                  | j                        S )Nz<_Continue(used: {}, var: {})>)formatr   r   r   s    r   __repr__z_Continue.__repr__   s&    +22499373H3HJ Jr   N)__name__
__module____qualname__r   r    r   r   r
   r
      s    !Jr   r
   c                       e Zd ZdZd Zy)_Blocka  Tracks information about lexical blocks as they are visited in the AST.

  Mainly, this object tracks the creation of block guards that replace
  `continue` statements (e.g. `if not continue_:`).

  Attributes:
    create_guard_current: bool, whether to create a guard for the current
      statement.
    create_guard_next: bool, whether to create a guard for the next
      statement.
    is_loop_type: bool, whether this block is the body of a loop.
  c                 .    d| _         d| _        d| _        y r   )is_loop_typecreate_guard_currentcreate_guard_nextr   s    r   r   z_Block.__init__2   s    D %D"Dr   N)r   r   r   __doc__r   r   r   r   r   r   $   s    #r   r   c                   L    e 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y)#ContinueCanonicalizationTransformerz?Canonicalizes continue statements into additional conditionals.c                    d| j                   t           _        t        | j                   t           j
                        D ]  }d|_        |j                  s n d}t        j                  || j                   t           j                        S )NTz
      var_name = True
    var_name)stater
   r   reversedr   stackr    r   r   replacer   )r   nodeblocktemplates       r   visit_Continuez2ContinueCanonicalizationTransformer.visit_Continue;   s~    !%DJJy$**V,223  !%e			H 4::i0AAC Cr   c                 @   | j                   t           j                  r~| j                   t           }|j                  }|j
                  |_        d|_        |rEd}t        j                  || j                   t           j                  |      \  }||j                  fS |d fS )NFz>
          if not var_name:
            original_node
        )r&   original_node)
r'   r
   r   r   r   r    r   r*   r   body)r   r+   r,   should_wrap_currentr-   conds         r   _postprocess_statementz:ContinueCanonicalizationTransformer._postprocess_statementK   s    zz)!!jj e!66#(#:#:e  %e	 !!ZZ	*;;  TYY:r   c                    | j                   t           j                          | j                   t           j                          d| j                   t           _        t        j                  |t        j                        }| j                  j                  j                  d|j                        }|| j                   t           _        | j                  || j                        }| j                   t           j                   rd}t#        j$                  ||      }||z   }| j                   t           j'                          | j                   t           j'                          |S )NT	continue_after_visitz 
        var_name = False
      r%   )r'   r
   enterr   r   r   getannor   
BODY_SCOPEctxnamer
new_symbol
referencedr   visit_blockr4   r   r   r*   exit)r   r+   nodesscopecontinue_varr-   control_var_inits          r   _visit_loop_bodyz4ContinueCanonicalizationTransformer._visit_loop_body^   s   JJy!JJv&*DJJv#LLx223E88>>,,[%:J:JKL-9DJJy*U0K0KLEzz)!!
h #**8lK&eJJvJJy Lr   c                     | j                   t           j                          | j                  || j                        }| j                   t           j                          |S )Nr7   )r'   r   r9   r@   r4   rA   )r   rB   s     r   _visit_non_loop_bodyz8ContinueCanonicalizationTransformer._visit_non_loop_bodys   sL    JJvU0K0KLEJJvLr   c                     | j                  |j                        |_        | j                  ||j                        |_        | j	                  |j
                        |_        |S N)visittestrF   r1   rH   orelser   r+   s     r   visit_Whilez/ContinueCanonicalizationTransformer.visit_Whiley   sI    

499%DI%%dDII6DI++DKK8DKKr   c                    | j                  |j                        |_        | j                  |j                        |_        | j                  ||j                        |_        | j                  |j                        |_        |S rJ   )generic_visittargetiterrF   r1   rH   rM   rN   s     r   	visit_Forz-ContinueCanonicalizationTransformer.visit_For   sa    $$T[[1DK""499-DI%%dDII6DI++DKK8DKKr   c                     | j                  |j                        |_        | j                  |j                        |_        |S rJ   )rH   r1   rM   rN   s     r   visit_Ifz,ContinueCanonicalizationTransformer.visit_If   s3    ))$))4DI++DKK8DKKr   c                     | j                  |j                        |_        | j                  |j                        |_        |S rJ   )r@   itemsrH   r1   rN   s     r   
visit_Withz.ContinueCanonicalizationTransformer.visit_With   s3    !!$**-DJ))$))4DIKr   c                    | j                  |j                        |_        | j                  |j                        |_        | j                  |j                        |_        | j	                  |j
                        |_        |S rJ   )rH   r1   rM   	finalbodyr@   handlersrN   s     r   	visit_Tryz-ContinueCanonicalizationTransformer.visit_Try   s_    ))$))4DI++DKK8DK..t~~>DN$$T]]3DMKr   c                 F    | j                  |j                        |_        |S rJ   )rH   r1   rN   s     r   visit_ExceptHandlerz7ContinueCanonicalizationTransformer.visit_ExceptHandler   s    ))$))4DIKr   N)r   r   r   r!   r.   r4   rF   rH   rO   rT   rV   rY   r]   r_   r   r   r   r#   r#   8   s8    GC &*

r   r#   c                     t        j                  |       } t        j                  | |d       } t        |      j	                  |       } | S rJ   )r   resolver   r#   rK   )r+   r<   s     r   	transformrb      s@    			D	!$			$T	*$	,S	1	7	7	=$	+r   N)r!    tensorflow.python.autograph.corer    tensorflow.python.autograph.pyctr   r   r   0tensorflow.python.autograph.pyct.static_analysisr   6tensorflow.python.autograph.pyct.static_analysis.annosr   objectr
   r   Baser#   rb   r   r   r   <module>ri      sO    O 6 1 7 6 E KJ J#V #(d).. dNr   