Source code for pylag.main

"""
Run a PyLag simulation in serial

Example
-------

$ python -m pylag.main -c pylag.cfg

For additional information on setting up a PyLag simulation,
including creating a new run configuration file, see PyLag's
documentation.

See Also
--------
pylag.parallel.main : Run a PyLag simulation in parallel
"""

from __future__ import print_function

import os
import sys
import argparse
import logging
import pathlib

from pylag.configuration import get_config
from pylag.simulator import get_simulator
from pylag.exceptions import PyLagRuntimeError
import pylag.random as random
from pylag import version


[docs]def main(): # Parse command line agruments parser = argparse.ArgumentParser() parser.add_argument('-c', '--config', help='Path to the configuration file', metavar='') parsed_args = parser.parse_args(sys.argv[1:]) # Read in run config try: config = get_config(config_filename=parsed_args.config) except RuntimeError as re: print('Failed to create run config. Please make sure a config ' 'file is given using the -c or --config command line ' 'arguments.') raise PyLagRuntimeError(re.message) # Create output directory if it does not exist already out_dir = config.get('GENERAL', 'out_dir') pathlib.Path(out_dir).mkdir(parents=True, exist_ok=True) # Initiate logging logging.basicConfig(filename=f"{out_dir}/pylag_out.log", filemode='w', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p', level=config.get('GENERAL', 'log_level')) logger = logging.getLogger(__name__) # Save the version of the code used (current commit + status) logger.info('Starting PyLag') logger.info(f"Using PyLag version: {version.version}") # Record configuration to file with open(f"{out_dir}/pylag_out.cfg", 'w') as config_out: logger.info('Writing run config to file') config.write(config_out) # Initialise the RNG random.seed() # Run the simulation simulator = get_simulator(config) simulator.run() # End logging and exit logger.info('Stopping PyLag')
if __name__ == '__main__': main()