class_docstr: Applies separate linear tranformations to the incoming data dictionary.
  
  For key :math:`\kappa`, it computes
  
  .. math::
      \mathbf{x}^{\prime}_{\kappa} = \mathbf{x}_{\kappa}
      \mathbf{W}^{\top}_{\kappa} + \mathbf{b}_{\kappa}.
  
  It supports lazy initialization and customizable weight and bias
  initialization.
  
  Args:
      in_channels (int or Dict[Any, int]): Size of each input sample. If
          passed an integer, :obj:`types` will be a mandatory argument.
          initialized lazily in case it is given as :obj:`-1`.
      out_channels (int): Size of each output sample.
      types (List[Any], optional): The keys of the input dictionary.
          (default: :obj:`None`)
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.Linear`.
class_docstr_tok: ["Applies","separate","linear","tranformations","to","the","incoming","data","dictionary",".","For","key",":","math",":","`","\\kappa","`",",","it","computes","..","math",":",":","\\mathbf","{","x","}","^","{","\\prime","}","_","{","\\kappa","}","=","\\mathbf","{","x","}","_","{","\\kappa","}","\\mathbf","{","W","}","^","{","\\top","}","_","{","\\kappa","}","+","\\mathbf","{","b","}","_","{","\\kappa","}",".","It","supports","lazy","initialization","and","customizable","weight","and","bias","initialization",".","Args",":","in_channels","(","int","or","Dict","[","Any",",","int","]",")",":","Size","of","each","input","sample",".","If","passed","an","integer",",",":","obj",":","`","types","`","will","be","a","mandatory","argument",".","initialized","lazily","in","case","it","is","given","as",":","obj",":","`","-1","`",".","out_channels","(","int",")",":","Size","of","each","output","sample",".","types","(","List","[","Any","]",",","optional",")",":","The","keys","of","the","input","dictionary",".","(","default",":",":","obj",":","`","None","`",")","*","*","kwargs","(","optional",")",":","Additional","arguments","of",":","class",":","`","torch_geometric.nn.Linear","`","."]
docstr: Forward pass.
  
  Args:
      x_dict (Dict[Any, torch.Tensor]): A dictionary holding input
          features for each individual type.
docstr_tok: ["Forward","pass",".","Args",":","x_dict","(","Dict","[","Any",",","torch.Tensor","]",")",":","A","dictionary","holding","input","features","for","each","individual","type","."]
code: def forward(
      self,
      x_dict: Dict[str, Tensor],
  ) -> Dict[str, Tensor]:
      r"""Forward pass.
  
      Args:
          x_dict (Dict[Any, torch.Tensor]): A dictionary holding input
              features for each individual type.
      """
      out_dict = {}
  
      # Only apply fused kernel for more than 10 types, otherwise use
      # sequential computation (which is generally faster for these cases).
      use_segment_matmul = torch_geometric.backend.use_segment_matmul
      if use_segment_matmul is None:
          use_segment_matmul = len(x_dict) >= 10
  
      if (
          use_segment_matmul
          and torch_geometric.typing.WITH_GMM
          and not is_compiling()
          and not torch.jit.is_scripting()
      ):
          xs, weights, biases = [], [], []
          for key, lin in self.lins.items():
              if key in x_dict:
                  xs.append(x_dict[key])
                  weights.append(lin.weight.t())
                  biases.append(lin.bias)
          biases = None if biases[0] is None else biases
          outs = pyg_lib.ops.grouped_matmul(xs, weights, biases)
          for key, out in zip(x_dict.keys(), outs):
              if key in x_dict:
                  out_dict[key] = out
      else:
          for key, lin in self.lins.items():
              if key in x_dict:
                  out_dict[key] = lin(x_dict[key])
  
      return out_dict
  
imports: import copy
  import math
  from typing import Any, Dict, Optional, Union
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn.parameter import Parameter
  import torch_geometric.backend
  import torch_geometric.typing
  from torch_geometric import is_compiling
  from torch_geometric.nn import inits
  from torch_geometric.typing import pyg_lib
  from torch_geometric.utils import index_sort, scatter
  from torch_geometric.utils.sparse import index2ptr
label_desc: Use image node_id 3 for calling the HeteroDictLinear obj's underlying member method code with example usage: obj.forward(x_dict) and returns: out_dict