code: def backtrack(self, decision_level):  # type: (int) -> None
          
          self._backtracking = True
  
          packages = set()
          while self._assignments[-1].decision_level > decision_level:
              removed = self._assignments.pop(-1)
              packages.add(removed.dependency.name)
              if removed.is_decision():
                  del self._decisions[removed.dependency.name]
  
          # Re-compute _positive and _negative for the packages that were removed.
          for package in packages:
              if package in self._positive:
                  del self._positive[package]
  
              if package in self._negative:
                  del self._negative[package]
  
          for assignment in self._assignments:
              if assignment.dependency.name in packages:
                  self._register(assignment)
docs: Resets the current decision level to decision_level, and removes all
          assignments made after that level.