Exemple #1
0
def setup_experiment(args, config):
    # Grab parameters
    if args.exp_name:
        config.exp_name = args.exp_name
    elif not hasattr(config, 'exp_name'):
        config.exp_name = exp_lifecycle.guess_config_name(config)

    if not hasattr(config, 'results_dir'):
        config.results_dir = "experiments/%s" % config.exp_name

    if args.timestamp_results is not None:
        # Note that argparse returns a list
        config.timestamp_results = args.timestamp_results[0]

    if hasattr(config, 'timestamp_results') and config.timestamp_results:
        now = timestamp_string()
        config.results_dir += "_" + str(now)

    # Set up results directory
    create_python_dir("./experiments")
    create_clean_python_dir(config.results_dir)

    # Copy stdout and stderr to a file "simulator.out"
    tee = Tee(open(os.path.join(config.results_dir, "simulator.out"), "w"))
    tee.tee_stdout()
    tee.tee_stderr()

    # Load log configuration.
    # N.B. this must be done after Tee()'ing.
    if args.log_config:
        logging.config.fileConfig(args.log_config)
    else:
        logging.basicConfig(
            level=logging.DEBUG if args.verbose else logging.INFO)

    # If specified, set up a config file for each controller
    for controller_config in config.simulation_config.controller_configs:
        if controller_config.config_template:
            controller_config.generate_config_file(config.results_dir)

    # Make sure that there are no uncommited changes
    if args.publish:
        exp_lifecycle.publish_prepare(config.exp_name, config.results_dir)

    # Record machine information for this experiment
    exp_lifecycle.dump_metadata("%s/metadata" % config.results_dir)

    # Copy over config file
    config_file = re.sub(r'\.pyc$', '.py', config.__file__)
    if os.path.exists(config_file):
        canonical_config_file = config.results_dir + "/orig_config.py"
        if os.path.abspath(config_file) != os.path.abspath(
                canonical_config_file):
            shutil.copy(config_file, canonical_config_file)
Exemple #2
0
def setup_experiment(args, config):
  # Grab parameters
  if args.exp_name:
    config.exp_name = args.exp_name
  elif not hasattr(config, 'exp_name'):
    config.exp_name = exp_lifecycle.guess_config_name(config)

  if not hasattr(config, 'results_dir'):
    config.results_dir = "experiments/%s" % config.exp_name

  if args.timestamp_results is not None:
    # Note that argparse returns a list
    config.timestamp_results = args.timestamp_results[0]

  if hasattr(config, 'timestamp_results') and config.timestamp_results:
    now = timestamp_string()
    config.results_dir += "_" + str(now)

  # Set up results directory
  create_python_dir("./experiments")
  create_clean_python_dir(config.results_dir)

  # Copy stdout and stderr to a file "simulator.out"
  tee = Tee(open(os.path.join(config.results_dir, "simulator.out"), "w"))
  tee.tee_stdout()
  tee.tee_stderr()

  # Load log configuration.
  # N.B. this must be done after Tee()'ing.
  if args.log_config:
    logging.config.fileConfig(args.log_config)
  else:
    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)

  # If specified, set up a config file for each controller
  for controller_config in config.simulation_config.controller_configs:
    if controller_config.config_template:
      controller_config.generate_config_file(config.results_dir)

  # Make sure that there are no uncommited changes
  if args.publish:
    exp_lifecycle.publish_prepare(config.exp_name, config.results_dir)

  # Record machine information for this experiment
  exp_lifecycle.dump_metadata("%s/metadata" % config.results_dir)

  # Copy over config file
  config_file = re.sub(r'\.pyc$', '.py', config.__file__)
  if os.path.exists(config_file):
    canonical_config_file = config.results_dir + "/orig_config.py"
    if os.path.abspath(config_file) != os.path.abspath(canonical_config_file):
      shutil.copy(config_file, canonical_config_file)
Exemple #3
0
def setup_experiment(args, config):
  # Grab parameters
  if args.exp_name:
    config.exp_name = args.exp_name
  elif not hasattr(config, 'exp_name'):
    config.exp_name = exp_lifecycle.guess_config_name(config)

  if not hasattr(config, 'results_dir'):
    config.results_dir = "experiments/%s" % config.exp_name

  if args.timestamp_results is not None:
    # Note that argparse returns a list
    config.timestamp_results = args.timestamp_results[0]

  if hasattr(config, 'timestamp_results') and config.timestamp_results:
    now = timestamp_string()
    config.results_dir += "_" + str(now)

  # Set up results directory
  if not os.path.exists(config.results_dir):
    os.makedirs(config.results_dir)

  # Make sure there's an __init__.py
  module_init_py = os.path.join(config.results_dir, "__init__.py")
  if not os.path.exists(module_init_py):
    open(module_init_py,"a").close()

  # Copy stdout and stderr to a file "simulator.out"
  tee = Tee(open(os.path.join(config.results_dir, "simulator.out"), "w"))
  tee.tee_stdout()
  tee.tee_stderr()

  # If specified, set up a config file for each controller
  for controller_config in config.simulation_config.controller_configs:
    if controller_config.config_template:
      controller_config.generate_config_file(config.results_dir)

  # Make sure that there are no uncommited changes
  if args.publish:
    exp_lifecycle.publish_prepare(config.exp_name, config.results_dir)

  # Record machine information for this experiment
  exp_lifecycle.dump_metadata("%s/metadata" % config.results_dir)

  # Copy over config file
  config_file = re.sub(r'\.pyc$', '.py', config.__file__)
  if os.path.exists(config_file):
    canonical_config_file = config.results_dir + "/orig_config.py"
    if os.path.abspath(config_file) != os.path.abspath(canonical_config_file):
      shutil.copy(config_file, canonical_config_file)
