class_docstr: An aggregation operator that takes the feature-wise variance across a
  set of elements.
  
  .. math::
      \mathrm{var}(\mathcal{X}) = \mathrm{mean}(\{ \mathbf{x}_i^2 : x \in
      \mathcal{X} \}) - \mathrm{mean}(\mathcal{X})^2.
  
  Args:
      semi_grad (bool, optional): If set to :obj:`True`, will turn off
          gradient calculation during :math:`E[X^2]` computation. Therefore,
          only semi-gradients are used during backpropagation. Useful for
          saving memory and accelerating backward computation.
          (default: :obj:`False`)
code: def forward(
      self,
      x: Tensor,
      index: Optional[Tensor] = None,
      ptr: Optional[Tensor] = None,
      dim_size: Optional[int] = None,
      dim: int = -2,
  ) -> Tensor:
      mean = self.reduce(x, index, ptr, dim_size, dim, reduce="mean")
      if self.semi_grad:
          with torch.no_grad():
              mean2 = self.reduce(
                  x * x, index, ptr, dim_size, dim, "mean"
              )
      else:
          mean2 = self.reduce(x * x, index, ptr, dim_size, dim, "mean")
      return mean2 - mean * mean
  
imports: import math
  from typing import Optional
  import torch
  from torch import Tensor
  from torch.nn import Parameter
  from torch_geometric.nn.aggr import Aggregation
  from torch_geometric.utils import softmax
label_desc: Use image node_id 2 for calling the VarAggregation obj's underlying member method code with example usage: obj.forward(x, index, ptr, dim_size, dim) and returns: unknown