class_docstr: See :class:`RGCNConv`.
class_docstr_tok: ["See",":","class",":","`","RGCNConv","`","."]
code: def message(
      self, x_j: Tensor, edge_type: Tensor, edge_index_j: Tensor
  ) -> Tensor:
      weight = self.weight
      if (
          self.num_bases is not None
      ):  # Basis-decomposition =================
          weight = (self.comp @ weight.view(self.num_bases, -1)).view(
              self.num_relations, self.in_channels_l, self.out_channels
          )
  
      if (
          self.num_blocks is not None
      ):  # Block-diagonal-decomposition =======
          if not torch.is_floating_point(x_j):
              raise ValueError(
                  "Block-diagonal decomposition not supported "
                  "for non-continuous input features."
              )
  
          weight = weight[edge_type].view(
              -1, weight.size(2), weight.size(3)
          )
          x_j = x_j.view(-1, 1, weight.size(1))
          return torch.bmm(x_j, weight).view(-1, self.out_channels)
  
      else:  # No regularization/Basis-decomposition ========================
          if not torch.is_floating_point(x_j):
              weight_index = edge_type * weight.size(1) + edge_index_j
              return weight.view(-1, self.out_channels)[weight_index]
  
          return torch.bmm(
              x_j.unsqueeze(-2), weight[edge_type]
          ).squeeze(-2)
  
imports: from typing import Optional, Tuple, Union
  import torch
  from torch import Tensor
  from torch.nn import Parameter
  from torch.nn import Parameter
  import torch_geometric.backend
  import torch_geometric.typing
  from torch_geometric import is_compiling
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.inits import glorot, zeros
  from torch_geometric.typing import Adj, OptTensor, SparseTensor, pyg_lib, torch_sparse
  from torch_geometric.utils import index_sort, one_hot, scatter, spmm
  from torch_geometric.utils.sparse import index2ptr
label_desc: Use image node_id 2 for calling the FastRGCNConv obj's underlying member method code with example usage: obj.message(x_j, edge_type, edge_index_j) and returns: torch, torch, weight