Why does rdkit's `AllChem.ReactionFromSmarts.RunReactants` return a tuple of tuples?
From a tutorial I wrote on SMARTS reactions in rdkit:


  The output is a tuple of tuples. The inner tuples are there because even reactions that take only a single input molecule can result in multiple output molecules (e.g. hydrolysis). The outer tuples are there because rdkit applies your reaction incidence of the appropriate motifs in the input molecule, even if it occurs more than once.


The examples in the tutorial illustrate both cases where a single application of the reaction rule creates multiple molecules (the inner tuple(s) would have length > 1), and also cases where a reaction rule can be applied more than once to a molecule, which would lead to the outer tuples having length > 1.