code: def proje_interaction(
      h: torch.FloatTensor,
      r: torch.FloatTensor,
      t: torch.FloatTensor,
      d_e: torch.FloatTensor,
      d_r: torch.FloatTensor,
      b_c: torch.FloatTensor,
      b_p: torch.FloatTensor,
      activation: nn.Module,
  ) -> torch.FloatTensor:
      r"""Evaluate the ProjE interaction function.
  
      .. math::
  
          f(h, r, t) = g(t z(D_e h + D_r r + b_c) + b_p)
  
      :param h: shape: (`*batch_dims`, dim)
          The head representations.
      :param r: shape: (`*batch_dims`, dim)
          The relation representations.
      :param t: shape: (`*batch_dims`, dim)
          The tail representations.
      :param d_e: shape: (dim,)
          Global entity projection.
      :param d_r: shape: (dim,)
          Global relation projection.
      :param b_c: shape: (dim,)
          Global combination bias.
      :param b_p: shape: scalar
          Final score bias
      :param activation:
          The activation function.
  
      :return: shape: batch_dims
          The scores.
      """
      # global projections
      h = einsum("...d, d -> ...d", h, d_e)
      r = einsum("...d, d -> ...d", r, d_r)
  
      # combination, shape: (*batch_dims, d)
      x = activation(tensor_sum(h, r, b_c))
  
      # dot product with t
      return einsum("...d, ...d -> ...", x, t) + b_p
  
imports: from __future__ import annotations
  import functools
  from typing import Optional, Tuple, Union
  import numpy
  import torch
  from torch import broadcast_tensors, nn
  from .compute_kernel import batched_dot
  from .sim import KG2E_SIMILARITIES
  from ..typing import GaussianDistribution
  from ..utils import clamp_norm, einsum, is_cudnn_error, make_ones_like, negative_norm, negative_norm_of_sum, project_entity, tensor_product, tensor_sum
label_desc: Use image node_id 13 for calling a global function with example usage: proje_interaction(h, r, t, d_e, d_r, b_c, b_p, activation) and returns: unknown