code: def compute_values(edge_compatibility, v):
    
  
    # Computes the incoming value vectors for each node by weighting them
    # according to the attention weights. These values are still segregated by
    # edge type.
    # Shape = [B, T, N, V].
    all_edge_values = tf.matmul(tf.to_float(edge_compatibility), v)
  
    # Combines the weighted value vectors together across edge types into a
    # single N x V matrix for each batch.
    output = tf.reduce_sum(all_edge_values, axis=1)  # Shape [B, N, V].
    return output
docs: Compute values. If edge compatibilities is just adjacency, we get ggnn.
  
    Args:
      edge_compatibility: A tensor of shape [batch, num_transforms, length, depth]
      v: A tensor of shape [batch, num_transforms, length, depth]
  
    Returns:
      output: A [batch, length, depth] tensor