nomad-coe / electronic-parsers

Apache License 2.0
18 stars 7 forks source link

Broken type matching #234

Open ndaelman-hu opened 1 week ago

ndaelman-hu commented 1 week ago

The application of stricter type tests is raising pytest errors in the following parsers (corrected):

@ladinesa @JosePizarro3 and Pavle : This may also interest you.

ondracka commented 1 week ago

Can you please attach some example log?

ndaelman-hu commented 1 week ago

Can you please attach some example log?

Sure, it's the part failing atm, actually, but here goes (errors only):

============================= test session starts ==============================
platform linux -- Python 3.9.19, pytest-3.10.0, py-1.11.0, pluggy-1.5.0 -- /opt/hostedtoolcache/Python/3.9.19/x64/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/work/electronic-parsers/electronic-parsers, inifile:
plugins: cov-2.7.1, timeout-1.4.2, anyio-4.4.0

=================================== FAILURES ===================================
___________________________________ test_gw ____________________________________

self = TextParser(A1.abo) --> 1 parsed quantities (model), quantity = params
value = ['plane-waves for SigmaX                  1759', 'plane-waves for SigmaC and W             259', 'plane-waves for wave...             512', 'independent spin polarizations             1', 'spinorial components                       1', ...]
units = [None, None, None, None, None, None, ...]

    def _add_value(self, quantity: Quantity, value: List[str], units):
        """
        Converts the list of parsed blocks into data and apply the corresponding units.
        """
        try:
>           value_processed = [quantity.to_data(val) for val in value]

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:401: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

.0 = <list_iterator object at 0x7fd5b177a970>

>   value_processed = [quantity.to_data(val) for val in value]

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:401: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = params, val_raw = 'plane-waves for SigmaX                  1759'

    def to_data(self, val_raw: str):
        """
        Converts the parsed block into data.
        """

        def convert(val):
            if isinstance(val, str):
                if self.dtype is None:
                    if val.isdecimal():
                        return int(val)
                    else:
                        try:
                            return float(val)
                        except Exception:
                            pass
                else:
                    try:
                        return self.dtype(val)
                    except Exception:
                        pass

                return val

            elif isinstance(val, (list, np.ndarray)):
                try:
                    dtype = float if self.dtype is None else self.dtype
                    val_test = np.array(val, dtype=dtype)
                    if self.dtype is None:
                        if np.all(np.mod(val_test, 1) == 0):
                            val_test = np.array(val_test, dtype=int)
                            dtype = int
                    return val_test

                except Exception:
                    self.dtype = None
                    return [convert(v) for v in val]

            elif isinstance(val, dict):
                return {k: convert(v) for k, v in val.items()}

            else:
                return val

        if not val_raw:
            return

        if self.comment is not None:
            if val_raw.strip()[0] == self.comment:
                return

        data: Any = val_raw

        if self.str_operation is not None:
>           data = self.str_operation(val_raw)

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:226: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

val_in = 'plane-waves for SigmaX                  1759'

    def params_to_pairs(val_in):
        key = '_'.join(val_in.split()[:-1]).replace('-', '_')
>       value = np.int(val_in.split()[-1])

electronicparsers/abinit/parser.py:982: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

attr = 'int'

    def __getattr__(attr):
        # Warn for expired attributes, and return a dummy function
        # that always raises an exception.
        import warnings
        import math
        try:
            msg = __expired_functions__[attr]
        except KeyError:
            pass
        else:
            warnings.warn(msg, DeprecationWarning, stacklevel=2)

            def _expired(*args, **kwds):
                raise RuntimeError(msg)

            return _expired

        # Emit warnings for deprecated attributes
        try:
            val, msg = __deprecated_attrs__[attr]
        except KeyError:
            pass
        else:
            warnings.warn(msg, DeprecationWarning, stacklevel=2)
            return val

        if attr in __future_scalars__:
            # And future warnings for those that will change, but also give
            # the AttributeError
            warnings.warn(
                f"In the future `np.{attr}` will be defined as the "
                "corresponding NumPy scalar.", FutureWarning, stacklevel=2)

        if attr in __former_attrs__:
