class_docstr: Implement the standardisation with mean and standard deviation.
docstr: Apply standardisation with mean and standard deviation to input `x`.
  
  :param x: Input samples to standardise.
  :param y: Label data, will not be affected by this preprocessing.
  :return: Standardised input samples and unmodified labels.
code: def forward(
      self, x: "torch.Tensor", y: Optional["torch.Tensor"] = None
  ) -> Tuple["torch.Tensor", Optional["torch.Tensor"]]:
      """
      Apply standardisation with mean and standard deviation to input `x`.
  
      :param x: Input samples to standardise.
      :param y: Label data, will not be affected by this preprocessing.
      :return: Standardised input samples and unmodified labels.
      """
      import torch
  
      if self._broadcastable_mean is None:
          (
              self._broadcastable_mean,
              self._broadcastable_std,
          ) = broadcastable_mean_std(x, self.mean, self.std)
  
      x_norm = x - torch.tensor(
          self._broadcastable_mean,
          device=self._device,
          dtype=torch.float32,
      )
      x_norm = x_norm / torch.tensor(
          self._broadcastable_std,
          device=self._device,
          dtype=torch.float32,
      )
  
      return x_norm, y
  
file_path: adversarial-robustness-toolbox/art/preprocessing/standardisation_mean_std/pytorch.py
imports: import logging
  from typing import TYPE_CHECKING, Optional, Tuple, Union
  import numpy
  from art.config import ART_NUMPY_DTYPE
  from art.preprocessing.preprocessing import PreprocessorPyTorch
  from art.preprocessing.standardisation_mean_std.utils import broadcastable_mean_std
label_desc: Use image node_id 2 for calling the StandardisationMeanStdPyTorch obj's underlying member method code with example usage: obj.forward(x, y) and returns: x_norm,  y