def __call__(
        self,
        x: np.ndarray,
        y: np.ndarray | None = None,
    ) -> tuple[np.ndarray, np.ndarray | None]:
        """
        Apply StandardisationMeanStd inputs `x`.

        :param x: Input samples to standardise.
        :param y: Label data, will not be affected by this preprocessing.
        :return: Standardise input samples and unmodified labels.
        """
        if x.dtype in [np.uint8, np.uint16, np.uint32, np.uint64]:  # pragma: no cover
            raise TypeError(
                f"The data type of input data `x` is {x.dtype} and cannot represent negative values. Consider "
                f"changing the data type of the input data `x` to a type that supports negative values e.g. "
                f"np.float32."
            )

        if self._broadcastable_mean is None:
            self._broadcastable_mean, self._broadcastable_std = broadcastable_mean_std(x, self.mean, self.std)

        x_norm = x - self._broadcastable_mean
        x_norm = x_norm / self._broadcastable_std
        x_norm = x_norm.astype(ART_NUMPY_DTYPE)

        return x_norm, y

        Apply StandardisationMeanStd inputs `x`.

        :param x: Input samples to standardise.
        :param y: Label data, will not be affected by this preprocessing.
        :return: Standardise input samples and unmodified labels.
        
art/preprocessing/standardisation_mean_std/numpy.py