Commit 0622015a authored by Lauri Himanen's avatar Lauri Himanen
Browse files

Better documentation.

parent b988039e
......@@ -3,13 +3,29 @@
import json
import os
import time
from abc import ABCMeta, abstractmethod
from cp2kparser.generics.util import *
#===============================================================================
class NomadParser(object):
"""The base class for a NoMaD parser.
This class should be inherited by the python based parsers. It provides
general utility methods and a single interface for input and output.
The utilities that this class provides and the inherited classes should NOT
do:
- Converting results to JSON
- Converting units to SI
- Timing
- Caching of results
- Providing file contents, sizes and handles
This class also defines some absract methods that each parser must
implement.
"""
__metaclass__ = ABCMeta
def __init__(self, input_json_string):
self.input_json_string = input_json_string
......@@ -27,7 +43,10 @@ class NomadParser(object):
self.results = {}
def get_file_contents(self, file_id):
"""Get the contents for the file with the given id. Uses cached result
if available. Does not cache files that are bigger than a certain
limit.
"""
cache_limit = 10000
contents = self.file_contents.get(file_id)
if not contents:
......@@ -39,7 +58,9 @@ class NomadParser(object):
return contents
def get_file_size(self, file_id):
"""Get the size of a file with the given id. Uses cached result
if available.
"""
size = self.file_sizes.get(file_id)
if not size:
fh = self.file_handles[file_id]
......@@ -49,10 +70,11 @@ class NomadParser(object):
return size
def get_file_handle(self, file_id):
"""Get the handle for a file with the given id. Uses cached result
if available.
"""
handle = self.file_handles.get(file_id)
if not handle:
path = self.file_ids[file_id]
try:
handle = open(path, "r")
......@@ -64,7 +86,8 @@ class NomadParser(object):
return handle
def analyse_input_json(self):
"""Analyze the JSON given as input.
"""
# Try to decode
self.input_json_object = json.loads(self.input_json_string)
......@@ -80,17 +103,6 @@ class NomadParser(object):
# See if the metainfos exist
def setup_version(self):
"""Setup a correct implementation for this version of CP2K.
"""
pass
def determine_file_ids(self):
"""If the files have not been given an id, try to determine the
correct ids by looking at the input file, contents and file extensions.
"""
pass
def get_quantity(self, name):
"""Given a unique quantity id which is present in the metainfo
declaration, parses the corresponding quantity (if available) and
......@@ -122,16 +134,30 @@ class NomadParser(object):
print_debug("Elapsed time: {} ms".format((stop-start)*1000))
return result
@abstractmethod
def setup_version(self):
"""Setup a correct implementation for this version.
"""
pass
@abstractmethod
def determine_file_ids(self):
"""If the files have not been given an id, try to determine the
correct ids by looking at the input file, contents and file extensions.
"""
pass
@abstractmethod
def parse_quantity(self, name):
"""Override this function in an actual implementation"""
"""Parse a quantity from the given files."""
pass
@abstractmethod
def check_quantity_availability(self, name):
"""Check quantity availability.
-Check the list of available quantities declared in interface.
-Check if the run type actually produces the quantity
-Check if the quantity is allowed by the 'metainfoToKeep' and
'metainfoToSkip'
"""
return True
pass
......@@ -13,7 +13,8 @@ from cp2kparser.engines.cp2kinputengine import CP2KInputEngine
#===============================================================================
class CP2KParser(NomadParser):
"""The interface to a NoMaD CP2K parser.
"""The interface for a NoMaD CP2K parser. All parsing actions will go
through this class.
"""
def __init__(self, input_json_string):
......@@ -167,9 +168,11 @@ class CP2KImplementation(object):
xc_shortcut = self.inputengine.get_subsection("FORCE_EVAL/DFT/XC/XC_FUNCTIONAL").get_parameter()
return {
'B3LYP': "HYB_GGA_XC_B3LYP",
'BEEFVDW': "",
'BLYP': "",
'PADE': "LDA_XC_TETER93",
'PBE': "GGA_X_PBE",
'B3LYP': "HYB_GGA_XC_B3LYP",
}.get(xc_shortcut, None)
def particle_forces(self):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment