class_docstr: Explanation Processor is edge mask explanation processor which can handle sparsity control and use
  data collector automatically.
  
  Args:
      model (torch.nn.Module): The target model prepared to explain.
      device (torch.device): Specify running device: CPU or CUDA.
code: def eval_related_pred(
      self,
      x: torch.Tensor,
      edge_index: torch.Tensor,
      masks: List[torch.Tensor],
      **kwargs,
  ):
      node_idx = kwargs.get("node_idx")
      node_idx = (
          0 if node_idx is None else node_idx
      )  # graph level: 0, node level: node_idx
  
      related_preds = []
  
      for label, mask in enumerate(masks):
          # origin pred
          for edge_mask in self.edge_mask:
              edge_mask.data = float("inf") * torch.ones(
                  mask.size(), device=self.device
              )
          ori_pred = self.model(x=x, edge_index=edge_index, **kwargs)
  
          for edge_mask in self.edge_mask:
              edge_mask.data = mask
          masked_pred = self.model(x=x, edge_index=edge_index, **kwargs)
  
          # mask out important elements for fidelity calculation
          for edge_mask in self.edge_mask:
              edge_mask.data = -mask
          maskout_pred = self.model(
              x=x, edge_index=edge_index, **kwargs
          )
  
          # zero_mask
          for edge_mask in self.edge_mask:
              edge_mask.data = -float("inf") * torch.ones(
                  mask.size(), device=self.device
              )
          zero_mask_pred = self.model(
              x=x, edge_index=edge_index, **kwargs
          )
  
          # Store related predictions for further evaluation.
          related_preds.append(
              {
                  "zero": zero_mask_pred[node_idx],
                  "masked": masked_pred[node_idx],
                  "maskout": maskout_pred[node_idx],
                  "origin": ori_pred[node_idx],
              }
          )
  
          # Adding proper activation function to the models' outputs.
          related_preds[label] = {
              key: pred.softmax(0)[label].item()
              for key, pred in related_preds[label].items()
          }
  
      return related_preds
  
imports: import torch
  import torch.nn
  from typing import List, Union
  from torch import Tensor
  import numpy
  from torch_geometric.data.data import Data
  from torch_geometric.nn import MessagePassing
label_desc: Use image node_id 2 for calling the ExplanationProcessor obj's underlying member method code with example usage: obj.eval_related_pred(x, edge_index, masks) and returns: related_preds