Skip to content

Commit

Permalink
Allow UPF pseudos input. (#195)
Browse files Browse the repository at this point in the history
- Add `aiida-pseudo` and `upf-to-json` dependencies.
- Update pre-commit settings.
  • Loading branch information
yakutovicha authored Aug 29, 2023
1 parent 4258780 commit 0cb32cd
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 10 deletions.
6 changes: 3 additions & 3 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# rather than using the flake8 default of 79:
max-line-length = 88
extend-ignore =
E501 # Line length handled by black.
W503 # Line break before binary operator, preferred formatting for black.
E203 # Whitespace before ':', preferred formatting for black.
E501
W503
E203
exclude =
docs/source/conf.py
12 changes: 6 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
rev: v4.4.0
hooks:

- id: check-json
Expand All @@ -16,32 +16,32 @@ repos:
exclude: *exclude_pre_commit_hooks

- repo: https://github.com/psf/black
rev: 22.3.0
rev: 23.7.0
hooks:
- id: black
language_version: python3 # Should be a command that runs python3.6+
exclude: aiida_cp2k/workchains/base.py

- repo: https://github.com/PyCQA/flake8
rev: 4.0.1
rev: 6.1.0
hooks:
- id: flake8
args: [--count, --show-source, --statistics]

- repo: https://github.com/pycqa/isort
rev: 5.10.1
rev: 5.12.0
hooks:
- id: isort
args: [--profile, black, --filter-files]

- repo: https://github.com/asottile/pyupgrade
rev: v2.32.1
rev: v3.10.1
hooks:
- id: pyupgrade
args: [--py37-plus]

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.961
rev: v1.5.1
hooks:
- id: mypy
additional_dependencies:
Expand Down
17 changes: 17 additions & 0 deletions aiida_cp2k/calculations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
###############################################################################
"""AiiDA-CP2K input plugin."""

import json
from operator import add

from aiida.common import CalcInfo, CodeInfo, InputValidationError
from aiida.engine import CalcJob
from aiida.orm import Dict, RemoteData, SinglefileData
from aiida.plugins import DataFactory
from upf_to_json import upf_to_json

from ..utils import Cp2kInput
from ..utils.datatype_helpers import (
Expand All @@ -26,6 +28,7 @@
BandsData = DataFactory("array.bands") # pylint: disable=invalid-name
StructureData = DataFactory("structure") # pylint: disable=invalid-name
KpointsData = DataFactory("array.kpoints") # pylint: disable=invalid-name
UpfData = DataFactory("pseudo.upf") # pylint: disable=invalid-name


class Cp2kCalculation(CalcJob):
Expand Down Expand Up @@ -105,6 +108,14 @@ def define(cls, spec):
),
)

spec.input_namespace(
"pseudos_upf",
valid_type=UpfData,
dynamic=True,
required=True,
help="A mapping of `UpfData` nodes onto the kind name to which they should apply.",
)

# Specify default parser.
spec.input(
"metadata.options.parser_name",
Expand Down Expand Up @@ -262,6 +273,12 @@ def prepare_for_submission(self, folder):
)
write_pseudos(inp, self.inputs.pseudos, folder)

if "pseudos_upf" in self.inputs:
for atom_kind, pseudo in self.inputs.pseudos_upf.items():
pseudo_dict = upf_to_json(pseudo.get_content(), atom_kind)
with folder.open(atom_kind + ".json", "w") as fobj:
fobj.write(json.dumps(pseudo_dict, indent=2))

# Kpoints.
if "kpoints" in self.inputs:
try:
Expand Down
4 changes: 3 additions & 1 deletion examples/gaussian_datatypes/gdt_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ def load_data(prefix="MY-"):
p.element: p
for p in Pseudo.from_cp2k(fhandle_pseudo, duplicate_handling="error")
}
except UniquenessError: # if the user already ran the script, fetch the data from the db instead
except (
UniquenessError
): # if the user already ran the script, fetch the data from the db instead
bsets = {
"H": BasisSet.get("H", f"{prefix}AUTO-DZVP-MOLOPT-GTH"),
"O": BasisSet.get("O", f"{prefix}AUTO-DZVP-MOLOPT-SR-GTH"),
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ dependencies = [
"ase",
"ruamel.yaml>=0.16.5",
"cp2k-output-tools",
"aiida-pseudo~=0.6",
"upf-to-json>=0.9",
]

[[project.authors]]
Expand Down

0 comments on commit 0cb32cd

Please sign in to comment.