docs: 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)