docs: def run(self, stash='active', n=None, until=None, **kwargs):
          """
          Run until the SimulationManager has reached a completed state, according to
          the current exploration techniques. If no exploration techniques that define a completion
          state are being used, run until there is nothing left to run.
  
          :param stash:       Operate on this stash
          :param n:           Step at most this many times
          :param until:       If provided, should be a function that takes a SimulationManager and
                              returns True or False. Stepping will terminate when it is True.
  
          :return:            The simulation manager, for chaining.
          :rtype:             SimulationManager
          """
          for _ in (itertools.count() if n is None else range(0, n)):
              if not self.complete() and self._stashes[stash]:
                  self.step(stash=stash, **kwargs)
                  if not (until and until(self)):
                      continue
              break
          return self