code: def dict_forward(
      self,
      x_dict: Dict[Union[NodeType, EdgeType], Tensor],
  ) -> Dict[Union[NodeType, EdgeType], Tensor]:
      if not torch_geometric.typing.WITH_PYG_LIB or is_compiling():
          return {
              key: F.linear(
                  x_dict[key], self.hetero_module.weight[i].t()
              )
              + self.hetero_module.bias[i]
              for i, key in enumerate(self.types)
          }
  
      x = torch.cat([x_dict[key] for key in self.types], dim=0)
      sizes = [x_dict[key].size(0) for key in self.types]
      type_vec = torch.arange(len(self.types), device=x.device)
      size = torch.tensor(sizes, device=x.device)
      type_vec = type_vec.repeat_interleave(size)
      outs = self.hetero_module(x, type_vec).split(sizes)
      return {key: out for key, out in zip(self.types, outs)}
  
imports: import copy
  import warnings
  from typing import Dict, List, Optional, Union
  import torch
  import torch.nn.functional
  from torch import Tensor
  import torch_geometric
  from torch_geometric import is_compiling
  from torch_geometric.typing import EdgeType, NodeType, OptTensor
  from torch_geometric.utils import cumsum, scatter
label_desc: Use image node_id 3 for calling the ToHeteroLinear obj's underlying member method code with example usage: obj.dict_forward(x_dict) and returns: unknown, unknown