code: def _recover_node(self, i, original_mol):
      node = self.nodes_dict[i]
  
      clique = []
      clique.extend(node["clique"])
      if not node["is_leaf"]:
          for cidx in node["clique"]:
              original_mol.GetAtomWithIdx(cidx).SetAtomMapNum(
                  node["nid"]
              )
  
      for j in self.graph.successors(i).numpy():
          nei_node = self.nodes_dict[j]
          clique.extend(nei_node["clique"])
          if nei_node["is_leaf"]:  # Leaf node, no need to mark
              continue
          for cidx in nei_node["clique"]:
              # allow singleton node override the atom mapping
              if (
                  cidx not in node["clique"]
                  or len(nei_node["clique"]) == 1
              ):
                  atom = original_mol.GetAtomWithIdx(cidx)
                  atom.SetAtomMapNum(nei_node["nid"])
  
      clique = list(set(clique))
      label_mol = get_clique_mol(original_mol, clique)
      node["label"] = Chem.MolToSmiles(
          Chem.MolFromSmiles(get_smiles(label_mol))
      )
      node["label_mol"] = get_mol(node["label"])
  
      for cidx in clique:
          original_mol.GetAtomWithIdx(cidx).SetAtomMapNum(0)
  
      return node["label"]
  
file_path: dgl/examples/pytorch/jtnn/jtnn/mol_tree_nx.py
imports: import dgl
  import numpy
  import rdkit.Chem
  from .chemutils import decode_stereo, enum_assemble_nx, get_clique_mol, get_mol, get_smiles, set_atommap, tree_decomp
label_desc: Use image node_id 3 for calling the DGLMolTree obj's underlying member method code with example usage: obj._recover_node(i, original_mol) and returns: node