def main(): """ Launch download process with user-specified options. :return: """ arg_parser = argparse.ArgumentParser( description="Download NiftyNet sample data") arg_parser.add_argument("-r", "--retry", help="Force data to be downloaded again", required=False, action='store_true') arg_parser.add_argument( 'sample_id', nargs='+', help="Identifier string(s) for the example(s) to download") version_string = get_niftynet_version_string() arg_parser.add_argument("-v", "--version", action='version', version=version_string) args = arg_parser.parse_args() if not download(args.sample_id, args.retry): return -1 return 0
def main(): arg_parser = argparse.ArgumentParser( description="Download NiftyNet sample data") arg_parser.add_argument("-r", "--retry", help="Force data to be downloaded again", required=False, action='store_true') arg_parser.add_argument("-d", "--data_folder", help="Change data download location", required=False, default=None) arg_parser.add_argument( 'sample_id', nargs='*', help="Identifier string for the example to download") version_string = get_niftynet_version_string() arg_parser.add_argument("-v", "--version", action='version', version=version_string) args = arg_parser.parse_args() if not download(args.sample_id, args.data_folder, args.retry): return -1 return 0
def main(): arg_parser = argparse.ArgumentParser( description="Download NiftyNet sample data") arg_parser.add_argument( "-r", "--retry", help="Force data to be downloaded again", required=False, action='store_true') arg_parser.add_argument( 'sample_id', nargs='+', help="Identifier string(s) for the example(s) to download") version_string = get_niftynet_version_string() arg_parser.add_argument( "-v", "--version", action='version', version=version_string) args = arg_parser.parse_args() if not download(args.sample_id, args.retry): return -1 return 0
def run(): """ meta_parser is first used to find out location of the configuration file. Based on the application_name or meta_parser.prog name, the section parsers are organised to find system parameters and application specific parameters. :return: system parameters is a group of parameters including SYSTEM_SECTIONS and app_module.REQUIRED_CONFIG_SECTION input_data_args is a group of input data sources to be used by niftynet.io.ImageReader """ meta_parser = argparse.ArgumentParser( description="Launch a NiftyNet application.", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=textwrap.dedent(EPILOG_STRING)) version_string = get_niftynet_version_string() meta_parser.add_argument("action", help="train networks, run inferences " "or evaluate inferences", metavar='ACTION', choices=list(ACTIONS)) meta_parser.add_argument("-v", "--version", action='version', version=version_string) meta_parser.add_argument("-c", "--conf", help="specify configurations from a file", metavar="CONFIG_FILE") meta_parser.add_argument("-a", "--application_name", help="specify an application module name", metavar='APPLICATION_NAME', default="") meta_args, args_from_cmdline = meta_parser.parse_known_args() print(version_string) # read configurations, to be parsed by sections config_file_name = __resolve_config_file_path(meta_args.conf) config = NiftyNetLaunchConfig() config.read([config_file_name]) # infer application name from command app_name = None try: parser_prog = meta_parser.prog.replace('.py', '') app_name = parser_prog if parser_prog in SUPPORTED_APP \ else meta_args.application_name assert app_name except (AttributeError, AssertionError): raise ValueError("\nUnknown application {}, or did you forget '-a' " "command argument?{}".format(app_name, EPILOG_STRING)) # load application by name app_module = ApplicationFactory.create(app_name) try: assert app_module.REQUIRED_CONFIG_SECTION, \ "\nREQUIRED_CONFIG_SECTION should be static variable " \ "in {}".format(app_module) has_section_in_config(config, app_module.REQUIRED_CONFIG_SECTION) except AttributeError: raise AttributeError( "Application code doesn't have REQUIRED_CONFIG_SECTION property. " "{} should be an instance of " "niftynet.application.base_application".format(app_module)) except ValueError: raise ValueError( "\n{} requires [{}] section in the config file.{}".format( app_name, app_module.REQUIRED_CONFIG_SECTION, EPILOG_STRING)) # check keywords in configuration file _check_config_file_keywords(config) # using configuration as default, and parsing all command line arguments # command line args override the configure file options all_args = {} for section in config.sections(): # try to rename user-specified sections for consistency section = standardise_section_name(config, section) section_defaults = dict(config.items(section)) section_args, args_from_cmdline = \ _parse_arguments_by_section([], section, section_defaults, args_from_cmdline, app_module.REQUIRED_CONFIG_SECTION) all_args[section] = section_args # check if any args from command line not recognised _check_cmd_remaining_keywords(list(args_from_cmdline)) # split parsed results in all_args # into dictionaries of system_args and input_data_args system_args, input_data_args = {}, {} for section in all_args: # copy system default sections to ``system_args`` if section in SYSTEM_SECTIONS: system_args[section] = all_args[section] continue # copy application specific sections to ``system_args`` if section == app_module.REQUIRED_CONFIG_SECTION: system_args['CUSTOM'] = all_args[section] vars(system_args['CUSTOM'])['name'] = app_name continue # copy non-default sections to ``input_data_args`` input_data_args[section] = all_args[section] # set the output path of csv list if not exists try: csv_path = resolve_file_name( input_data_args[section].csv_file, (os.path.dirname(config_file_name), NIFTYNET_HOME)) input_data_args[section].csv_file = csv_path # don't search files if csv specified in config try: delattr(input_data_args[section], 'path_to_search') except AttributeError: pass except (IOError, TypeError): input_data_args[section].csv_file = '' # preserve ``config_file`` and ``action parameter`` from the meta_args system_args['CONFIG_FILE'] = argparse.Namespace(path=config_file_name) # mapping the captured action argument to a string in ACTIONS system_args['SYSTEM'].action = \ look_up_operations(meta_args.action, ACTIONS) if not system_args['SYSTEM'].model_dir: system_args['SYSTEM'].model_dir = os.path.join( os.path.dirname(config_file_name), 'model') return system_args, input_data_args
def run(): """ meta_parser is first used to find out location of the configuration file. based on the application_name or meta_parser.prog name, the section parsers are organised to find system parameters and application specific parameters. :return: system parameters is a group of parameters including SYSTEM_SECTIONS and app_module.REQUIRED_CONFIG_SECTION input_data_args is a group of input data sources to be used by niftynet.io.ImageReader """ meta_parser = argparse.ArgumentParser( description="Launch a NiftyNet application.", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=textwrap.dedent(epilog_string)) version_string = get_niftynet_version_string() meta_parser.add_argument("action", help="train networks or run inferences", metavar='ACTION', choices=['train', 'inference']) meta_parser.add_argument("-v", "--version", action='version', version=version_string) meta_parser.add_argument("-c", "--conf", help="specify configurations from a file", metavar="CONFIG_FILE") meta_parser.add_argument("-a", "--application_name", help="specify an application module name", metavar='APPLICATION_NAME', default="") meta_args, args_from_cmdline = meta_parser.parse_known_args() print(version_string) # read configurations, to be parsed by sections if not meta_args.conf: print("\nNo configuration file has been provided, did you " "forget '-c' command argument?{}".format(epilog_string)) raise IOError # Resolve relative configuration file location config_path = meta_args.conf if not os.path.isfile(config_path): relative_conf_file = os.path.join( NiftyNetGlobalConfig().get_default_examples_folder(), config_path, config_path + "_config.ini") if os.path.isfile(relative_conf_file): config_path = relative_conf_file os.chdir(os.path.dirname(config_path)) else: print("\nConfiguration file not found: {}.{}".format( config_path, epilog_string)) raise IOError config = configparser.ConfigParser() config.read([config_path]) app_module = None module_name = None try: if meta_parser.prog[:-3] in SUPPORTED_APP: module_name = meta_parser.prog[:-3] elif meta_parser.prog in SUPPORTED_APP: module_name = meta_parser.prog else: module_name = meta_args.application_name app_module = ApplicationFactory.create(module_name) assert app_module.REQUIRED_CONFIG_SECTION, \ "\nREQUIRED_CONFIG_SECTION should be static variable " \ "in {}".format(app_module) has_section_in_config(config, app_module.REQUIRED_CONFIG_SECTION) except ValueError: if app_module: section_name = app_module.REQUIRED_CONFIG_SECTION print('\n{} requires [{}] section in the config file.{}'.format( module_name, section_name, epilog_string)) if not module_name: print("\nUnknown application {}, or did you forget '-a' " "command argument?{}".format(module_name, epilog_string)) raise # check keywords in configuration file check_keywords(config) # using configuration as default, and parsing all command line arguments all_args = {} for section in config.sections(): # try to rename user-specified sections for consistency section = standardise_section_name(config, section) section_defaults = dict(config.items(section)) section_args, args_from_cmdline = \ _parse_arguments_by_section([], section, section_defaults, args_from_cmdline, app_module.REQUIRED_CONFIG_SECTION) all_args[section] = section_args # command line parameters should be valid assert not args_from_cmdline, \ '\nUnknown parameter: {}{}'.format(args_from_cmdline, epilog_string) # split parsed results in all_args # into dictionaries of system_args and input_data_args system_args = {} input_data_args = {} # copy system default sections to ``system_args`` for section in all_args: if section in SYSTEM_SECTIONS: system_args[section] = all_args[section] elif section == app_module.REQUIRED_CONFIG_SECTION: system_args['CUSTOM'] = all_args[section] vars(system_args['CUSTOM'])['name'] = module_name if all_args['SYSTEM'].model_dir is None: all_args['SYSTEM'].model_dir = os.path.join( os.path.dirname(meta_args.conf), 'model') # copy non-default sections to ``input_data_args`` for section in all_args: if section in SYSTEM_SECTIONS: continue if section == app_module.REQUIRED_CONFIG_SECTION: continue input_data_args[section] = all_args[section] # set the output path of csv list if not exists csv_path = input_data_args[section].csv_file if os.path.isfile(csv_path): # don't search files if csv specified in config try: delattr(input_data_args[section], 'path_to_search') except AttributeError: pass else: input_data_args[section].csv_file = '' # preserve ``config_file`` and ``action parameter`` from the meta_args system_args['CONFIG_FILE'] = argparse.Namespace(path=meta_args.conf) system_args['SYSTEM'].action = meta_args.action return system_args, input_data_args
def run(): """ meta_parser is first used to find out location of the configuration file. based on the application_name or meta_parser.prog name, the section parsers are organised to find system parameters and application specific parameters. :return: system parameters is a group of parameters including SYSTEM_SECTIONS and app_module.REQUIRED_CONFIG_SECTION input_data_args is a group of input data sources to be used by niftynet.io.ImageReader """ meta_parser = argparse.ArgumentParser( description="Launch a NiftyNet application.", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=textwrap.dedent(epilog_string)) version_string = get_niftynet_version_string() meta_parser.add_argument("action", help="train networks or run inferences", metavar='ACTION', choices=['train', 'inference']) meta_parser.add_argument("-v", "--version", action='version', version=version_string) meta_parser.add_argument("-c", "--conf", help="specify configurations from a file", metavar="CONFIG_FILE") meta_parser.add_argument("-a", "--application_name", help="specify an application module name", metavar='APPLICATION_NAME', default="") meta_args, args_from_cmdline = meta_parser.parse_known_args() print(version_string) # read configurations, to be parsed by sections if not meta_args.conf: print("\nNo configuration file has been provided, did you " "forget '-c' command argument?{}".format(epilog_string)) raise IOError # Resolve relative configuration file location config_path = os.path.expanduser(meta_args.conf) if not os.path.isfile(config_path): relative_conf_file = os.path.join( NiftyNetGlobalConfig().get_default_examples_folder(), config_path, config_path + "_config.ini") if os.path.isfile(relative_conf_file): config_path = relative_conf_file os.chdir(os.path.dirname(config_path)) else: print("\nConfiguration file not found: {}.{}".format( config_path, epilog_string)) raise IOError config = configparser.ConfigParser() config.read([config_path]) app_module = None module_name = None try: if meta_parser.prog[:-3] in SUPPORTED_APP: module_name = meta_parser.prog[:-3] elif meta_parser.prog in SUPPORTED_APP: module_name = meta_parser.prog else: module_name = meta_args.application_name app_module = ApplicationFactory.create(module_name) assert app_module.REQUIRED_CONFIG_SECTION, \ "\nREQUIRED_CONFIG_SECTION should be static variable " \ "in {}".format(app_module) has_section_in_config(config, app_module.REQUIRED_CONFIG_SECTION) except ValueError: if app_module: section_name = app_module.REQUIRED_CONFIG_SECTION print('\n{} requires [{}] section in the config file.{}'.format( module_name, section_name, epilog_string)) if not module_name: print("\nUnknown application {}, or did you forget '-a' " "command argument?{}".format(module_name, epilog_string)) raise # check keywords in configuration file check_keywords(config) # using configuration as default, and parsing all command line arguments all_args = {} for section in config.sections(): # try to rename user-specified sections for consistency section = standardise_section_name(config, section) section_defaults = dict(config.items(section)) section_args, args_from_cmdline = \ _parse_arguments_by_section([], section, section_defaults, args_from_cmdline, app_module.REQUIRED_CONFIG_SECTION) all_args[section] = section_args # command line parameters should be valid assert not args_from_cmdline, \ '\nUnknown parameter: {}{}'.format(args_from_cmdline, epilog_string) # split parsed results in all_args # into dictionaries of system_args and input_data_args system_args = {} input_data_args = {} # copy system default sections to ``system_args`` for section in all_args: if section in SYSTEM_SECTIONS: system_args[section] = all_args[section] elif section == app_module.REQUIRED_CONFIG_SECTION: system_args['CUSTOM'] = all_args[section] vars(system_args['CUSTOM'])['name'] = module_name if all_args['SYSTEM'].model_dir is None: all_args['SYSTEM'].model_dir = os.path.join( os.path.dirname(meta_args.conf), 'model') # copy non-default sections to ``input_data_args`` for section in all_args: if section in SYSTEM_SECTIONS: continue if section == app_module.REQUIRED_CONFIG_SECTION: continue input_data_args[section] = all_args[section] # set the output path of csv list if not exists csv_path = input_data_args[section].csv_file if os.path.isfile(csv_path): # don't search files if csv specified in config try: delattr(input_data_args[section], 'path_to_search') except AttributeError: pass else: input_data_args[section].csv_file = '' # preserve ``config_file`` and ``action parameter`` from the meta_args system_args['CONFIG_FILE'] = argparse.Namespace(path=meta_args.conf) system_args['SYSTEM'].action = meta_args.action return system_args, input_data_args
def test_version(self): version_str = get_niftynet_version_string() expected_string = "NiftyNet version " self.assertEqual(version_str[:len(expected_string)], expected_string) check_pep_440()
if tf_version < minimal_required_version: tf.logging.fatal('TensorFlow %s or later is required.' '\n\nPlease upgrade TensorFlow' ' (https://www.tensorflow.org/) to be' ' able to use NiftyNet.\nCurrently using ' 'TensorFlow %s:\ninstalled at %s\n\n', minimal_required_version, tf_version, tf.__file__) raise ImportError else: tf.logging.info('TensorFlow version %s', tf_version) except AttributeError: pass from niftynet.utilities.versioning import get_niftynet_version_string __version__ = get_niftynet_version_string() import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) from tensorflow.python.util import deprecation deprecation._PRINT_DEPRECATION_WARNINGS = False try: from tensorflow.python.util import module_wrapper as deprecation except ImportError: from tensorflow.python.util import deprecation_wrapper as deprecation deprecation._PER_MODULE_WARNING_LIMIT = 0 from niftynet.io.misc_io import set_logger, close_logger
def test_version(self): version_str = get_niftynet_version_string() expected_string = "NiftyNet version " self.assertEqual(version_str[:len(expected_string)], expected_string)
if tf_version < minimal_required_version: tf.logging.fatal('TensorFlow %s or later is required.' '\n\nPlease upgrade TensorFlow' ' (https://www.tensorflow.org/) to be' ' able to use NiftyNet.\nCurrently using ' 'TensorFlow %s:\ninstalled at %s\n\n', minimal_required_version, tf_version, tf.__file__) raise ImportError else: tf.logging.info('TensorFlow version %s', tf_version) except AttributeError: pass from niftynet.utilities.versioning import get_niftynet_version_string __version__ = get_niftynet_version_string() import os from niftynet.io.misc_io import set_logger set_logger() from niftynet.utilities.util_import import require_module require_module('blinker', descriptor='New dependency', mandatory=True) import niftynet.utilities.util_common as util import niftynet.utilities.user_parameters_parser as user_parameters_parser from niftynet.engine.application_driver import ApplicationDriver from niftynet.evaluation.evaluation_application_driver import \
def run(): """ meta_parser is first used to find out location of the configuration file. based on the application_name or meta_parser.prog name, the section parsers are organised to find system parameters and application specific parameters :return: system parameters is a group of parameters including SYSTEM_SECTIONS and app_module.REQUIRED_CONFIG_SECTION input_data_args is a group of input data sources to be used by niftynet.io.ImageReader """ meta_parser = argparse.ArgumentParser( epilog= 'Please visit https://cmiclab.cs.ucl.ac.uk/CMIC/NiftyNet/tree/dev/demos ' 'for more info.') version_string = get_niftynet_version_string() meta_parser.add_argument("-v", "--version", action='version', version=version_string) meta_parser.add_argument( "-c", "--conf", help="Specify configurations from a file", metavar="File", ) meta_parser.add_argument( "-a", "--application_name", help="Specify application name", default="", ) meta_args, args_from_cmdline = meta_parser.parse_known_args() print(version_string) # read configurations, to be parsed by sections if (meta_args.conf is None) or (not os.path.isfile(meta_args.conf)): raise IOError("Configuration file not found {}".format(meta_args.conf)) config = configparser.ConfigParser() config.read([meta_args.conf]) try: if meta_parser.prog[:-3] in SUPPORTED_APP: module_name = meta_parser.prog[:-3] elif meta_parser.prog in SUPPORTED_APP: module_name = meta_parser.prog else: module_name = meta_args.application_name app_module = ApplicationFactory.create(module_name) assert app_module.REQUIRED_CONFIG_SECTION, \ "REQUIRED_CONFIG_SECTION should be static variable " \ "in {}".format(app_module) has_section_in_config(config, app_module.REQUIRED_CONFIG_SECTION) except ValueError: raise ValueError('{} requires [{}] section in the config file'.format( module_name, app_module.REQUIRED_CONFIG_SECTION)) # check keywords in configuration file check_keywords(config) # using configuration as default, and parsing all command line arguments all_args = {} for section in config.sections(): # try to rename user-specified sections for consistency section = standardise_section_name(config, section) section_defaults = dict(config.items(section)) section_args, args_from_cmdline = \ _parse_arguments_by_section([], section, section_defaults, args_from_cmdline, app_module.REQUIRED_CONFIG_SECTION) all_args[section] = section_args # command line parameters should be valid assert not args_from_cmdline, \ 'unknown parameter: {}'.format(args_from_cmdline) # split parsed results in all_args # into dictionary of system_args and input_data_args system_args = {} input_data_args = {} for section in all_args: if section in SYSTEM_SECTIONS: system_args[section] = all_args[section] elif section == app_module.REQUIRED_CONFIG_SECTION: system_args['CUSTOM'] = all_args[section] vars(system_args['CUSTOM'])['name'] = module_name else: input_data_args[section] = all_args[section] # set the output path of csv list if not exists csv_path = input_data_args[section].csv_file if not os.path.isfile(csv_path): csv_filename = os.path.join(all_args['SYSTEM'].model_dir, '{}.csv'.format(section)) input_data_args[section].csv_file = csv_filename else: # don't search files if csv specified in config try: delattr(input_data_args[section], 'path_to_search') except AttributeError: pass # update conf path system_args['CONFIG_FILE'] = argparse.Namespace(path=meta_args.conf) return system_args, input_data_args
def run(): """ meta_parser is first used to find out location of the configuration file. Based on the application_name or meta_parser.prog name, the section parsers are organised to find system parameters and application specific parameters. :return: system parameters is a group of parameters including SYSTEM_SECTIONS and app_module.REQUIRED_CONFIG_SECTION input_data_args is a group of input data sources to be used by niftynet.io.ImageReader """ meta_parser = argparse.ArgumentParser( description="Launch a NiftyNet application.", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=textwrap.dedent(EPILOG_STRING)) version_string = get_niftynet_version_string() meta_parser.add_argument("action", help="train networks, run inferences " "or evaluate inferences", metavar='ACTION', choices=['train', 'inference', 'evaluation']) meta_parser.add_argument("-v", "--version", action='version', version=version_string) meta_parser.add_argument("-c", "--conf", help="specify configurations from a file", metavar="CONFIG_FILE") meta_parser.add_argument("-a", "--application_name", help="specify an application module name", metavar='APPLICATION_NAME', default="") meta_args, args_from_cmdline = meta_parser.parse_known_args() print(version_string) # read configurations, to be parsed by sections config_file_name = __resolve_config_file_path(meta_args.conf) config = configparser.ConfigParser() config.read([config_file_name]) # infer application name from command app_name = None try: parser_prog = meta_parser.prog.replace('.py', '') app_name = parser_prog if parser_prog in SUPPORTED_APP \ else meta_args.application_name assert app_name except (AttributeError, AssertionError): raise ValueError( "\nUnknown application {}, or did you forget '-a' " "command argument?{}".format(app_name, EPILOG_STRING)) # load application by name app_module = ApplicationFactory.create(app_name) try: assert app_module.REQUIRED_CONFIG_SECTION, \ "\nREQUIRED_CONFIG_SECTION should be static variable " \ "in {}".format(app_module) has_section_in_config(config, app_module.REQUIRED_CONFIG_SECTION) except AttributeError: raise AttributeError( "Application code doesn't have REQUIRED_CONFIG_SECTION property. " "{} should be an instance of " "niftynet.application.base_application".format(app_module)) except ValueError: raise ValueError( "\n{} requires [{}] section in the config file.{}".format( app_name, app_module.REQUIRED_CONFIG_SECTION, EPILOG_STRING)) # check keywords in configuration file _check_config_file_keywords(config) # using configuration as default, and parsing all command line arguments # command line args override the configure file options all_args = {} for section in config.sections(): # try to rename user-specified sections for consistency section = standardise_section_name(config, section) section_defaults = dict(config.items(section)) section_args, args_from_cmdline = \ _parse_arguments_by_section([], section, section_defaults, args_from_cmdline, app_module.REQUIRED_CONFIG_SECTION) all_args[section] = section_args # check if any args from command line not recognised _check_cmd_remaining_keywords(list(args_from_cmdline)) # split parsed results in all_args # into dictionaries of system_args and input_data_args system_args, input_data_args = {}, {} for section in all_args: # copy system default sections to ``system_args`` if section in SYSTEM_SECTIONS: system_args[section] = all_args[section] continue # copy application specific sections to ``system_args`` if section == app_module.REQUIRED_CONFIG_SECTION: system_args['CUSTOM'] = all_args[section] vars(system_args['CUSTOM'])['name'] = app_name continue # copy non-default sections to ``input_data_args`` input_data_args[section] = all_args[section] # set the output path of csv list if not exists try: csv_path = resolve_file_name( input_data_args[section].csv_file, (os.path.dirname(config_file_name), NIFTYNET_HOME)) input_data_args[section].csv_file = csv_path # don't search files if csv specified in config try: delattr(input_data_args[section], 'path_to_search') except AttributeError: pass except (IOError, TypeError): input_data_args[section].csv_file = '' # preserve ``config_file`` and ``action parameter`` from the meta_args system_args['CONFIG_FILE'] = argparse.Namespace(path=config_file_name) system_args['SYSTEM'].action = meta_args.action if not system_args['SYSTEM'].model_dir: system_args['SYSTEM'].model_dir = os.path.join( os.path.dirname(config_file_name), 'model') return system_args, input_data_args