class_docstr: Graph convolution module used in the GCMC model.
  
  Parameters
  ----------
  in_feats : int
      Input feature size.
  out_feats : int
      Output feature size.
  weight : bool, optional
      If True, apply a linear layer. Otherwise, aggregating the messages
      without a weight matrix or with an shared weight provided by caller.
  device: str, optional
      Which device to put data in. Useful in mix_cpu_gpu training and
      multi-gpu training
class_docstr_tok: ["Graph","convolution","module","used","in","the","GCMC","model",".","Parameters","--","--","--","--","--","in_feats",":","int","Input","feature","size",".","out_feats",":","int","Output","feature","size",".","weight",":","bool",",","optional","If","True",",","apply","a","linear","layer",".","Otherwise",",","aggregating","the","messages","without","a","weight","matrix","or","with","an","shared","weight","provided","by","caller",".","device",":","str",",","optional","Which","device","to","put","data","in",".","Useful","in","mix_cpu_gpu","training","and","multi-gpu","training"]
docstr: Compute graph convolution.
  
  Normalizer constant :math:`c_{ij}` is stored as two node data "ci"
  and "cj".
  
  Parameters
  ----------
  graph : DGLGraph
      The graph.
  feat : torch.Tensor
      The input feature
  weight : torch.Tensor, optional
      Optional external weight tensor.
  dropout : torch.nn.Dropout, optional
      Optional external dropout layer.
  
  Returns
  -------
  torch.Tensor
      The output feature
docstr_tok: ["Compute","graph","convolution",".","Normalizer","constant",":","math",":","`","c_","{","ij","}","`","is","stored","as","two","node","data","``","ci","''","and","``","cj","''",".","Parameters","--","--","--","--","--","graph",":","DGLGraph","The","graph",".","feat",":","torch.Tensor","The","input","feature","weight",":","torch.Tensor",",","optional","Optional","external","weight","tensor",".","dropout",":","torch.nn.Dropout",",","optional","Optional","external","dropout","layer",".","Returns","--","--","--","-","torch.Tensor","The","output","feature"]
code: def forward(self, graph, feat, weight=None):
      """Compute graph convolution.
  
      Normalizer constant :math:`c_{ij}` is stored as two node data "ci"
      and "cj".
  
      Parameters
      ----------
      graph : DGLGraph
          The graph.
      feat : torch.Tensor
          The input feature
      weight : torch.Tensor, optional
          Optional external weight tensor.
      dropout : torch.nn.Dropout, optional
          Optional external dropout layer.
  
      Returns
      -------
      torch.Tensor
          The output feature
      """
      with graph.local_scope():
          if isinstance(feat, tuple):
              feat, _ = feat  # dst feature not used
          c_j = graph.srcdata["cj"]
          c_i = graph.dstdata["ci"]
          if self.device is not None:
              c_j = c_j.to(self.device)
              c_i = c_i.to(self.device)
          if weight is not None:
              if self.weight is not None:
                  raise DGLError(
                      "External weight is provided while at the same time"
                      "the module has defined its own weight parameter."
                      "Please create the module with flag weight=False."
                  )
          else:
              weight = self.weight
  
          if weight is not None:
              feat = dot_or_identity(feat, weight, self.device)
  
          feat = feat * self.dropout(c_j)
          graph.srcdata["h"] = feat
          graph.update_all(
              fn.copy_u(u="h", out="m"), fn.sum(msg="m", out="h")
          )
          rst = graph.dstdata["h"]
          rst = rst * c_i
  
      return rst
  
imports: import dgl.function
  import dgl.nn.pytorch
  from dgl import DGLError
  import torch
  import torch.nn
  from torch.nn import init
  from .utils import get_activation
label_desc: Use image node_id 3 for calling the GCMCGraphConv obj's underlying member method code with example usage: obj.forward(graph, feat, weight) and returns: rst