From 45edbd908359cbb40b004309010e2487a8ffbb7c Mon Sep 17 00:00:00 2001 From: Igor Popov <popov@ipb.ac.rs> Date: Fri, 4 Jan 2019 18:05:55 +0100 Subject: [PATCH] Adopting wien2k parser to NOMAD-FAIR --- .gitignore | 3 ++ parser/wien2kparser/__init__.py | 1 + .../setup_paths.py | 0 .../wien2k_parser.py | 42 ++++++++++++++++--- .../wien2k_parser_in0.py | 12 +++--- .../wien2k_parser_in1.py | 2 +- .../wien2k_parser_in1c.py | 2 +- .../wien2k_parser_in2.py | 2 +- .../wien2k_parser_in2c.py | 2 +- .../wien2k_parser_struct.py | 2 +- setup.py | 33 +++++++++++++++ 11 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 parser/wien2kparser/__init__.py rename parser/{parser-wien2k => wien2kparser}/setup_paths.py (100%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser.py (92%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_in0.py (97%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_in1.py (99%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_in1c.py (99%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_in2.py (98%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_in2c.py (98%) rename parser/{parser-wien2k => wien2kparser}/wien2k_parser_struct.py (99%) create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index a6cb8b6..914589a 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ TAGS lib/ env/ + +*egg-info + diff --git a/parser/wien2kparser/__init__.py b/parser/wien2kparser/__init__.py new file mode 100644 index 0000000..f61e055 --- /dev/null +++ b/parser/wien2kparser/__init__.py @@ -0,0 +1 @@ +from wien2kparser.wien2k_parser import Wien2kParser \ No newline at end of file diff --git a/parser/parser-wien2k/setup_paths.py b/parser/wien2kparser/setup_paths.py similarity index 100% rename from parser/parser-wien2k/setup_paths.py rename to parser/wien2kparser/setup_paths.py diff --git a/parser/parser-wien2k/wien2k_parser.py b/parser/wien2kparser/wien2k_parser.py similarity index 92% rename from parser/parser-wien2k/wien2k_parser.py rename to parser/wien2kparser/wien2k_parser.py index ee53b67..640d0ce 100644 --- a/parser/parser-wien2k/wien2k_parser.py +++ b/parser/wien2kparser/wien2k_parser.py @@ -1,11 +1,11 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths import numpy as np from nomadcore.simple_parser import mainFunction, AncillaryParser, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl import os, sys, json, logging -import wien2k_parser_struct, wien2k_parser_in0, wien2k_parser_in1c, wien2k_parser_in2c, wien2k_parser_in1, wien2k_parser_in2 +from wien2kparser import wien2k_parser_struct, wien2k_parser_in0, wien2k_parser_in1c, wien2k_parser_in2c, wien2k_parser_in1, wien2k_parser_in2 ################################################################ @@ -164,8 +164,8 @@ class Wien2kContext(object): atom_labels = section['x_wien2k_atom_name'] if atom_labels is not None: backend.addArrayValues('atom_labels', np.asarray(atom_labels)) - - + + # atom force atom_force = [] for i in ['x', 'y', 'z']: @@ -193,7 +193,7 @@ class Wien2kContext(object): def onClose_section_scf_iteration(self, backend, gIndex, section): #Trigger called when section_scf_iteration is closed. - + # count number of SCF iterations self.scfIterNr += 1 @@ -264,7 +264,7 @@ cachingLevelForMetaName = { "XC_functional_name": CachingLevel.ForwardAndCache, "energy_total": CachingLevel.ForwardAndCache - + } # loading metadata from nomad-meta-info/meta_info/nomad_meta_info/fhi_aims.nomadmetainfo.json @@ -277,6 +277,36 @@ parserInfo = { metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/wien2k.nomadmetainfo.json")) metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None) +class Wien2kParser: + """ A proper class envolop for running this parser from within python. """ + def __init__(self, backend, **kwargs): + self.backend_factory = backend + + logging.warn('something is wrong') + logger = logging.getLogger(__name__) + logger.warn(...) + + def parse(self, mainfile): + from unittest.mock import patch + # _logging.getLogger('nomadcore').setLevel(_logging.WARNING) + backend = self.backend_factory(metaInfoEnv) + with patch.object(sys, 'argv', ['<exe>', '--uri', 'nmd://uri', mainfile]): + mainFunction( + mainFileDescription, + metaInfoEnv, + parserInfo, + superContext=Wien2kContext(), + superBackend=backend) + + return backend + + + def setup_logger(self, new_logger): + if hasattr(new_logger, 'bind'): + # tell tests about received logger + new_logger.debug('received logger') + + if __name__ == "__main__": superContext = Wien2kContext() mainFunction(mainFileDescription, metaInfoEnv, parserInfo, superContext = superContext) diff --git a/parser/parser-wien2k/wien2k_parser_in0.py b/parser/wien2kparser/wien2k_parser_in0.py similarity index 97% rename from parser/parser-wien2k/wien2k_parser_in0.py rename to parser/wien2kparser/wien2k_parser_in0.py index 7baa25d..cc0629f 100644 --- a/parser/parser-wien2k/wien2k_parser_in0.py +++ b/parser/wien2kparser/wien2k_parser_in0.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl @@ -88,7 +88,7 @@ class Wien2kIn0Context(object): 'XC_TPSS': ['MGGA_X_TPSS','MGGA_C_TPSS'], '46':['GGA_X_HTBS'], - 'XC_HTBS': ['GGA_X_HTBS'], + 'XC_HTBS': ['GGA_X_HTBS'], '47': ['HYB_GGA_XC_B3LYP'], 'XC_B3LYP': ['HYB_GGA_XC_B3LYP'], @@ -99,15 +99,15 @@ class Wien2kIn0Context(object): # VX_SLDA: # 52: ['-'], - # EX_SPBE: + # EX_SPBE: # VX_SPBE: # 53: ['-'], - # EX_SWC: + # EX_SWC: # VX_SWC: # 54: ['-'], - # EX_SPBESOL: + # EX_SPBESOL: # VX_SPBESOL: # 55: ['-'], @@ -149,7 +149,7 @@ def buildIn0Matchers(): def get_cachingLevelForMetaName(metaInfoEnv, CachingLvl): """Sets the caching level for the metadata. - + Args: metaInfoEnv: metadata which is an object of the class InfoKindEnv in nomadcore.local_meta_info.py. CachingLvl: Sets the CachingLevel for the sections k_band, run, and single_configuration_calculation. diff --git a/parser/parser-wien2k/wien2k_parser_in1.py b/parser/wien2kparser/wien2k_parser_in1.py similarity index 99% rename from parser/parser-wien2k/wien2k_parser_in1.py rename to parser/wien2kparser/wien2k_parser_in1.py index 05c98fa..3e91f71 100644 --- a/parser/parser-wien2k/wien2k_parser_in1.py +++ b/parser/wien2kparser/wien2k_parser_in1.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl diff --git a/parser/parser-wien2k/wien2k_parser_in1c.py b/parser/wien2kparser/wien2k_parser_in1c.py similarity index 99% rename from parser/parser-wien2k/wien2k_parser_in1c.py rename to parser/wien2kparser/wien2k_parser_in1c.py index c1e4ed7..8334289 100644 --- a/parser/parser-wien2k/wien2k_parser_in1c.py +++ b/parser/wien2kparser/wien2k_parser_in1c.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl diff --git a/parser/parser-wien2k/wien2k_parser_in2.py b/parser/wien2kparser/wien2k_parser_in2.py similarity index 98% rename from parser/parser-wien2k/wien2k_parser_in2.py rename to parser/wien2kparser/wien2k_parser_in2.py index 5ff4659..7174dfc 100644 --- a/parser/parser-wien2k/wien2k_parser_in2.py +++ b/parser/wien2kparser/wien2k_parser_in2.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl diff --git a/parser/parser-wien2k/wien2k_parser_in2c.py b/parser/wien2kparser/wien2k_parser_in2c.py similarity index 98% rename from parser/parser-wien2k/wien2k_parser_in2c.py rename to parser/wien2kparser/wien2k_parser_in2c.py index 6c5c122..ba090e4 100644 --- a/parser/parser-wien2k/wien2k_parser_in2c.py +++ b/parser/wien2kparser/wien2k_parser_in2c.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl diff --git a/parser/parser-wien2k/wien2k_parser_struct.py b/parser/wien2kparser/wien2k_parser_struct.py similarity index 99% rename from parser/parser-wien2k/wien2k_parser_struct.py rename to parser/wien2kparser/wien2k_parser_struct.py index 1b1586e..8d669f2 100644 --- a/parser/parser-wien2k/wien2k_parser_struct.py +++ b/parser/wien2kparser/wien2k_parser_struct.py @@ -1,5 +1,5 @@ from builtins import object -import setup_paths +from wien2kparser import setup_paths from nomadcore.simple_parser import mainFunction, CachingLevel from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.local_meta_info import loadJsonFile, InfoKindEl diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..f8adc8f --- /dev/null +++ b/setup.py @@ -0,0 +1,33 @@ +# Copyright 2015-2018 Lorenzo Pardini +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from setuptools import setup, find_packages + + +def main(): + setup( + name='wien2kparser', + version='0.1', + description='NOMAD parser implementation for Wien2k.', + license='APACHE 2.0', + package_dir={'': 'parser'}, + packages=find_packages('parser'), + install_requires=[ + 'nomadcore' + ], + ) + + +if __name__ == '__main__': + main() -- GitLab