class_docstr: Monte Carlo Tree Search Method.
  
  Args:
      X (:obj:`torch.Tensor`): Input node features
      edge_index (:obj:`torch.Tensor`): The edge indices.
      num_hops (:obj:`int`): The number of hops :math:`k`.
      n_rollout (:obj:`int`): The number of sequence to build the monte carlo tree.
      min_atoms (:obj:`int`): The number of atoms for the subgraph in the monte carlo tree leaf node.
      c_puct (:obj:`float`): The hyper-parameter to encourage exploration while searching.
      expand_atoms (:obj:`int`): The number of children to expand.
      high2low (:obj:`bool`): Whether to expand children tree node from high degree nodes to low degree nodes.
      node_idx (:obj:`int`): The target node index to extract the neighborhood.
      score_func (:obj:`Callable`): The reward function for tree node, such as mc_shapely and mc_l_shapely.
code: def __subgraph__(node_idx, x, edge_index, num_hops, **kwargs):
      num_nodes, num_edges = x.size(0), edge_index.size(1)
      (
          subset,
          edge_index,
          _,
          edge_mask,
      ) = k_hop_subgraph_with_default_whole_graph(
          edge_index,
          node_idx,
          num_hops,
          relabel_nodes=True,
          num_nodes=num_nodes,
      )
  
      x = x[subset]
      for key, item in kwargs.items():
          if torch.is_tensor(item) and item.size(0) == num_nodes:
              item = item[subset]
          elif torch.is_tensor(item) and item.size(0) == num_edges:
              item = item[edge_mask]
          kwargs[key] = item
  
      return x, edge_index, subset, edge_mask, kwargs
  
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 3 for calling the MCTS obj's underlying member method code with example usage: obj.__subgraph__(node_idx, x, edge_index, num_hops) and returns: x,  edge_index,  subset,  edge_mask,  kwargs