code: def setup(self, stage=None):
      # Assign train/val datasets for use in dataloaders
      if stage == "fit" or stage is None:
          mnist_full = MNIST(
              self.data_dir, train=True, transform=self.transform
          )
          self.mnist_train, self.mnist_val = random_split(
              mnist_full, [55000, 5000]
          )
  
      # Assign test dataset for use in dataloader(s)
      if stage == "test" or stage is None:
          self.mnist_test = MNIST(
              self.data_dir, train=False, transform=self.transform
          )
  
imports: import math
  import os
  import torch
  from filelock import FileLock
  import pytorch_lightning
  from torch.nn import functional
  from torch.utils.data import DataLoader, random_split
  from torchmetrics import Accuracy
  from torchvision import transforms
  from torchvision.datasets import MNIST
  from ray.tune.integration.pytorch_lightning import TuneReportCheckpointCallback
  from ray import train, tune
label_desc: Use image node_id 3 for calling the MNISTDataModule obj's underlying member method code with example usage: obj.setup(stage) without return types