For impurity propagation, we batched all the impurities from the previous step, irrespective of their origins, such as side reactions, from additional reagents and solvents, or reactions with known impurities. We propagated these impurities by treating them as primary reactants and considering all possible reagents, solvents, and known impurities in the succeeding step(s). In order to avoid a combinatorial explosion and also understand that isolation (crystallization, followed by filtering, washing, and drying) operations lead to the elimination of most impurities, we kept the number of propagating steps to 1, by default. The codebase has in-built functionality to extend this to n steps, as desired by the end user.