Select Git revision
fieldsIO.py
generate_runscript.py 4.09 KiB
# SPDX-FileCopyrightText: 2021 Earth System Data Exploration (ESDE), Jülich Supercomputing Center (JSC)
#
# SPDX-License-Identifier: MIT
"""
Basic task of the Python-script:
Creates user-defined runscripts for all workflow runscripts via keyboard interaction.
"""
__email__ = "b.gong@fz-juelich.de"
__authors__ = "Michael Langguth"
__date__ = "2021-02-03"
# import modules
import sys, os
import socket
if sys.version_info[0] < 3:
raise Exception("This script has to be run with Python 3!")
# append path to get runscript-generator scripts
sys.path.append(os.path.dirname(sys.path[0]))
workdir = os.path.dirname(os.getcwd())
sys.path.append(os.path.join(workdir, "utils"))
import argparse
from runscript_generator.config_utils import check_virtualenv
from runscript_generator.config_utils import Config_runscript_base
from runscript_generator.config_extraction import Config_Extraction
from runscript_generator.config_preprocess_step1 import Config_Preprocess1
from runscript_generator.config_preprocess_step2 import Config_Preprocess2
from runscript_generator.config_training import Config_Train
from runscript_generator.config_postprocess import Config_Postprocess
#
# ----------------------------- auxiliary function -----------------------------
#
def get_runscript_cls(target_runscript_name, venv_name, lhpc):
method_name = get_runscript_cls.__name__
if target_runscript_name == "extract":
cls_inst = Config_Extraction(venv_name, lhpc)
elif target_runscript_name == "preprocess1":
cls_inst = Config_Preprocess1(venv_name, lhpc)
elif target_runscript_name == "preprocess2":
cls_inst = Config_Preprocess2(venv_name, lhpc)
elif target_runscript_name == "train":
cls_inst = Config_Train(venv_name, lhpc)
elif target_runscript_name == "postprocess":
cls_inst = Config_Postprocess(venv_name, lhpc)
else:
raise ValueError("%{0}: Unknown workflow runscript '{1}'. passed.".format(method_name, target_runscript_name))
return cls_inst
#
# ------------------------------------ main ------------------------------------
#
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--venv_path", "-venv", dest="venv_name", type=str, required=True,
help="Name of virtual environment to be used (created with create_env.sh).")
args = parser.parse_args()
venv_path = os.path.join(os.path.dirname(os.getcwd()), "virtual_envs", args.venv_name)
venv_name = check_virtualenv(lactive=False, venv_path=venv_path, labort=True)
# check if we are on a known HPC
lhpc = False
if any(map(socket.gethostname().__contains__, ["juwels", "hdfml"])):
lhpc = True
print(" *** NOTE: Enter 'help' to receive support during the subsequent keyboard interaction. ***")
config_dummy = Config_runscript_base(venv_name, lhpc)
known_wrkflw_steps = config_dummy.known_workflow_steps
keyboard_interaction = config_dummy.keyboard_interaction
# get workflow step by keyboard interaction
target_runscript_req = "Please enter the name of the workflow step for which a runscript should be created:"
target_runscript_err = ValueError("Workflow step is unknown. Please select one of the known listed above")
def check_target_runscript(runscript_name, silent=False):
if not runscript_name in known_wrkflw_steps:
if not silent:
if runscript_name != "help":
print("Invalid workflow step '{0}' passed!".format(runscript_name))
print("Known workflow steps:")
for step in known_wrkflw_steps:
print("* {0}".format(step))
return False
else:
return True
target_runscript = keyboard_interaction(target_runscript_req, check_target_runscript,
target_runscript_err, ntries=2)
cls_runscript = get_runscript_cls(target_runscript, venv_name, lhpc)
cls_runscript.run()
cls_runscript.finalize()
print("*** Important note: Remember to open newly created directories for other AMBS-users! ***")
if __name__== '__main__':
main()