code: def test_graphgym_module(tmp_path):
      import pytorch_lightning as pl
  
      load_cfg(cfg, args)
      cfg.out_dir = osp.join(tmp_path, "out_dir")
      cfg.run_dir = osp.join(tmp_path, "run_dir")
      cfg.dataset.dir = osp.join(
          "/", "tmp", "pyg_test_datasets", "Planetoid"
      )
  
      set_out_dir(cfg.out_dir, args.cfg_file)
      dump_cfg(cfg)
      set_printing()
  
      seed_everything(cfg.seed)
      auto_select_device()
      set_run_dir(cfg.out_dir)
  
      loaders = create_loader()
      assert len(loaders) == 3
  
      model = create_model()
      assert isinstance(model, pl.LightningModule)
  
      optimizer, scheduler = model.configure_optimizers()
      assert isinstance(optimizer[0], torch.optim.Adam)
      assert isinstance(
          scheduler[0], torch.optim.lr_scheduler.CosineAnnealingLR
      )
  
      cfg.params = params_count(model)
      assert cfg.params == 23883
  
      keys = {"loss", "true", "pred_score", "step_end_time"}
      # test training step
      batch = next(iter(loaders[0]))
      batch.to(model.device)
      outputs = model.training_step(batch)
      assert keys == set(outputs.keys())
      assert isinstance(outputs["loss"], torch.Tensor)
  
      # test validation step
      batch = next(iter(loaders[1]))
      batch.to(model.device)
      outputs = model.validation_step(batch)
      assert keys == set(outputs.keys())
      assert isinstance(outputs["loss"], torch.Tensor)
  
      # test test step
      batch = next(iter(loaders[2]))
      batch.to(model.device)
      outputs = model.test_step(batch)
      assert keys == set(outputs.keys())
      assert isinstance(outputs["loss"], torch.Tensor)
  
imports: import os.path
  import warnings
  from collections import namedtuple
  import pytest
  import torch
  from torch_geometric import seed_everything
  from torch_geometric.graphgym import register
  from torch_geometric.graphgym.checkpoint import get_ckpt_dir
  from torch_geometric.graphgym.config import cfg, dump_cfg, load_cfg, set_out_dir, set_run_dir
  from torch_geometric.graphgym.loader import create_loader
  from torch_geometric.graphgym.logger import LoggerCallback, set_printing
  from torch_geometric.graphgym.model_builder import create_model
  from torch_geometric.graphgym.models.gnn import FeatureEncoder, GNNStackStage
  from torch_geometric.graphgym.models.head import GNNNodeHead
  from torch_geometric.graphgym.train import GraphGymDataModule, train
  from torch_geometric.graphgym.utils import agg_runs, auto_select_device, params_count
  from torch_geometric.testing import onlyOnline, withPackage
label_desc: Use image node_id 3 for calling a global function with example usage: test_graphgym_module(tmp_path) without return types