o
    ?e
                     @   sN   d Z ddlZddlmZ ddlmZ ddlmZ G dd dejZdd	 Z	dS )
z'Overloads all variable read operations.    N)	converter)anno)	templatesc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	VariableAccessTransformera  Rewrites basic symbol reads.

  This transformer rewrites variable reads with a "read" operator which allows
  tracking activity.

  Example:

  For a basic statement:

      a = b + c

  This is translated to:

      a = ld(b) + ld(c)

  Augmented assignment operations also introduce a `ld` operator:

      a += b

  The assignment target also receives an operator to properly represent the
  read:

      a = ld(a)
      a += ld(b)
  c                 C   s4   t |t jjs
|S t|jtjrtj	d|d}|S )Nzag__.ld(var_))var_)
r   ZhasannoZStaticZORIG_DEFINITIONS
isinstancectxgastLoadr   Zreplace_as_expression)selfnode r   q/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/autograph/converters/variables.py
visit_Name3   s
   z$VariableAccessTransformer.visit_Namec              
      s   |  |}g  |jD ]}t|tjr | q
 s|S g } D ]}d}|tj||tj	|j
d dd q  fdd|jD }|rK|tj|d |S )Nz/
        var_ = ag__.Undefined(var_name)
      )kind)r   var_namec                    s   g | ]}| vr|qS r   r   ).0nZrewrite_targetsr   r   
<listcomp>N   s    z:VariableAccessTransformer.visit_Delete.<locals>.<listcomp>)targets)generic_visitr   r   r	   Nameappendextendr   replaceConstantidDelete)r   r   ZtgtresultstemplateZremaining_targetsr   r   r   visit_Delete;   s$   



z&VariableAccessTransformer.visit_Deletec                 C   s6   t |jtjrd}tj||j|d}|S | |}|S )Nz5
        var_ = ag__.ld(var_)
        original
      )r   original)r   targetr	   r   r   r   r   )r   r   r    r   r   r   visit_AugAssignT   s   
z)VariableAccessTransformer.visit_AugAssignN)__name__
__module____qualname____doc__r   r!   r$   r   r   r   r   r      s
    r   c                 C   s   t || S )N)r   visit)r   r   r   r   r   	transform`   s   r*   )
r(   r	   Z tensorflow.python.autograph.corer   Z tensorflow.python.autograph.pyctr   r   ZBaser   r*   r   r   r   r   <module>   s   H