Source code for g3d.defs.g3dcode

"""G3DCode class definition"""
from typing import Any

import os
import sys
import getopt

from g3d.defs import G3DWorld
from g3d.defs import G3DDisplay
from g3d.defs import DIMMode
from g3d.defs import G3DEntity


[docs] class G3DCode(G3DEntity): """ base class for G3D code packages extends G3DEntity """ def __init__(self, *args: Any, **kwargs: Any) -> None: """initialize G3DCode environment""" update_code_type = True print_splash = True for key, value in kwargs.items(): if key == 'update_code_type': update_code_type = value elif key == 'silent' or key == 'quiet': print_splash = not value G3DWorld().display.silent = value if update_code_type: self._set_code_type() if print_splash: G3DWorld().display.splash() super().__init__(*args, **kwargs) self.__check_options() self._init_post_actions() def _set_default(self) -> None: super()._set_default() self._tag = 'g3d_code' def _set_code_type(self) -> None: pass def __check_options(self) -> None: g3d_world = G3DWorld() if len(sys.argv) > 1: try: opts, args = getopt.getopt(sys.argv[1:], g3d_world.options.short_opt, g3d_world.options.long_opt) except getopt.GetoptError as err: # print help information and exit: print(err) # will print something like "option -a not recognized" self._print_help_message() sys.exit(2) for opt, arg in opts: self._evaluate_run_option(opt, arg) def _print_help_message(self) -> None: print('-v verbose mode') def _evaluate_run_option(self, opt: str, arg: Any) -> None: g3d_world = G3DWorld() if opt in ['-h', '--help']: self._print_help_message() sys.exit(2) elif opt in ['-v', '--verbose']: g3d_world.display.verbose = True elif opt == '--no-cuda': os.environ['__USE_CUDA'] = '0' elif opt == '--prof': g3d_world.options.attach_profiler = True elif opt == '--g2d': g3d_world.options.dim_mode = DIMMode.G2D elif opt == '--g3d': g3d_world.options.dim_mode = DIMMode.G3D
[docs] def set(self, *args: Any, **kwargs: Any) -> None: """ sets code parameters according to specifications input: args, kwargs example: set(args, kwargs) """ super().set(*args, **kwargs) self.__check_options() # options overrides settings
[docs] def set_from_key_value(self, key: str, value: Any) -> bool: """ sets code parameters from specified key => value data input: key, value valid keys for G3DCode base class: 'verbose', 'silent/quiet', 'jobname', 'working_directory', 'dimension', 'cuda', 'prof' example: set_from_key_value(key, value) """ if super().set_from_key_value(key, value): return True elif key == 'verbose': G3DWorld().display.verbose = value return True elif key == 'silent' or key == 'quiet': G3DWorld().display.silent = value return True elif key == 'print_splash': G3DWorld().display.print_splash = value return True elif key == 'jobname': G3DWorld().io.jobname = value return True elif key == 'wd' or key == 'working_directory': G3DWorld().io.wd = value return True elif key == 'dimension' or key == 'dim': G3DWorld().options.dim_mode = value return True elif key == 'cuda': if value: os.environ['__USE_CUDA'] = '1' else: os.environ['__USE_CUDA'] = '0' return True elif key == 'attach_profiler' or key == 'prof': G3DWorld().options.attach_profiler = value return True elif key == 'update_code_type': return True return False
[docs] def jobname_append(self, name: str) -> None: """ extends jobname with the specified string input: name example: jobname_append(name) """ g3d_world = G3DWorld() jobname = g3d_world.io.jobname + name g3d_world.io.jobname = jobname
def _init_post_actions(self) -> None: pass
[docs] @staticmethod def hline(*args: Any, **kwargs: Any) -> None: """ prints horizontal line optional input (kwargs): dashes (default='-'), scrw (default=80) example: hline(dashes='*', scrw=90) """ g3d_display = G3DDisplay() g3d_display.hline(*args, **kwargs)
[docs] @staticmethod def header(*args: Any, **kwargs: Any) -> None: """ prints a header with specified information input: info optional input: dashes (default='='), scrw (default=80), number of blank lines after dashes n_space (default=1) example: header(info='header info') """ g3d_display = G3DDisplay() g3d_display.header(*args, **kwargs)