class_docstr: The implementation of paper
  `On Explainability of Graph Neural Networks via Subgraph Explorations <https://arxiv.org/abs/2102.05152>`_.
  
  Args:
      model (:obj:`torch.nn.Module`): The target model prepared to explain
      num_classes(:obj:`int`): Number of classes for the datasets
      num_hops(:obj:`int`, :obj:`None`): The number of hops to extract neighborhood of target node
        (default: :obj:`None`)
      explain_graph(:obj:`bool`): Whether to explain graph classification model (default: :obj:`True`)
      rollout(:obj:`int`): Number of iteration to get the prediction
      min_atoms(:obj:`int`): Number of atoms of the leaf node in search tree
      c_puct(:obj:`float`): The hyperparameter which encourages the exploration
      expand_atoms(:obj:`int`): The number of atoms to expand
        when extend the child nodes in the search tree
      high2low(:obj:`bool`): Whether to expand children nodes from high degree to low degree when
        extend the child nodes in the search tree (default: :obj:`False`)
      local_radius(:obj:`int`): Number of local radius to calculate :obj:`l_shapley`, :obj:`mc_l_shapley`
      sample_num(:obj:`int`): Sampling time of monte carlo sampling approximation for
        :obj:`mc_shapley`, :obj:`mc_l_shapley` (default: :obj:`mc_l_shapley`)
      reward_method(:obj:`str`): The command string to select the
      subgraph_building_method(:obj:`str`): The command string for different subgraph building method,
        such as :obj:`zero_filling`, :obj:`split` (default: :obj:`zero_filling`)
      save_dir(:obj:`str`, :obj:`None`): Root directory to save the explanation results (default: :obj:`None`)
      filename(:obj:`str`): The filename of results
      vis(:obj:`bool`): Whether to show the visualization (default: :obj:`True`)
  Example:
      >>> # For graph classification task
      >>> subgraphx = SubgraphX(model=model, num_classes=2)
      >>> _, explanation_results, related_preds = subgraphx(x, edge_index)
code: def get_mcts_class(
      self,
      x,
      edge_index,
      node_idx: int = None,
      score_func: Callable = None,
  ):
      if self.explain_graph:
          node_idx = None
      else:
          assert node_idx is not None
      return MCTS(
          x,
          edge_index,
          node_idx=node_idx,
          device=self.device,
          score_func=score_func,
          num_hops=self.num_hops,
          n_rollout=self.rollout,
          min_atoms=self.min_atoms,
          c_puct=self.c_puct,
          expand_atoms=self.expand_atoms,
          high2low=self.high2low,
      )
  
imports: import os
  import math
  import copy
  import torch
  import numpy
  import networkx
  from rdkit import Chem
  from torch import Tensor
  from textwrap import wrap
  from functools import partial
  from collections import Counter
  from typing import List, Tuple, Dict
  from torch_geometric.data import Batch, Data
  from torch_geometric.utils import to_networkx
  from typing import Callable, Union, Optional
  import matplotlib.pyplot
  from torch_geometric.utils.num_nodes import maybe_num_nodes
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.datasets import MoleculeNet
  from torch_geometric.utils import remove_self_loops
  from .shapley import GnnNetsGC2valueFunc, GnnNetsNC2valueFunc, gnn_score, mc_shapley, l_shapley, mc_l_shapley, NC_mc_l_shapley, sparsity
label_desc: Use image node_id 4 for calling the SubgraphX obj's underlying member method code with example usage: obj.get_mcts_class(x, edge_index, node_idx, score_func) and returns: MCTS