mirror of https://github.com/phonopy/phono3py.git
Adjustment to let both CUI and phno3py.load work nicely
This commit is contained in:
parent
7f44ce3594
commit
072e195940
|
@ -2241,7 +2241,7 @@ class Phono3py:
|
|||
)
|
||||
|
||||
def save(
|
||||
self, filename: str = "phono3py_params.yaml", settings: Optional[dict] = None
|
||||
self, filename: str = "phono3py_params.yaml", settings: dict | None = None
|
||||
):
|
||||
"""Save parameters in Phono3py instants into file.
|
||||
|
||||
|
@ -2268,7 +2268,7 @@ class Phono3py:
|
|||
|
||||
def develop_mlp(
|
||||
self,
|
||||
params: Optional[Union[PypolymlpParams, dict, str]] = None,
|
||||
params: PypolymlpParams | dict | str | None = None,
|
||||
test_size: float = 0.1,
|
||||
):
|
||||
"""Develop machine learning potential.
|
||||
|
|
|
@ -38,7 +38,6 @@ from __future__ import annotations
|
|||
import os
|
||||
import pathlib
|
||||
from collections.abc import Sequence
|
||||
from typing import Optional, Union
|
||||
|
||||
import numpy as np
|
||||
import phonopy.cui.load_helper as load_helper
|
||||
|
@ -65,34 +64,34 @@ from phono3py.phonon3.fc3 import show_drift_fc3
|
|||
|
||||
|
||||
def load(
|
||||
phono3py_yaml: Optional[
|
||||
Union[str, bytes, os.PathLike]
|
||||
] = None, # phono3py.yaml-like must be the first argument.
|
||||
supercell_matrix: Optional[Union[Sequence, np.ndarray]] = None,
|
||||
primitive_matrix: Optional[Union[Sequence, np.ndarray]] = None,
|
||||
phonon_supercell_matrix: Optional[Union[Sequence, np.ndarray]] = None,
|
||||
phono3py_yaml: str
|
||||
| os.PathLike
|
||||
| None = None, # phono3py.yaml-like must be the first argument.
|
||||
supercell_matrix: Sequence | NDArray | None = None,
|
||||
primitive_matrix: Sequence | NDArray | None = None,
|
||||
phonon_supercell_matrix: Sequence | NDArray | None = None,
|
||||
is_nac: bool = True,
|
||||
calculator: Optional[str] = None,
|
||||
unitcell: Optional[PhonopyAtoms] = None,
|
||||
supercell: Optional[PhonopyAtoms] = None,
|
||||
nac_params: Optional[dict] = None,
|
||||
unitcell_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
supercell_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
born_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
forces_fc3_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
forces_fc2_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
fc3_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
fc2_filename: Optional[Union[str, bytes, os.PathLike]] = None,
|
||||
fc_calculator: Optional[str] = None,
|
||||
fc_calculator_options: Optional[str] = None,
|
||||
factor: Optional[float] = None,
|
||||
calculator: str | None = None,
|
||||
unitcell: PhonopyAtoms | None = None,
|
||||
supercell: PhonopyAtoms | None = None,
|
||||
nac_params: dict | None = None,
|
||||
unitcell_filename: str | os.PathLike | None = None,
|
||||
supercell_filename: str | os.PathLike | None = None,
|
||||
born_filename: str | os.PathLike | None = None,
|
||||
forces_fc3_filename: str | os.PathLike | None = None,
|
||||
forces_fc2_filename: str | os.PathLike | None = None,
|
||||
fc3_filename: str | os.PathLike | None = None,
|
||||
fc2_filename: str | os.PathLike | None = None,
|
||||
fc_calculator: str | None = None,
|
||||
fc_calculator_options: str | None = None,
|
||||
factor: float | None = None,
|
||||
produce_fc: bool = True,
|
||||
is_symmetry: bool = True,
|
||||
symmetrize_fc: bool = True,
|
||||
is_mesh_symmetry: bool = True,
|
||||
is_compact_fc: bool = False,
|
||||
use_pypolymlp: bool = False,
|
||||
mlp_params: Optional[dict] = None,
|
||||
mlp_params: dict | None = None,
|
||||
use_grg: bool = False,
|
||||
make_r0_average: bool = True,
|
||||
symprec: float = 1e-5,
|
||||
|
@ -347,15 +346,24 @@ def load(
|
|||
load_fc2_and_fc3(
|
||||
ph3py, fc3_filename=fc3_filename, fc2_filename=fc2_filename, log_level=log_level
|
||||
)
|
||||
load_dataset_and_phonon_dataset(
|
||||
|
||||
ph3py.dataset = select_and_load_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc3_filename=forces_fc3_filename,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml,
|
||||
calculator=_calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
|
||||
ph3py.phonon_dataset = select_and_load_phonon_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
calculator=_calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
|
||||
if use_pypolymlp and ph3py.fc3 is None and forces_in_dataset(ph3py.dataset):
|
||||
ph3py.mlp_dataset = ph3py.dataset
|
||||
ph3py.dataset = None
|
||||
|
@ -401,46 +409,6 @@ def load_fc2_and_fc3(
|
|||
_load_fc2(ph3py, fc2_filename=fc2_filename, log_level=log_level)
|
||||
|
||||
|
||||
def load_dataset_and_phonon_dataset(
|
||||
ph3py: Phono3py,
|
||||
ph3py_yaml: Phono3pyYaml | None = None,
|
||||
forces_fc3_filename: str | os.PathLike | Sequence | None = None,
|
||||
forces_fc2_filename: str | os.PathLike | Sequence | None = None,
|
||||
phono3py_yaml_filename: str | os.PathLike | None = None,
|
||||
cutoff_pair_distance: float | None = None,
|
||||
calculator: str | None = None,
|
||||
log_level: int = 0,
|
||||
):
|
||||
"""Set displacements, forces, and create force constants."""
|
||||
if (
|
||||
ph3py.fc3 is None
|
||||
and ph3py.fc2 is None
|
||||
and ph3py.phonon_supercell_matrix is None
|
||||
):
|
||||
dataset = _select_and_load_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc3_filename=forces_fc3_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
cutoff_pair_distance=cutoff_pair_distance,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if dataset is not None:
|
||||
ph3py.dataset = dataset
|
||||
|
||||
if ph3py.fc2 is None:
|
||||
phonon_dataset = _select_and_load_phonon_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if phonon_dataset is not None:
|
||||
ph3py.phonon_dataset = phonon_dataset
|
||||
|
||||
|
||||
def compute_force_constants_from_datasets(
|
||||
ph3py: Phono3py,
|
||||
fc_calculator: str | None = None,
|
||||
|
@ -525,7 +493,7 @@ def _load_fc3(
|
|||
print(f'fc3 was read from "{_fc3_filename}".')
|
||||
|
||||
|
||||
def _select_and_load_dataset(
|
||||
def select_and_load_dataset(
|
||||
ph3py: Phono3py,
|
||||
ph3py_yaml: Phono3pyYaml | None = None,
|
||||
forces_fc3_filename: str | os.PathLike | Sequence | None = None,
|
||||
|
@ -534,6 +502,7 @@ def _select_and_load_dataset(
|
|||
calculator: str | None = None,
|
||||
log_level: int = 0,
|
||||
) -> dict | None:
|
||||
"""Select and load dataset for fc3."""
|
||||
# displacements and forces are in phono3py-yaml-like file
|
||||
if (
|
||||
ph3py_yaml is not None
|
||||
|
@ -601,19 +570,18 @@ def _load_fc2(
|
|||
ph3py.fc2 = fc2
|
||||
|
||||
|
||||
def _select_and_load_phonon_dataset(
|
||||
def select_and_load_phonon_dataset(
|
||||
ph3py: Phono3py,
|
||||
ph3py_yaml: Optional[Phono3pyYaml] = None,
|
||||
forces_fc2_filename: Optional[Union[os.PathLike, Sequence]] = None,
|
||||
calculator: Optional[str] = None,
|
||||
ph3py_yaml: Phono3pyYaml | None = None,
|
||||
forces_fc2_filename: str | os.PathLike | Sequence | None = None,
|
||||
calculator: str | None = None,
|
||||
log_level: int = 0,
|
||||
) -> Optional[dict]:
|
||||
phonon_dataset = None
|
||||
if (
|
||||
ph3py_yaml is not None
|
||||
and ph3py_yaml.phonon_dataset is not None
|
||||
and forces_in_dataset(ph3py_yaml.phonon_dataset)
|
||||
):
|
||||
) -> dict | None:
|
||||
"""Select and load phonon dataset for fc2."""
|
||||
if ph3py.phonon_supercell_matrix is None:
|
||||
return None
|
||||
|
||||
if ph3py_yaml is not None and forces_in_dataset(ph3py_yaml.phonon_dataset):
|
||||
phonon_dataset = _get_dataset_for_fc2(
|
||||
ph3py,
|
||||
ph3py_yaml,
|
||||
|
@ -622,9 +590,9 @@ def _select_and_load_phonon_dataset(
|
|||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif (
|
||||
forces_fc2_filename is not None or pathlib.Path("FORCES_FC2").exists()
|
||||
) and ph3py.phonon_supercell_matrix is not None:
|
||||
return phonon_dataset
|
||||
|
||||
if forces_fc2_filename is not None or pathlib.Path("FORCES_FC2").exists():
|
||||
if forces_fc2_filename is None:
|
||||
force_filename = "FORCES_FC2"
|
||||
else:
|
||||
|
@ -637,7 +605,9 @@ def _select_and_load_phonon_dataset(
|
|||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif ph3py_yaml is not None and ph3py_yaml.phonon_dataset is not None:
|
||||
return phonon_dataset
|
||||
|
||||
if ph3py_yaml is not None:
|
||||
# not forces_in_dataset(ph3py_yaml.dataset)
|
||||
# but want to read displacement dataset.
|
||||
phonon_dataset = _get_dataset_for_fc2(
|
||||
|
@ -648,8 +618,9 @@ def _select_and_load_phonon_dataset(
|
|||
calculator,
|
||||
log_level,
|
||||
)
|
||||
return phonon_dataset
|
||||
|
||||
return phonon_dataset
|
||||
return None
|
||||
|
||||
|
||||
def _get_dataset_for_fc3(
|
||||
|
@ -676,7 +647,7 @@ def _get_dataset_for_fc3(
|
|||
|
||||
def _get_dataset_for_fc2(
|
||||
ph3py: Phono3py,
|
||||
ph3py_yaml: Optional[Phono3pyYaml],
|
||||
ph3py_yaml: Phono3pyYaml | None,
|
||||
force_filename,
|
||||
fc_type,
|
||||
calculator,
|
||||
|
|
|
@ -42,6 +42,7 @@ import os
|
|||
import pathlib
|
||||
import sys
|
||||
import warnings
|
||||
from collections.abc import Sequence
|
||||
from typing import Optional, cast
|
||||
|
||||
import numpy as np
|
||||
|
@ -82,8 +83,9 @@ from phono3py.cui.create_supercells import (
|
|||
)
|
||||
from phono3py.cui.load import (
|
||||
compute_force_constants_from_datasets,
|
||||
load_dataset_and_phonon_dataset,
|
||||
load_fc2_and_fc3,
|
||||
select_and_load_dataset,
|
||||
select_and_load_phonon_dataset,
|
||||
)
|
||||
from phono3py.cui.phono3py_argparse import get_parser
|
||||
from phono3py.cui.settings import Phono3pyConfParser, Phono3pySettings
|
||||
|
@ -946,6 +948,44 @@ def _init_phph_interaction(
|
|||
sys.exit(1)
|
||||
|
||||
|
||||
def _load_dataset_and_phonon_dataset(
|
||||
ph3py: Phono3py,
|
||||
ph3py_yaml: Phono3pyYaml | None = None,
|
||||
forces_fc3_filename: str | os.PathLike | Sequence | None = None,
|
||||
forces_fc2_filename: str | os.PathLike | Sequence | None = None,
|
||||
phono3py_yaml_filename: str | os.PathLike | None = None,
|
||||
cutoff_pair_distance: float | None = None,
|
||||
calculator: str | None = None,
|
||||
log_level: int = 0,
|
||||
):
|
||||
"""Set displacements, forces, and create force constants."""
|
||||
if ph3py.fc3 is None or (
|
||||
ph3py.fc2 is None and ph3py.phonon_supercell_matrix is None
|
||||
):
|
||||
dataset = select_and_load_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc3_filename=forces_fc3_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
cutoff_pair_distance=cutoff_pair_distance,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if dataset is not None:
|
||||
ph3py.dataset = dataset
|
||||
|
||||
if ph3py.fc2 is None and ph3py.phonon_supercell_matrix is not None:
|
||||
phonon_dataset = select_and_load_phonon_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if phonon_dataset is not None:
|
||||
ph3py.phonon_dataset = phonon_dataset
|
||||
|
||||
|
||||
def main(**argparse_control):
|
||||
"""Phono3py main part of command line interface."""
|
||||
# import warnings
|
||||
|
@ -1192,7 +1232,7 @@ def main(**argparse_control):
|
|||
############
|
||||
# Datasets #
|
||||
############
|
||||
load_dataset_and_phonon_dataset(
|
||||
_load_dataset_and_phonon_dataset(
|
||||
ph3py,
|
||||
ph3py_yaml=cast(Phono3pyYaml, cell_info.phonopy_yaml),
|
||||
phono3py_yaml_filename=unitcell_filename,
|
||||
|
|
|
@ -298,7 +298,7 @@ class Phono3pyYamlDumper(PhonopyYamlDumperBase):
|
|||
"dielectric_constant": True,
|
||||
}
|
||||
|
||||
def __init__(self, data: Phono3pyYamlData, dumper_settings=None):
|
||||
def __init__(self, data: Phono3pyYamlData, dumper_settings: dict | None = None):
|
||||
"""Init method."""
|
||||
self._data = data
|
||||
self._init_dumper_settings(dumper_settings)
|
||||
|
@ -405,7 +405,11 @@ class Phono3pyYaml(PhonopyYaml):
|
|||
command_name = "phono3py"
|
||||
|
||||
def __init__(
|
||||
self, configuration=None, calculator=None, physical_units=None, settings=None
|
||||
self,
|
||||
configuration: dict | None = None,
|
||||
calculator: str | None = None,
|
||||
physical_units: dict | None = None,
|
||||
settings: dict | None = None,
|
||||
):
|
||||
"""Init method."""
|
||||
self._data = Phono3pyYamlData(
|
||||
|
|
Loading…
Reference in New Issue