code: def assemble(self):
      neighbors = [
          nei for nei in self.neighbors if nei.mol.GetNumAtoms() > 1
      ]
      neighbors = sorted(
          neighbors, key=lambda x: x.mol.GetNumAtoms(), reverse=True
      )
      singletons = [
          nei for nei in self.neighbors if nei.mol.GetNumAtoms() == 1
      ]
      neighbors = singletons + neighbors
  
      cands, aroma = enum_assemble(self, neighbors)
      new_cands = [
          cand for i, cand in enumerate(cands) if aroma[i] >= 0
      ]
      if len(new_cands) > 0:
          cands = new_cands
  
      if len(cands) > 0:
          self.cands, _ = zip(*cands)
          self.cands = list(self.cands)
      else:
          self.cands = []
  
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 4 for calling the MolTreeNode obj's underlying member method code with example usage: obj.assemble() without return types