class_docstr: Aggregation layer for message passing withing GNN.
  
  :param aggregate: The aggregation function to use (max, mean, sum).
  :param pooling_mask: Multiplicative pooling mask for efficient aggregation computation.
docstr: Validation function for efficient scatter implementation.
  
  :param t: Aggregation source tensor.
  :param aggr_scatter: Aggregation result of scatter.
docstr_tok: ["Validation","function","for","efficient","scatter","implementation",".",":","param","t",":","Aggregation","source","tensor",".",":","param","aggr_scatter",":","Aggregation","result","of","scatter","."]
code: def _assert_scatter_output(
      self, t: torch.Tensor, aggr_scatter: torch.Tensor
  ) -> None:
      """Validation function for efficient scatter implementation.
  
      :param t: Aggregation source tensor.
      :param aggr_scatter: Aggregation result of scatter.
      """
      aggr_2 = self.aggregate(
          t.unsqueeze(1) * self.pooling_mask.to(t.device), dim=-2
      )
      assert torch.allclose(aggr_scatter, aggr_2)
  
imports: from typing import Any, List, Tuple, Union, Sequence, Dict
  import numpy
  import torch
  from torch import nn
  from torch_scatter import scatter
  from maze.core.annotations import override
  from maze.core.utils.factory import Factory
  from maze.perception.blocks.shape_normalization import ShapeNormalizationBlock
label_desc: Use image node_id 5 for calling the AggregationLayer obj's underlying member method code with example usage: obj._assert_scatter_output(t, aggr_scatter) without return types