class_docstr: Class for representing a SAT solver capable of
   finding a model to a boolean theory in conjunctive
   normal form.
class_docstr_tok: ["Class","for","representing","a","SAT","solver","capable","of","finding","a","model","to","a","boolean","theory","in","conjunctive","normal","form","."]
docstr: _undo the changes of the most recent decision level.
  
  Examples
  ========
  
  >>> from sympy.logic.algorithms.dpll2 import SATSolver
  >>> l = SATSolver([{2, -3}, {1}, {3, -3}, {2, -2},
  ... {3, -2}], {1, 2, 3}, set())
  >>> next(l._find_model())
  {1: True, 2: False, 3: False}
  >>> level = l._current_level
  >>> level.decision, level.var_settings, level.flipped
  (-3, {-3, -2}, False)
  >>> l._undo()
  >>> level = l._current_level
  >>> level.decision, level.var_settings, level.flipped
  (0, {1}, False)
docstr_tok: ["_undo","the","changes","of","the","most","recent","decision","level",".","Examples","========",">",">",">","from","sympy.logic.algorithms.dpll2","import","SATSolver",">",">",">","l","=","SATSolver","(","[","{","2",",","-3","}",",","{","1","}",",","{","3",",","-3","}",",","{","2",",","-2","}",",","...","{","3",",","-2","}","]",",","{","1",",","2",",","3","}",",","set","(",")",")",">",">",">","next","(","l._find_model","(",")",")","{","1",":","True",",","2",":","False",",","3",":","False","}",">",">",">","level","=","l._current_level",">",">",">","level.decision",",","level.var_settings",",","level.flipped","(","-3",",","{","-3",",","-2","}",",","False",")",">",">",">","l._undo","(",")",">",">",">","level","=","l._current_level",">",">",">","level.decision",",","level.var_settings",",","level.flipped","(","0",",","{","1","}",",","False",")"]
code: def _undo(self):
      """
      _undo the changes of the most recent decision level.
  
      Examples
      ========
  
      >>> from sympy.logic.algorithms.dpll2 import SATSolver
      >>> l = SATSolver([{2, -3}, {1}, {3, -3}, {2, -2},
      ... {3, -2}], {1, 2, 3}, set())
      >>> next(l._find_model())
      {1: True, 2: False, 3: False}
      >>> level = l._current_level
      >>> level.decision, level.var_settings, level.flipped
      (-3, {-3, -2}, False)
      >>> l._undo()
      >>> level = l._current_level
      >>> level.decision, level.var_settings, level.flipped
      (0, {1}, False)
  
      """
      # Undo the variable settings
      for lit in self._current_level.var_settings:
          self.var_settings.remove(lit)
          self.heur_lit_unset(lit)
          self.variable_set[abs(lit)] = False
  
      # Pop the level off the stack
      self.levels.pop()
  
imports: from collections import defaultdict
  from heapq import heappush, heappop
  from sympy.core.sorting import ordered
  from sympy.assumptions.cnf import EncodedCNF
  from sympy.logic.algorithms.lra_theory import LRASolver
label_desc: Use image node_id 9 for calling the SATSolver obj's underlying member method code with example usage: obj._undo() without return types