class_docstr: Performs aggregations with one or more aggregators and combines
  aggregated results, as described in the `"Principal Neighbourhood
  Aggregation for Graph Nets" <https://arxiv.org/abs/2004.05718>`_ and
  `"Adaptive Filters and Aggregator Fusion for Efficient Graph Convolutions"
  <https://arxiv.org/abs/2104.01481>`_ papers.
  
  Args:
      aggrs (list): The list of aggregation schemes to use.
      aggrs_kwargs (dict, optional): Arguments passed to the
          respective aggregation function in case it gets automatically
          resolved. (default: :obj:`None`)
      mode (str, optional): The combine mode to use for combining
          aggregated results from multiple aggregations (:obj:`"cat"`,
          :obj:`"proj"`, :obj:`"sum"`, :obj:`"mean"`, :obj:`"max"`,
          :obj:`"min"`, :obj:`"logsumexp"`, :obj:`"std"`, :obj:`"var"`,
          :obj:`"attn"`). (default: :obj:`"cat"`)
      mode_kwargs (dict, optional): Arguments passed for the combine
          :obj:`mode`. When :obj:`"proj"` or :obj:`"attn"` is used as the
          combine :obj:`mode`, :obj:`in_channels` (int or tuple) and
          :obj:`out_channels` (int) are needed to be specified respectively
          for the size of each input sample to combine from the respective
          aggregation outputs and the size of each output sample after
          combination. When :obj:`"attn"` mode is used, :obj:`num_heads`
          (int) is needed to be specified for the number of parallel
          attention heads. (default: :obj:`None`)
class_docstr_tok: ["Performs","aggregations","with","one","or","more","aggregators","and","combines","aggregated","results",",","as","described","in","the","`","``","Principal","Neighbourhood","Aggregation","for","Graph","Nets","''","<","https",":","\/\/arxiv.org\/abs\/2004.05718",">","`","_","and","`","``","Adaptive","Filters","and","Aggregator","Fusion","for","Efficient","Graph","Convolutions","''","<","https",":","\/\/arxiv.org\/abs\/2104.01481",">","`","_","papers",".","Args",":","aggrs","(","list",")",":","The","list","of","aggregation","schemes","to","use",".","aggrs_kwargs","(","dict",",","optional",")",":","Arguments","passed","to","the","respective","aggregation","function","in","case","it","gets","automatically","resolved",".","(","default",":",":","obj",":","`","None","`",")","mode","(","str",",","optional",")",":","The","combine","mode","to","use","for","combining","aggregated","results","from","multiple","aggregations","(",":","obj",":","`","``","cat","''","`",",",":","obj",":","`","``","proj","''","`",",",":","obj",":","`","``","sum","''","`",",",":","obj",":","`","``","mean","''","`",",",":","obj",":","`","``","max","''","`",",",":","obj",":","`","``","min","''","`",",",":","obj",":","`","``","logsumexp","''","`",",",":","obj",":","`","``","std","''","`",",",":","obj",":","`","``","var","''","`",",",":","obj",":","`","``","attn","''","`",")",".","(","default",":",":","obj",":","`","``","cat","''","`",")","mode_kwargs","(","dict",",","optional",")",":","Arguments","passed","for","the","combine",":","obj",":","`","mode","`",".","When",":","obj",":","`","``","proj","''","`","or",":","obj",":","`","``","attn","''","`","is","used","as","the","combine",":","obj",":","`","mode","`",",",":","obj",":","`","in_channels","`","(","int","or","tuple",")","and",":","obj",":","`","out_channels","`","(","int",")","are","needed","to","be","specified","respectively","for","the","size","of","each","input","sample","to","combine","from","the","respective","aggregation","outputs","and","the","size","of","each","output","sample","after","combination",".","When",":","obj",":","`","``","attn","''","`","mode","is","used",",",":","obj",":","`","num_heads","`","(","int",")","is","needed","to","be","specified","for","the","number","of","parallel","attention","heads",".","(","default",":",":","obj",":","`","None","`",")"]
code: def get_out_channels(self, in_channels: int) -> int:
      if self.out_channels is not None:
          return self.out_channels
      # TODO Support having customized `out_channels` in each aggregation.
      if self.mode == "cat":
          return in_channels * len(self.aggrs)
      return in_channels
  
file_path: pytorch_geometric/torch_geometric/nn/aggr/multi.py
imports: import copy
  from typing import Any, Dict, List, Optional, Union
  import torch
  from torch import Tensor
  from torch.nn import Linear, MultiheadAttention
  from torch_geometric.nn.aggr import Aggregation
  from torch_geometric.nn.aggr.fused import FusedAggregation
  from torch_geometric.nn.dense import HeteroDictLinear
  from torch_geometric.nn.resolver import aggregation_resolver
label_desc: Use image node_id 3 for calling the MultiAggregation obj's underlying member method code with example usage: obj.get_out_channels(in_channels) and returns: in_channels, self, unknown