Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update hdf5 references #214

Merged
merged 4 commits into from
Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/python-actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ jobs:
- name: Install dependencies
run: |
pip install --upgrade pip
# we need the latest nomad version for testing
pip install nomad-lab[infrastructure]@git+https://github.com/nomad-coe/nomad.git@develop
pip install '.[dev]' --index-url https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple
pip install coverage coveralls
pip install types-PyYAML
# we need the latest nomad version for testing
pip install nomad-lab[infrastructure]@git+https://github.com/nomad-coe/nomad.git@develop
- name: mypy
run: |
python -m mypy --ignore-missing-imports --follow-imports=silent --no-strict-optional *parsers tests
Expand Down
2 changes: 1 addition & 1 deletion electronicparsers/soliddmft/metainfo/soliddmft.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
Section,
SubSection,
JSON,
HDF5Reference,
)
from nomad.datamodel.hdf5 import HDF5Reference
import runschema.run # pylint: disable=unused-import
import runschema.calculation # pylint: disable=unused-import
import runschema.method # pylint: disable=unused-import
Expand Down
100 changes: 44 additions & 56 deletions electronicparsers/soliddmft/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
)
from runschema.system import System, Atoms
from .metainfo.soliddmft import x_soliddmft_observables_parameters
from nomad.parsing.parser import to_hdf5
from ..utils import numpy_type_to_json_serializable


