o
    2h
                     @   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   hasannoStaticORIG_DEFINITIONS
isinstancectxgastLoadr   replace_as_expression)selfnode r   k/var/www/html/chatgem/venv/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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   tgtresultstemplate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   r1   )
r/   r    tensorflow.python.autograph.corer    tensorflow.python.autograph.pyctr   r   Baser   r1   r   r   r   r   <module>   s   H