code: def evaluation(args, model, loader, device):
      model.eval()
  
      loss_accum = 0
      preds = []
      functions = []
      for step, batch in enumerate(loader):
          batch = batch.to(device)
          # pred = model(batch)
          try:
              pred = model(batch)
          except RuntimeError as e:
              if "CUDA out of memory" not in str(e):
                  print("\n forward error \n")
                  raise (e)
              else:
                  print("evaluation OOM")
              torch.cuda.empty_cache()
              continue
          preds.append(torch.argmax(pred, dim=1))
  
          function = batch.y
          functions.append(function)
          loss = criterion(pred, function)
          loss_accum += loss.item()
  
      functions = torch.cat(functions, dim=0)
      preds = torch.cat(preds, dim=0)
      acc = torch.sum(preds == functions) / functions.shape[0]
  
      return loss_accum / (step + 1), acc.item()
  
file_path: DIG/examples/threedgraph/run_ProNet.py
imports: import os
  import numpy
  import time
  from datetime import datetime
  from tqdm import tqdm
  import argparse
  import torch
  import torch.optim
  from torch import nn
  from torch.utils.tensorboard import SummaryWriter
  import sys
  from dig.threedgraph.method import ProNet
  from dig.threedgraph.dataset import ECdataset
  from dig.threedgraph.dataset import FOLDdataset
  from torch_geometric.data import DataLoader
  import warnings
label_desc: Use image node_id 2 for calling a global function with example usage: evaluation(args, model, loader, device) and returns: unknown,  acc