Expand Down Expand Up @@ -423,9 +422,9 @@ def parse_scf(
val = self.extract_groups_datasets(
value.get(n_imp)[f'{i_scf}']
)
conv_obs[
f'{key}_imp{n_imp}'
] = numpy_type_to_json_serializable(val)
conv_obs[f'{key}_imp{n_imp}'] = (
numpy_type_to_json_serializable(val)
)
sec_scf.x_soliddmft_convergence_obs = conv_obs

# Energy per scf iteration step
Expand Down Expand Up @@ -454,58 +453,47 @@ def parse_scf(

# Observables per scf iteration step
scf_iteration = self.dmft_results.get(f'it_{i_scf + 1}')
if self.archive.m_context:
with self.archive.m_context.raw_file(filename, farg) as file:
for n in range(n_impurities):
n_imp = str(n_imp)
sec_obs_scf = x_soliddmft_observables_parameters()
sec_scf.x_soliddmft_observables.append(sec_obs_scf)
for gf_iteration in self.iteration_gfs:
if f'{gf_iteration}_{n_imp}' not in scf_iteration.keys():
continue
value_per_spin_orbital = scf_iteration.get(
f'{gf_iteration}_{n_imp}'
)
value_tot = []
for spin_orb in value_per_spin_orbital.keys():
if spin_orb == 'block_names':
continue
value = value_per_spin_orbital.get(spin_orb).get('data')
value = to_hdf5(
value,
file,
f'DMFT_results/it_{i_scf + 1}/{gf_iteration}_{n_imp}/{spin_orb}/data',
)
value_tot.append(value)
sec_obs_scf.m_set(
sec_obs_scf.m_get_quantity_definition(
f'x_soliddmft_{gf_iteration}'
),
value_tot,
)
for gf_observable in self.observable_gfs:
if gf_observable not in observables.keys():
continue
value_per_spin_orbital = observables.get(gf_observable).get(
f'{n_imp}'
)
value_tot = []
for spin_orb in value_per_spin_orbital.keys():
value = value_per_spin_orbital.get(spin_orb).get(
f'{i_scf + 1}'
)
value = to_hdf5(
value,
file,
f'DMFT_results/observables/{gf_observable}/{n_imp}/{spin_orb}/{i_scf + 1}',
)
value_tot.append(value)
sec_obs_scf.m_set(
sec_obs_scf.m_get_quantity_definition(
f'x_soliddmft_{gf_observable}'
),
value_tot,
)
for n in range(n_impurities):
n_imp = str(n_imp)
sec_obs_scf = x_soliddmft_observables_parameters()
sec_scf.x_soliddmft_observables.append(sec_obs_scf)
h5_base = f'{os.path.basename(self.mainfile)}#/DMFT_results'
for gf_iteration in self.iteration_gfs:
if f'{gf_iteration}_{n_imp}' not in scf_iteration.keys():
continue
value_per_spin_orbital = scf_iteration.get(
f'{gf_iteration}_{n_imp}'
)
value_tot = []
for spin_orb in value_per_spin_orbital.keys():
if spin_orb == 'block_names':
continue
value_tot.append(
f'{h5_base}/it_{i_scf + 1}/{gf_iteration}_{n_imp}/{spin_orb}/data'
)
sec_obs_scf.m_set(
sec_obs_scf.m_get_quantity_definition(
f'x_soliddmft_{gf_iteration}'
),
value_tot,
)
for gf_observable in self.observable_gfs:
if gf_observable not in observables.keys():
continue
value_per_spin_orbital = observables.get(gf_observable).get(
f'{n_imp}'
)
value_tot = []
for spin_orb in value_per_spin_orbital.keys():
value_tot.append(
f'{h5_base}/observables/{gf_observable}/{n_imp}/{spin_orb}/{i_scf + 1}'
)
sec_obs_scf.m_set(
sec_obs_scf.m_get_quantity_definition(
f'x_soliddmft_{gf_observable}'
),
value_tot,
)

def parse_gfs(sec_scc: Calculation, n_impurities: int):
"""Parses Green's functions quantities.
Expand Down
51 changes: 11 additions & 40 deletions electronicparsers/vasp/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -1293,9 +1293,9 @@ def kpoints_info(self):
# initialize parsing of k_points
method = self._get_key_values('/modeling[0]/kpoints[0]/generation[0]/param')
if method:
self._kpoints_info[
'sampling_method'
] = RunContentParser.sampling_method_mapping[method['param']]
self._kpoints_info['sampling_method'] = (
RunContentParser.sampling_method_mapping[method['param']]
)
divisions = self._get_key_values(
'/modeling[0]/kpoints[0]/generation[0]/v[@name="divisions"]'
)
Expand Down Expand Up @@ -1844,9 +1844,9 @@ def parse_method(self):
if len(sec_xc_functional.hybrid):
if not sec_xc_functional.hybrid[-1].parameters:
sec_xc_functional.hybrid[-1].parameters = dict()
sec_xc_functional.hybrid[-1].parameters[
'exact_exchange_mixing_factor'
] = aexx
sec_xc_functional.hybrid[-1].parameters['exact_exchange_mixing_factor'] = (
aexx
)
sec_xc_functional.normalize_hybrid()

# convergence thresholds
Expand Down Expand Up @@ -2257,40 +2257,11 @@ def parse_dos(n_calc):
elif len(charge_density) < n_points:
charge_density.extend([float(v) for v in line.strip().split()])
if charge_density and len(charge_density) == n_points:
# TODO remove temporary fix
if hasattr(Density, 'value_hdf5'):
from nomad.parsing.parser import to_hdf5

filename = os.path.join(
os.path.dirname(self.filepath.split('/raw/')[-1]),
f'{os.path.basename(self.filepath)}.archive.hdf5',
)
farg = (
'r+b'
if os.path.isfile(
os.path.join(os.path.dirname(self.filepath), filename)
)
else 'wb'
)
sec_density = Density()
sec_scc.density_charge.append(sec_density)
if self.archive.m_context:
with self.archive.m_context.raw_file(filename, farg) as f:
sec_density.value_hdf5 = to_hdf5(
np.reshape(
np.array(charge_density, np.float64), grid
),
f,
f'{sec_density.m_path()}/value_hdf5',
)
else:
sec_scc.density_charge.append(
Density(
value=np.reshape(
np.array(charge_density, np.float64), grid
)
)
)
sec_density = Density()
sec_density.value_hdf5 = np.reshape(
np.array(charge_density, np.float64), grid
)
sec_scc.density_charge.append(sec_density)
grid = []
n_points = 0
charge_density = []
Expand Down
2 changes: 1 addition & 1 deletion electronicparsers/w2dynamics/metainfo/w2dynamics.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
Section,
SubSection,
JSON,
HDF5Reference,
)
from nomad.datamodel.hdf5 import HDF5Reference
import runschema.run # pylint: disable=unused-import
import runschema.calculation # pylint: disable=unused-import
import runschema.method # pylint: disable=unused-import
Expand Down
7 changes: 2 additions & 5 deletions electronicparsers/w2dynamics/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
x_w2dynamics_config_atoms_parameters,
)
from ..wannier90.parser import WOutParser, HrParser
from nomad.parsing.parser import to_hdf5

# For automatic workflows
from ..utils import get_files, BeyondDFTWorkflowsParser
Expand Down Expand Up @@ -435,7 +434,7 @@ def parse_scc(self):
sec_energy.fermi = np.float64(value) * ureg.eV
elif subkey not in ineq_keys:
value = parameter.get('value')[:]
value = to_hdf5(value, f, f'{key}/{subkey}/value')
value = f'{os.path.basename(self.mainfile)}#/{key}/{subkey}/value'
name = self._re_namesafe.sub('_', subkey)
setattr(sec_scf_iteration, f'x_w2dynamics_{name}', value)
else:
Expand All @@ -451,9 +450,7 @@ def parse_scc(self):
value = value.get('value')
if not isinstance(value, h5py.Dataset):
continue
value = to_hdf5(
value, f, f'{key}/{subkey}/{name}/value'
)
value = f'{os.path.basename(self.mainfile)}#/{key}/{subkey}/{name}/value'
name = self._re_namesafe.sub('_', name)
setattr(sec_ineq, f'x_w2dynamics_{name}', value)

Expand Down
Loading