code: def _apply_edge_weights(features, edge_weights, aggregation=None):
      features = K.expand_dims(features, axis=1)  # (B, 1, v, f)
      edge_weights = K.expand_dims(edge_weights, axis=3)  # (B, u, v, 1)
  
      out = edge_weights * features  # (B, u, v, f)
  
      if aggregation:
          out = aggregation(out, axis=2)  # (B, u, f)
      else:
          try:
              out = K.reshape(
                  out,
                  (
                      -1,
                      edge_weights.shape[1].value,
                      features.shape[-1].value
                      * features.shape[-2].value,
                  ),
              )
          except AttributeError:  # TF 2
              out = K.reshape(
                  out,
                  (
                      -1,
                      edge_weights.shape[1],
                      features.shape[-1] * features.shape[-2],
                  ),
              )
  
      return out
  
imports: import tensorflow.keras
  from qkeras import QActivation, QDense, ternary
label_desc: Use image node_id 14 for calling the GarNet obj's underlying member method code with example usage: obj._apply_edge_weights(features, edge_weights, aggregation) and returns: out