Exemple #1
0
def main():
    parser = ACMEParser()
    parameters = get_parameters(parser)

    if not os.path.exists(parameters[0].results_dir):
        os.makedirs(parameters[0].results_dir, 0o775)
    if not parameters[0].no_viewer:  # Only save provenance for full runs.
        save_provenance(parameters[0].results_dir, parser)

    if container.is_container():
        print('Running e3sm_diags in a container.')
        # Parameters will decontainerized by the viewer later.
        # That's to make sure the command shown in the viewer works with or without the viewer.
        for p in parameters:
            container.containerize_parameter(p)

    if parameters[0].multiprocessing:
        parameters = cdp.cdp_run.multiprocess(run_diag, parameters)
    elif parameters[0].distributed:
        parameters = cdp.cdp_run.distribute(run_diag, parameters)
    else:
        parameters = cdp.cdp_run.serial(run_diag, parameters)

    parameters = _collapse_results(parameters)

    if not parameters:
        print('There was not a single valid diagnostics run, no viewer created.')
    else:
        if parameters[0].no_viewer:
            print('Viewer not created because the no_viewer parameter is True.')
        else:
            pth = os.path.join(parameters[0].results_dir, 'viewer')
            if not os.path.exists(pth):
                os.makedirs(pth)
            create_viewer(pth, parameters, parameters[0].output_format[0])
            path = os.path.join(parameters[0].results_dir, 'viewer')
            print('Viewer HTML generated at {}/index.html'.format(path))
Exemple #2
0
def main():
    parser = ACMEParser()
    args = parser.view_args()

    if args.parameters and not args.other_parameters:  # -p only
        cmdline_parameter = parser.get_cmdline_parameters()
        # If just a -p with no command line parameters, check the py for errors
        # Otherwise don't check for errors, the command line args might have some missing ones
        check_values = True if not cmdline_parameter else False
        original_parameter = parser.get_orig_parameters(check_values)

        # Special case, until selector parameter is added.
        if hasattr(cmdline_parameter, 'sets'):
            original_parameter.sets = cmdline_parameter.sets
        elif not hasattr(original_parameter, 'sets'):
            original_parameter.sets = SET_NAMES

        # load the default cfg files
        default_diags_paths = []
        for set_num in original_parameter.sets:
            run_type = 'model_vs_obs'
            dataset = ''
            if hasattr(original_parameter, 'dataset'):
                dataset = original_parameter.dataset
            if hasattr(original_parameter, 'run_type'):
                run_type = original_parameter.run_type
            default_diags_paths.append(
                _get_default_diags(set_num, dataset, run_type))

        other_parameters = parser.get_other_parameters(
            files_to_open=default_diags_paths)

        # Don't put the sets from the Python parameters to each of the parameters.
        # Ex. if sets=[5, 7] in the Python parameters, don't change sets in the
        # default jsons like lat_lon_ACME_default.json
        vars_to_ignore = ['sets']
        parameters = parser.get_parameters(
            cmdline_parameters=cmdline_parameter,
            orig_parameters=original_parameter,
            other_parameters=other_parameters,
            vars_to_ignore=vars_to_ignore,
            cmd_default_vars=False)

    elif not args.parameters and args.other_parameters:  # -d only
        cmdline_parameter = parser.get_cmdline_parameters()
        other_parameters = parser.get_other_parameters()
        parameters = parser.get_parameters(
            cmdline_parameters=cmdline_parameter,
            other_parameters=other_parameters,
            cmd_default_vars=False)

    elif args.parameters and args.other_parameters:  # -p and -d
        parameters = parser.get_parameters(cmd_default_vars=False)

    else:  # command line args without -p or -d
        parameters = parser.get_parameters(cmd_default_vars=False)

    dt = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    for p in parameters:
        # needed for distributed running
        # chown of all generated files to the user who ran the diags
        p.user = getpass.getuser()

        if not hasattr(p, 'results_dir'):
            p.results_dir = '{}-{}'.format('e3sm_diags_results', dt)

    if not os.path.exists(parameters[0].results_dir):
        os.makedirs(parameters[0].results_dir, 0o775)
    if parameters[0].multiprocessing:
        parameters = cdp.cdp_run.multiprocess(run_diag, parameters)
    elif parameters[0].distributed:
        parameters = cdp.cdp_run.distribute(run_diag, parameters)
    else:
        parameters = cdp.cdp_run.serial(run_diag, parameters)

    parameters = _collaspse_results(parameters)

    if not parameters:
        print(
            'There was not a single valid diagnostics run, no viewer created.')
    else:
        provenance(parameters[0].results_dir)

        if parameters[0].no_viewer:
            print(
                'Viewer not created because the no_viewer parameter is True.')
        else:
            pth = os.path.join(parameters[0].results_dir, 'viewer')
            if not os.path.exists(pth):
                os.makedirs(pth)
            create_viewer(pth, parameters, parameters[0].output_format[0])
            'acme_diags_results', dt)

    # if user wants all of the default diags for the sets (ex: sets=[5, 7]), then
    # don't overwrite the sets keyword in the default json files.
    ignore_vars = [] if hasattr(original_parameter,
                                'custom_diags') else ['sets']
    parameters = make_parameters(original_parameter,
                                 vars_to_ignore=ignore_vars)

    for parameter in parameters:
        for pset in parameter.sets:
            pset = str(pset)

            if pset == '3':
                from acme_diags.driver.set3_driver import run_diag
            elif pset == '4':
                from acme_diags.driver.set4_driver import run_diag
            elif pset == '5':
                from acme_diags.driver.set5_driver import run_diag
            elif pset == '7':
                from acme_diags.driver.set7_driver import run_diag
            else:
                print('Plot set {} is not supported yet. Please give us time.'.
                      format(pset))
                continue
            print('Starting to run ACME diags')
            run_diag(parameter)

    create_viewer(original_parameter.results_dir, parameters,
                  parameters[0].output_format[0])
                                           other_parameters=other_parameters)

    else:
        raise RuntimeError('You tried running the diags without -p and/or -d')

    dt = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    for p in parameters:
        # needed for distributed running
        # chown of all generated files to the user who ran the diags
        p.user = getpass.getuser()

        if not hasattr(p, 'results_dir'):
            p.results_dir = '{}-{}'.format('acme_diags_results', dt)

    if not os.path.exists(parameters[0].results_dir):
        os.makedirs(parameters[0].results_dir, 0775)
    if parameters[0].multiprocessing:
        parameters = cdp.cdp_run.multiprocess(run_diag, parameters)
    elif parameters[0].distributed:
        parameters = cdp.cdp_run.distribute(run_diag, parameters)
    else:
        parameters = cdp.cdp_run.serial(run_diag, parameters)

    parameters = _collaspse_results(parameters)

    pth = os.path.join(parameters[0].results_dir, 'viewer')
    if not os.path.exists(pth):
        os.makedirs(pth)

    create_viewer(pth, parameters, parameters[0].output_format[0])