code: def run_through(script, ensemble, roles=1, strict=False):
      
      with script as dialogue:
          selection = dialogue.select(ensemble, roles=roles)
          if not any(selection.values()) or strict and not all(selection.values()):
              return
  
          try:
              model = dialogue.cast(selection).run()
          except (AttributeError, ValueError) as e:
              log = logging.getLogger("turberfield.dialogue.player.run_through")
              log.warning(". ".join(getattr(e, "args", e) or e))
              return
          else:
              yield from model
docs: :py:class:`turberfield.dialogue.model.SceneScript`.