Source code for pymor.scripts.pymor_demo

#!/usr/bin/env python
# This file is part of the pyMOR project (http://www.pymor.org).
# Copyright 2013-2020 pyMOR developers and contributors. All rights reserved.
# License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause)

from __future__ import absolute_import, division, print_function

import importlib
import pkgutil
import pprint
import pymordemos
import sys
import runpy
import argparse
import functools


[docs]def run(): parser = argparse.ArgumentParser(description='Launcher script for all available pyMOR demos.', epilog=f'Example: {sys.argv[0]} burgers 1') def _run(module): # only need to remove the modname from args, rest is automatic del sys.argv[1] runpy.run_module(module, init_globals=None, run_name='__main__', alter_sys=True) sys.exit(0) modules = [] shorts = [] fails = {} for _, module_name, _ in pkgutil.walk_packages(pymordemos.__path__, pymordemos.__name__ + '.'): short = module_name[len('pymordemos.'):] modules.append(module_name) shorts.append(short) try: importlib.import_module(module_name) except (ImportError, ModuleNotFoundError) as e: fails[short] = e def usage(): msg = f'''Usage: {sys.argv[0]} DEMO_NAME | -h [DEMO_OPTIONS] Arguments: -h this message DEMO_NAME select one from these: {",".join(shorts)} DEMO_OPTIONS any arguments for the demo, including -h for detailed help ''' print(msg) if len(fails): print('\nThere are some pyMOR demos for which additional packages need to be installed:') print('\t'+'\n\t'.join(fails)) print('\nYou can try to `pip install pymor[full]` to install optional dependencies.\n') sys.exit(0) if len(sys.argv) < 2: usage() demo = sys.argv[1] if demo in shorts: if demo in fails.keys(): print(str(fails[demo])) print(f'\nThe {demo} pyMOR demo needs additional packages to be installed (see above error for details).') print('\nYou can try to `pip install pymor[full]` to install optional dependencies.\n') sys.exit(-1) _run(modules[shorts.index(demo)]) usage()
if __name__ == '__main__': run()