o
    ®Ÿ?e{  ã                   @   sz   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	„ d	eƒZG d
d„ dejƒZdd„ ZdS )z(Lowers break statements to conditionals.é    )Ú	converter)Úanno)Ú
qual_names)Ú	templates)Úactivity)ÚNodeAnnoc                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_Breakc                 C   s   d| _ d | _d S )NF©ÚusedÚcontrol_var_name©Úself© r   úx/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/autograph/converters/break_statements.pyÚ__init__   s   
z_Break.__init__c                 C   s   d| j | jf S )Nzused: %s, var: %sr	   r   r   r   r   Ú__repr__   s   z_Break.__repr__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s    r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚBreakTransformerz<Canonicalizes break statements into additional conditionals.c                 C   s*   d| j t _| j t j}d}tj||dS )NTz*
      var_name = True
      continue
    ©Úvar_name)Ústater   r
   r   r   Úreplace)r   Únoder   Útemplater   r   r   Úvisit_Break&   s   zBreakTransformer.visit_Breakc                 C   s    |s|S d}t j|||d}|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   r   r   r   Ú_guard_if_present0   s   ýz"BreakTransformer._guard_if_presentc                 C   sF   | j t  ¡  || j t _|  |¡}| j t j}| j t  ¡  ||fS ©N)r   r   Zenterr   Úvisit_blockr
   Úexit)r   ÚnodesÚ	break_varÚ
break_usedr   r   r   Ú_process_body?   s   
zBreakTransformer._process_bodyc           	      C   sÚ   |}t  |tj¡}| jj d|j¡}|  |j	¡|_	|  
|j|¡\|_}|  |j¡|_|sId}tj||j	|j|jd}|d }t  ||t jj¡ |S |  |j|¡}d}tj|||j	|j|d}|d }t  ||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   r'   r(   r)   é   )r   Úgetannor   Ú
BODY_SCOPEÚctxÚnamerÚ
new_symbolÚ
referencedÚvisitr'   r%   r(   r    r)   r   r   ÚcopyannoÚBasicÚ
DIRECTIVESr   )	r   r   Úoriginal_nodeÚscoper#   r$   r   Znew_while_nodeÚguarded_orelser   r   r   Úvisit_WhileG   s4   ÿûzBreakTransformer.visit_Whilec           
      C   s"  |}t  |tj¡}| jj d|j¡}|  |j	¡|_	|  |j
¡|_
|  |j|¡\|_}|  |j¡|_|s[d}tj||j
|j	|j|jd}|d }t  ||t jj¡ t  ||t jj¡ |S |  |j|¡}tjd|d}	d}tj|||j
|j	|j|d}|d	 }t  |t jj|	¡ t  ||t jj¡ |S )
Nr&   zB
        for target in iter_:
          body
        orelse
      )Úiter_Útargetr(   r)   r   znot var_namer   ze
      var_name = False
      for target in iter_:
        (var_name,)
        body
      orelse
    )r   r9   r:   r(   r)   r*   )r   r+   r   r,   r-   r.   r/   r0   r1   r:   Úiterr%   r(   r    r)   r   r   r2   r3   ZEXTRA_LOOP_TESTr4   r   Zreplace_as_expressionZsetanno)
r   r   r5   r6   r#   r$   r   Znew_for_noder7   Z
extra_testr   r   r   Ú	visit_Foru   sJ   ûÿúzBreakTransformer.visit_ForN)	r   r   r   Ú__doc__r   r   r%   r8   r<   r   r   r   r   r   #   s    
.r   c                 C   s.   t  | ¡} t | |d ¡} t|ƒ}| | ¡} | S r   )r   Úresolver   r   r1   )r   r-   Ztransformerr   r   r   Ú	transform³   s
   

r?   N)r=   Z tensorflow.python.autograph.corer   Z tensorflow.python.autograph.pyctr   r   r   Z0tensorflow.python.autograph.pyct.static_analysisr   Z6tensorflow.python.autograph.pyct.static_analysis.annosr   Úobjectr   ZBaser   r?   r   r   r   r   Ú<module>   s   
 