docs: def accessed_vars(statement: str, mode: str = 'exec') -> Set[str]:
      '''Parse a Python statement and analyze the symbols used. The result
      will be used to determine what variables a step depends upon.'''
      try:
          if mode == 'exec':
              return get_accessed(ast.parse(statement, '<string>', 'exec'))
          else:
              res = get_accessed(
                  ast.parse('__NULL__(' + statement + ')', '<string>', 'eval'))
              res.remove('__NULL__')
              return res
      except:
          raise RuntimeError(
              f'Failed to parse statement: {statement} in {mode} mode')