Source code for ase2sprkkr.tools.commands.info

#!/usr/bin/env python
"""
This is a sctipt to visualise in_struct.inp files. Run it to see the doc.
"""
from pathlib import Path
import sys
import argparse

if not __package__:
  __package__ = 'ase2sprkkr.tools.commands'
sys.path.append(str(Path(__file__).resolve().parents[3]))

from ... import InputParameters, OutputFile  # NOQA
from ...common.tools import main  # NOQA


help='Show capabilities of ase2sprkkr (known tasks, output files formats etc.).'
description="""\n Example of usage:
    #show all tasks
    ase2sprkkr info --task

    #show information about task SCF
    ase2sprkkr info --task=scf

    #show information about section ENERGY in task SCF
    ase2sprkkr info --task=scf.energy

    #find all sections/values with name ENERGY in all tasks
    ase2sprkkr info --task=.energy
"""


""" This options will be printed, if no argument is given """
default_options = [
  'task',
  'output_file',
]

""" These are the all options """
possible_options = default_options


[docs] def parser(parser): parser.add_argument('--task', '-t', help='Show informations about the known tasks. You can limit the output to a given task/section/option by an optional agrument [TASK]', nargs='?', const=True) parser.add_argument('--output-file', '-o', help='Show informations about the known output files. You can ', nargs='?', const=True) action = getattr(argparse, 'BooleanOptionalAction', 'store_true') parser.add_argument('--verbose', '-v', help='Give a more verbose info. It is set automatically, if the output is limited.', action=action, default=None)
[docs] def run(args): print("ASE2SPRKKR\n" "==========\n" "A tool to run SPRKKR calculations\n\n") def info_task(args, filter): input_parameters = InputParameters.definitions.values() if filter is True: input_parameters = list(input_parameters) path = None print("The known SPRKKR tasks (kind of input parameters)\n" "---------------------------------------------------") tasks = 'the known SPRKKR tasks' anyof = 'any of ' else: if '.' in filter: filter,path = filter.split('.', 1) else: path = None input_parameters = [ i for i in input_parameters if filter in i.name.lower() ] if len(input_parameters) == 0: print("There is no known SPRKKR task with '{filter.upper()}' in its name") return if filter == '': tasks = 'the known SPRKKR tasks' anyof = 'any of ' elif len(input_parameters) == 1 and \ input_parameters[0].name.upper() == filter.upper(): tasks = f"the task '{input_parameters[0].name.upper()}'" anyof = '' else: tasks = f"the tasks containing '{filter}'" anyof = 'any of ' if path: x=f"The configuration sections/values '{path.upper()}' in {anyof}{tasks}" print(f"{x}\n{'-'*len(x)}") else: x=f"{tasks.capitalize()}'" print(f"{x}\n{'-'*len(x)}") found = False for i in input_parameters: def print_ip(i, prefix='', add=None): if args.verbose or args.verbose is None and filter is not True: print("\n") if add: print(add) print(i.description(prefix=prefix, verbose=True)) else: if add: print(add) print(prefix + i.info()) if path is not None: ii = list(i.create_object().get_members(path)) if not ii: continue found = True for val in ii: val = val._definition add = f"{val.item_type.capitalize()} {val.get_path()} of task {i.name.upper()}:" print_ip(val, ' ', add) else: print_ip(i, prefix='') if path and not found: out = f"There is no member named '{path}' in {anyof}{tasks}" print(out) def info_output_file(args, filter): print("Known SPRKKR output files\n" "--------------------") if filter is not True: filter = filter.lower() for ext, i in OutputFile.definitions.items(): i = i.definition if filter is not True and ( (filter not in ext.lower()) or (filter not in i.name.lower()) ): continue if args.verbose: print("\n\n") print(f"{ext.upper()}: ",end='') if args.verbose or args.verbose is None and filter is not True: print(i.description(verbose=True)) else: print(i.info()) g = locals() def print_option(i, filter): if filter is not True: filter = filter.lower() g["info_" + i](args, filter) print("\n") printed=False for i in possible_options: if getattr(args, i) is not None: print_option(i, getattr(args, i)) printed=True if not printed: for i in default_options: print_option(i, True)