>           raise AttributeError(__former_attrs__[attr])
E           AttributeError: module 'numpy' has no attribute 'int'.
E           `np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
E           The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
E               https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/numpy/__init__.py:324: AttributeError

During handling of the above exception, another exception occurred:

parser = <electronicparsers.abinit.parser.AbinitParser object at 0x7fd5b125f460>

    def test_gw(parser):
        archive = EntryArchive()
        parser._calculation_type = 'gw'
>       parser.parse('tests/data/abinit/ZrO2_GW/A1.abo', archive, None)

tests/test_abinitparser.py:123: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
electronicparsers/abinit/parser.py:1836: in parse
    self.dataset = self.out_parser.get('dataset', [])
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/file_parser.py:160: in get
    val = self.results.get(key)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/file_parser.py:75: in results
    self.parse(self._key, **self._kwargs)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:560: in parse
    self._parse_quantity(quantity)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:496: in _parse_quantity
    value.append(sub_parser.parse())
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:560: in parse
    self._parse_quantity(quantity)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:496: in _parse_quantity
    value.append(sub_parser.parse())
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:551: in parse
    self._parse_quantities(quantities_findall)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:475: in _parse_quantities
    self._add_value(quantity, values, units)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:416: in _add_value
    self.logger.warning(
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/logging/__init__.py:2082: in warning
    root.warning(msg, *args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <RootLogger root (DEBUG)>, msg = 'Error setting value', args = ()
kwargs = {'data': {'quantity': 'params'}}

    def warning(self, msg, *args, **kwargs):
        """
        Log 'msg % args' with severity 'WARNING'.

        To pass exception information, use the keyword argument exc_info with
        a true value, e.g.

        logger.warning("Houston, we have a %s", "bit of a problem", exc_info=1)
        """
        if self.isEnabledFor(WARNING):
>           self._log(WARNING, msg, args, **kwargs)
E           TypeError: _log() got an unexpected keyword argument 'data'

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/logging/__init__.py:1458: TypeError
___________________________________ test_gw ____________________________________

parser = <electronicparsers.fhiaims.parser.FHIAimsParser object at 0x7fd5b177c400>

    def test_gw(parser):
        """Tests for GW calculations in an atom, He"""
        archive = EntryArchive()
        parser._calculation_type = 'gw'
>       parser.parse('tests/data/fhiaims/He_gw/He_scGW_ontop_PBE.out', archive, None)

tests/test_fhiaimsparser.py:337: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
electronicparsers/fhiaims/parser.py:2557: in parse
    self.parse_gw()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <electronicparsers.fhiaims.parser.FHIAimsParser object at 0x7fd5b177c400>

    def parse_gw(self):
        sec_run = self.archive.run[-1]

        # GW method
        sec_method = Method()
        sec_run.method.append(sec_method)
        # GW
        sec_gw = GW()
        sec_method.gw = sec_gw
        sec_gw.type = self._gw_flag_map.get(self.out_parser.get('gw_flag'), None)
        sec_gw.n_states = self.out_parser.get('n_states_gw')
        # KMesh
        if self.out_parser.get('k_grid') is not None:
            sec_k_mesh = KMesh()
            sec_method.k_mesh = sec_k_mesh
            sec_k_mesh.grid = self.out_parser.get('k_grid')
            # QMesh copied from KMesh
            sec_gw.m_add_sub_section(GW.q_mesh, sec_k_mesh)
        # Analytical continuation
        sec_gw.analytical_continuation = self.gw_analytical_continuation[
            self.out_parser.get('anacon_type', 1)
        ]
        # FrequencyMesh
        frequency_data = self.out_parser.get('frequency_data', [])
        if len(frequency_data) > 0:
>           freq_points = np.array(frequency_data)[:, 1] * ureg.hartree
E           ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (20, 2) + inhomogeneous part.

electronicparsers/fhiaims/parser.py:1426: ValueError
_________________________________ test_gw_eigs _________________________________

parser = <electronicparsers.fhiaims.parser.FHIAimsParser object at 0x7fd5b177c400>

    def test_gw_eigs(parser):
        """Tests for GW calculations in a molecule, CHN"""
        archive = EntryArchive()
>       parser.parse('tests/data/fhiaims/CHN_gw/output.out', archive, None)

tests/test_fhiaimsparser.py:375: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
electronicparsers/fhiaims/parser.py:2557: in parse
    self.parse_gw()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <electronicparsers.fhiaims.parser.FHIAimsParser object at 0x7fd5b177c400>

    def parse_gw(self):
        sec_run = self.archive.run[-1]

        # GW method
        sec_method = Method()
        sec_run.method.append(sec_method)
        # GW
        sec_gw = GW()
        sec_method.gw = sec_gw
        sec_gw.type = self._gw_flag_map.get(self.out_parser.get('gw_flag'), None)
        sec_gw.n_states = self.out_parser.get('n_states_gw')
        # KMesh
        if self.out_parser.get('k_grid') is not None:
            sec_k_mesh = KMesh()
            sec_method.k_mesh = sec_k_mesh
            sec_k_mesh.grid = self.out_parser.get('k_grid')
            # QMesh copied from KMesh
            sec_gw.m_add_sub_section(GW.q_mesh, sec_k_mesh)
        # Analytical continuation
        sec_gw.analytical_continuation = self.gw_analytical_continuation[
            self.out_parser.get('anacon_type', 1)
        ]
        # FrequencyMesh
        frequency_data = self.out_parser.get('frequency_data', [])
        if len(frequency_data) > 0:
>           freq_points = np.array(frequency_data)[:, 1] * ureg.hartree
E           ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (200, 2) + inhomogeneous part.

electronicparsers/fhiaims/parser.py:1426: ValueError
______________________________ test_scf_multirun _______________________________

parser = <electronicparsers.gaussian.parser.GaussianParser object at 0x7fd5ad496400>

    def test_scf_multirun(parser):
        archive = EntryArchive()
>       parser.parse('tests/data/gaussian/Al_multistep/m61b5.out', archive, None)

tests/test_gaussianparser.py:88: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
electronicparsers/gaussian/parser.py:1537: in parse
    runs = self.out_parser.get('run', [])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = GaussianOutParser(m61b5.out) --> 2 parsed quantities (program, x_gaussian_memory)
key = 'run', default = [], unit = None, kwargs = {}

    def get(
        self,
        key: str,
        default: Any = None,
        unit: Union[pint.Unit, pint.Quantity] = None,
        **kwargs,
    ):
        """
        Returns the parsed result for quantity with name key. If quantity is not in
        results default will be returned. A pint unit can be provided which is attached
        to the returned value.
        """
        if self.mainfile is None:
            return default

        self._key = key
        self._kwargs = kwargs
>       val = self.results.get(key)
E       AttributeError: 'NoneType' object has no attribute 'get'

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/file_parser.py:160: AttributeError
__________________________________ test_freq ___________________________________

parser = <electronicparsers.gaussian.parser.GaussianParser object at 0x7fd5ad496400>

    def test_freq(parser):
        archive = EntryArchive()
>       parser.parse('tests/data/gaussian/CHO_freq/prono.out', archive, None)

tests/test_gaussianparser.py:137: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
electronicparsers/gaussian/parser.py:1537: in parse
    runs = self.out_parser.get('run', [])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = GaussianOutParser(prono.out) --> 3 parsed quantities (program, x_gaussian_memory, x_gaussian_number_of_processors)
key = 'run', default = [], unit = None, kwargs = {}

    def get(
        self,
        key: str,
        default: Any = None,
        unit: Union[pint.Unit, pint.Quantity] = None,
        **kwargs,
    ):
        """
        Returns the parsed result for quantity with name key. If quantity is not in
        results default will be returned. A pint unit can be provided which is attached
        to the returned value.
        """
        if self.mainfile is None:
            return default

        self._key = key
        self._kwargs = kwargs
>       val = self.results.get(key)
E       AttributeError: 'NoneType' object has no attribute 'get'

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/file_parser.py:160: AttributeError
_________________________________ test_parser __________________________________

parser = <electronicparsers.tbstudio.parser.TBStudioParser object at 0x7fd5ad56c970>

    def test_parser(parser):
        archive = EntryArchive()
        parser.parse('tests/data/tbstudio/graphenePz.tbm', archive, None)

        sec_run = archive.run[-1]
        sec_program = sec_run.program
        assert sec_program.name == 'TBStudio'
        assert sec_program.version == '2.0'

        assert len(sec_run.system) == 1
        sec_system = sec_run.system[-1]
        assert sec_system.atoms.labels == ['C', 'C']

        a = [1.23435, 2.14452, 0.0]
        b = [1.23435, -2.14452, 0.0]
        c = [0.0, 0.0, 20.0]
        positions = [[0.00414, -0.004863, 10.0], [1.238611, -0.72006, 10.0]]
>       assert sec_system.atoms.lattice_vectors.to('angstrom').magnitude == approx(
            np.array([a, b, c])
        )

tests/test_tbstudioparser.py:52: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/_pytest/python_api.py:137: in __eq__
    return ApproxBase.__eq__(self, actual)
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/_pytest/python_api.py:70: in __eq__
    return all(
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/_pytest/python_api.py:70: in <genexpr>
    return all(
/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/_pytest/python_api.py:151: in _yield_comparisons
    yield np.asscalar(actual[i]), np.asscalar(self.expected[i])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

attr = 'asscalar'

    def __getattr__(attr):
        # Warn for expired attributes, and return a dummy function
        # that always raises an exception.
        import warnings
        import math
        try:
            msg = __expired_functions__[attr]
        except KeyError:
            pass
        else:
            warnings.warn(msg, DeprecationWarning, stacklevel=2)

            def _expired(*args, **kwds):
                raise RuntimeError(msg)

            return _expired

        # Emit warnings for deprecated attributes
        try:
            val, msg = __deprecated_attrs__[attr]
        except KeyError:
            pass
        else:
            warnings.warn(msg, DeprecationWarning, stacklevel=2)
            return val

        if attr in __future_scalars__:
            # And future warnings for those that will change, but also give
            # the AttributeError
            warnings.warn(
                f"In the future `np.{attr}` will be defined as the "
                "corresponding NumPy scalar.", FutureWarning, stacklevel=2)

        if attr in __former_attrs__:
            raise AttributeError(__former_attrs__[attr])

        if attr == 'testing':
            import numpy.testing as testing
            return testing
        elif attr == 'Tester':
            "Removed in NumPy 1.25.0"
            raise RuntimeError("Tester was removed in NumPy 1.25.")

>       raise AttributeError("module {!r} has no attribute "
                             "{!r}".format(__name__, attr))
E       AttributeError: module 'numpy' has no attribute 'asscalar'

/opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/numpy/__init__.py:333: AttributeError
------------------------------ Captured log call -------------------------------
parser.py                  409 WARNING  TBStudio Workflow was not found.
======= 6 failed, 186 passed, 1 skipped, 248 warnings in 254.39 seconds ========
ondracka commented 1 week ago

I don't see any OpenMX error there, or am I missing something?

ndaelman-hu commented 1 week ago

I don't see any OpenMX error there, or am I missing something?

My apologies, it'll have been a warning then. There were so many, manually processing the output is a bit overwhelming. I'll update the list.

ondracka commented 1 week ago

No problem, just send me the log (and steps to reproduce if possible) and I'll take a look at the OpenMX issues...

ndaelman-hu commented 1 week ago

No problem, just send me the log (and steps to reproduce if possible) and I'll take a look at the OpenMX issues...

tests/test_openmxparser.py::test_HfO2
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 162
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 274
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 326
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 368
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 417
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+([A-Z]{1}[a-z]{2}' (truncated) but at position 475
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 28
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 84
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'(?i)scf.Hubbard.U\\s+' (truncated) but at position 56
    re_findall_b = re.compile(re_findall.encode())

tests/test_openmxparser.py::test_AlN
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 28
    re_findall_b = re.compile(re_findall.encode())

tests/test_openmxparser.py::test_C2N2
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 28
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 57
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'(?i)scf.Hubbard.U\\s+' (truncated) but at position 29
    re_findall_b = re.compile(re_findall.encode())

tests/test_openmxparser.py::test_CrO2
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 75
    re_findall_b = re.compile(re_findall.encode())
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'MD\\.maxIter\\s+(\\d+)|' (truncated) but at position 47
    re_findall_b = re.compile(re_findall.encode())

tests/test_openmxparser.py::test_graphite
  /opt/hostedtoolcache/Python/3.9.19/x64/lib/python3.9/site-packages/nomad/parsing/file_parser/text_parser.py:432: DeprecationWarning: Flags not at the start of the expression b'\\s+Elapsed.Time.\\s+(' (truncated) but at position 28
    re_findall_b = re.compile(re_findall.encode())