code: def test_model(num_classes, url):
      num_modalities = 3
      gcn_hidden_dim = [200, 200, 100]
      vcdn_hidden_dim = pow(num_classes, num_modalities)
      gcn_dropout_rate = 0.5
      gcn_lr = 5e-4
      vcdn_lr = 1e-3
      loss_function = CrossEntropyLoss(reduction="none")
  
      unimodal_encoder = []
      unimodal_decoder = []
      multimodal_decoder = None
  
      if num_classes > 2:
          root = "tests/test_data/multiomics/trainer/multi_class"
      else:
          root = "tests/test_data/multiomics/trainer/binary_class"
  
      file_names = []
      for modality in range(1, num_modalities + 1):
          file_names.append(f"{modality}_tr.csv")
          file_names.append(f"{modality}_lbl_tr.csv")
          file_names.append(f"{modality}_te.csv")
          file_names.append(f"{modality}_lbl_te.csv")
  
      dataset = SparseMultiomicsDataset(
          root=root,
          raw_file_names=file_names,
          num_modalities=num_modalities,
          num_classes=num_classes,
          edge_per_node=10,
          url=url,
          random_split=False,
          train_size=0.7,
          equal_weight=False,
          pre_transform=ToTensor(dtype=torch.float),
          target_pre_transform=ToOneHotEncoding(dtype=torch.float),
      )
  
      for modality in range(num_modalities):
          unimodal_encoder.append(
              MogonetGCN(
                  in_channels=dataset.get(modality).num_features,
                  hidden_channels=gcn_hidden_dim,
                  dropout=gcn_dropout_rate,
              )
          )
  
          unimodal_decoder.append(
              LinearClassifier(
                  in_dim=gcn_hidden_dim[-1], out_dim=num_classes
              )
          )
  
      if num_modalities >= 2:
          multimodal_decoder = VCDN(
              num_modalities=num_modalities,
              num_classes=num_classes,
              hidden_dim=vcdn_hidden_dim,
          )
  
      trainer = MultiomicsTrainer(
          dataset=dataset,
          num_modalities=num_modalities,
          num_classes=num_classes,
          unimodal_encoder=unimodal_encoder,
          unimodal_decoder=unimodal_decoder,
          loss_fn=loss_function,
          multimodal_decoder=multimodal_decoder,
          train_multimodal_decoder=True,
          gcn_lr=gcn_lr,
          vcdn_lr=vcdn_lr,
      )
  
      return trainer
  
file_path: pykale/tests/pipeline/test_multiomics_trainer.py
imports: import pytest
  import pytorch_lightning
  import torch
  from torch.nn import CrossEntropyLoss
  from kale.embed.mogonet import MogonetGCN
  from kale.loaddata.multiomics_datasets import SparseMultiomicsDataset
  from kale.pipeline.multiomics_trainer import MultiomicsTrainer
  from kale.predict.decode import LinearClassifier, VCDN
  from kale.prepdata.tabular_transform import ToOneHotEncoding, ToTensor
  from kale.utils.seed import set_seed
label_desc: Use image node_id 1 for calling a global function with example usage: test_model(num_classes, url) and returns: trainer