code: def recover(self, original_mol):
      clique = []
      clique.extend(self.clique)
      if not self.is_leaf:
          for cidx in self.clique:
              original_mol.GetAtomWithIdx(cidx).SetAtomMapNum(self.nid)
  
      for nei_node in self.neighbors:
          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 self.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)
      self.label = Chem.MolToSmiles(
          Chem.MolFromSmiles(get_smiles(label_mol))
      )
      self.label_mol = get_mol(self.label)
  
      for cidx in clique:
          original_mol.GetAtomWithIdx(cidx).SetAtomMapNum(0)
  
      return self.label
  
file_path: DIG/dig/ggraph/method/JTVAE/fast_jtnn/mol_tree.py
imports: import os
  import rdkit
  import rdkit.Chem
  from tqdm import tqdm
  from .chemutils import get_clique_mol, tree_decomp, get_mol, get_smiles, set_atommap, enum_assemble, decode_stereo
  from .vocab import *
  import argparse
label_desc: Use image node_id 3 for calling the MolTreeNode obj's underlying member method code with example usage: obj.recover(original_mol) and returns: self