def test_clash_variableoutput(): import histgrinder.config from histgrinder.config import read_configuration import io print(histgrinder.config) # Can't specify OutputDOF without VariableOutput f = io.StringIO(r""" --- Input: [ 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)', 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)' ] OutputDOF: [ 'id0' ] Function: afunction Description: Test """) with pytest.raises(ValueError): read_configuration(f) # Can't specify Output and VariableOutput f = io.StringIO(r""" --- Input: [ 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)', 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)' ] Output: [ 'gauDiv_{id0}' ] VariableOutput: True Function: afunction Description: Test """) with pytest.raises(ValueError): read_configuration(f)
def test_read_config_from_filelike_object(): from histgrinder.config import read_configuration c = read_configuration(open('tests/test_functional.yaml')) print(repr(c[0])) assert (repr(c[0]) == r"""Description: Testing1 Input: ['gaussians/gaus_(?P<id0>[23])(?P<id>\\d)', 'gaussians/gaus_5(?P<id>\\d)'] Output: ['gauDiv_{id0}{id}'] Function: histgrinder.example.transform_function_divide_ROOT, Parameters: {}""" ) assert (repr(c[2]) == r"""Description: Testing3 Input: ['gaussians/gaus_(?P<id0>\\d)(?P<id>\\d)', 'gaussians/gaus_(?P<id0>\\d)(?P<id>\\d)'] VariableOutput: True, OutputDOF: ['id0'] Function: histgrinder.example.transform_function_divide2_ROOT_naming, Parameters: {'pattern': 'gauDiv3_{id0}'}""" )
def go(): """ Application entry point """ import logging import histgrinder from histgrinder.config import read_configuration, lookup_name from histgrinder.transform import Transformer # set up arguments from argparse import ArgumentParser parser = ArgumentParser(description="Histogram postprocessing script") parser.add_argument('-c', '--configfile', nargs='+', help='YAML configuration file(s)') parser.add_argument('source', help='Input source, e.g. ROOT file') parser.add_argument('target', help='Output target, e.g. ROOT file') parser.add_argument('--inmodule', default='histgrinder.io.root.ROOTInputModule', help='Python class which implements an input module') parser.add_argument('--outmodule', default='histgrinder.io.root.ROOTOutputModule', help='Python class which implements an output module') parser.add_argument('--prefix', help='Prefix to ignore in histogram locations') parser.add_argument('--loglevel', help='Set the logging level', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], default='INFO') parser.add_argument('--defer', action='store_true', help='Defer processing of histograms until end of input loop') parser.add_argument('--delaywrite', action='store_true', help='Write histograms at once at end of job') args = parser.parse_args() logging.basicConfig(level=args.loglevel, format='%(asctime)s | %(name)s | %(levelname)s | %(message)s') # noqa: E501 log = logging.getLogger(__name__) log.info(f"Histgrinder {histgrinder.__version__}: histogram postprocessor") # read configuration & set up transformations transformers = [] for configfile in args.configfile: config = read_configuration(configfile) transformers += [Transformer(_) for _ in config] selectors = set() for transform in transformers: selectors.update(transform.inregexes) # Configure input im = lookup_name(args.inmodule)() in_configuration = {'source': args.source} if args.prefix: in_configuration['prefix'] = args.prefix im.configure(in_configuration) im.setSelectors(selectors) # Configure output om = lookup_name(args.outmodule)() out_configuration = {'target': args.target, 'delay': args.delaywrite} if args.prefix: out_configuration['prefix'] = args.prefix om.configure(out_configuration) # Warmup log.info("Warmup") for obj in im.warmup(): for _ in transformers: _.consider(obj) log.info("Beginning loop") eventloop(im, om, transformers, args, log) log.info("Complete")
def test_read_nonexistent_config(): from histgrinder.config import read_configuration with pytest.raises(FileNotFoundError): read_configuration('tests/missing.yaml')
def test_badconfig(): from histgrinder.config import read_configuration c = read_configuration('tests/test_badconfig.yaml') assert c == []