Split the solver. If any of the subsolvers time out after a short timeout (10 seconds), re-add the
        preconstraints associated with each of its variables. Hopefully these constraints still allow us to do
        meaningful things to the state.

def reconstrain(self):
        """
        Split the solver. If any of the subsolvers time out after a short timeout (10 seconds), re-add the
        preconstraints associated with each of its variables. Hopefully these constraints still allow us to do
        meaningful things to the state.
        """

        # test all solver splits
        subsolvers = self.state.solver._solver.split()

        for solver in subsolvers:
            solver.timeout = 1000 * 10  # 10 seconds
            if not solver.satisfiable():
                for var in solver.variables:
                    if var in self.variable_map:
                        self.state.solver.add(self.variable_map[var])
                    else:
                        l.warning("var %s not found in self.variable_map", var)