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