Exemple #4
0
def setup_experiment(args, config):
  # Grab parameters
  if args.exp_name:
    config.exp_name = args.exp_name
  elif not hasattr(config, 'exp_name'):
    config.exp_name = exp_lifecycle.guess_config_name(config)

  if not hasattr(config, 'results_dir'):
    config.results_dir = "experiments/%s" % config.exp_name

  if args.timestamp_results is not None:
    # Note that argparse returns a list
    config.timestamp_results = args.timestamp_results

  if hasattr(config, 'timestamp_results') and config.timestamp_results:
    now = timestamp_string()
    config.results_dir += "_" + str(now)

  # Set up results directory
  create_python_dir("./experiments")
  create_clean_python_dir(config.results_dir)

  # Copy stdout and stderr to a file "simulator.out"
  tee = Tee(open(os.path.join(config.results_dir, "simulator.out"), "w"))
  tee.tee_stdout()
  tee.tee_stderr()

  # Load log configuration.
  # N.B. this must be done after Tee()'ing.
  if args.log_config:
    logging.config.fileConfig(args.log_config)
  else:
    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)

  # If specified, set up a config file for each controller
  for controller_config in config.simulation_config.controller_configs:
    if controller_config.config_template:
      controller_config.generate_config_file(config.results_dir)

  # Make sure that there are no uncommited changes
  if args.publish:
    exp_lifecycle.publish_prepare(config.exp_name, config.results_dir)

  # Record machine information for this experiment
  additional_metadata = None
  if hasattr(config, "get_additional_metadata"):
    additional_metadata = config.get_additional_metadata()

  exp_lifecycle.dump_metadata("%s/metadata" % config.results_dir,
                              additional_metadata=additional_metadata)

  # Copy over config file
  config_file = re.sub(r'\.pyc$', '.py', config.__file__)
  if os.path.exists(config_file):
    canonical_config_file = config.results_dir + "/orig_config.py"
    if os.path.abspath(config_file) != os.path.abspath(canonical_config_file):
      shutil.copy(config_file, canonical_config_file)

  # Check configuration warnings
  log = logging.getLogger("setup")

  con = config.control_flow.simulation_cfg.controller_configs

  def builtin_pox_controller(c):
    # pox/ is already accounted for in metadata.
    return ("POXController" in str(c.controller_class) and
            c.cwd is not None and
            re.match("^pox[/]?", c.cwd) is not None)

  if (not hasattr(config, "get_additional_metadata") and
      find(lambda c: not builtin_pox_controller(c),
           config.control_flow.simulation_cfg.controller_configs) is not None):
    log.warn('''No get_additional_metadata() defined for config file. See '''
             '''config/nox_routing.py for an example.''')
Exemple #5
0
def setup_experiment(args, config):
    # Grab parameters
    if args.exp_name:
        config.exp_name = args.exp_name
    elif not hasattr(config, 'exp_name'):
        config.exp_name = exp_lifecycle.guess_config_name(config)

    if not hasattr(config, 'results_dir'):
        config.results_dir = "experiments/%s" % config.exp_name

    if args.timestamp_results is not None:
        # Note that argparse returns a list
        config.timestamp_results = args.timestamp_results

    if hasattr(config, 'timestamp_results') and config.timestamp_results:
        now = timestamp_string()
        config.results_dir += "_" + str(now)

    # Set up results directory
    create_python_dir("./experiments")
    create_clean_python_dir(config.results_dir)

    # Copy stdout and stderr to a file "simulator.out"
    tee = Tee(open(os.path.join(config.results_dir, "simulator.out"), "w"))
    tee.tee_stdout()
    tee.tee_stderr()

    # Load log configuration.
    # N.B. this must be done after Tee()'ing.
    if args.log_config:
        logging.config.fileConfig(args.log_config)
    else:
        logging.basicConfig(
            level=logging.DEBUG if args.verbose else logging.INFO)

    # If specified, set up a config file for each controller
    for controller_config in config.simulation_config.controller_configs:
        if controller_config.config_template:
            controller_config.generate_config_file(config.results_dir)

    # Make sure that there are no uncommited changes
    if args.publish:
        exp_lifecycle.publish_prepare(config.exp_name, config.results_dir)

    # Record machine information for this experiment
    additional_metadata = None
    if hasattr(config, "get_additional_metadata"):
        additional_metadata = config.get_additional_metadata()

    exp_lifecycle.dump_metadata("%s/metadata" % config.results_dir,
                                additional_metadata=additional_metadata)

    # Copy over config file
    config_file = re.sub(r'\.pyc$', '.py', config.__file__)
    if os.path.exists(config_file):
        canonical_config_file = config.results_dir + "/orig_config.py"
        if os.path.abspath(config_file) != os.path.abspath(
                canonical_config_file):
            shutil.copy(config_file, canonical_config_file)

    # Check configuration warnings
    log = logging.getLogger("setup")

    con = config.control_flow.simulation_cfg.controller_configs

    def builtin_pox_controller(c):
        # pox/ is already accounted for in metadata.
        return ("POXController" in str(c.controller_class)
                and c.cwd is not None
                and re.match("^pox[/]?", c.cwd) is not None)

    if (not hasattr(config, "get_additional_metadata")
            and find(lambda c: not builtin_pox_controller(c),
                     config.control_flow.simulation_cfg.controller_configs)
            is not None):
        log.warn(
            '''No get_additional_metadata() defined for config file. See '''
            '''config/nox_routing.py for an example.''')