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

Replace dataclass by abstract class #176

Draft
wants to merge 37 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f5aeeef
Define the generic format in a separate file
jan-janssen Jan 5, 2024
c4f5197
fix bug
jan-janssen Jan 5, 2024
8f84cbe
make_output_dataclass()
jan-janssen Jan 5, 2024
7a5bc1a
black formating
jan-janssen Jan 5, 2024
51462e2
no more dataclass
jan-janssen Jan 5, 2024
a3919d0
Initialize dataclass only shortly before usage
jan-janssen Jan 5, 2024
f2f6edb
Fix LAMMPS bug
jan-janssen Jan 5, 2024
c70d2ed
define function calls directly
jan-janssen Jan 5, 2024
cc938b4
refactor get call
jan-janssen Jan 5, 2024
919e34d
Format black
pyiron-runner Jan 5, 2024
b6296d6
Merge remote-tracking branch 'origin/condense_vol_two' into generic_f…
jan-janssen Jan 5, 2024
d0fefe3
Merge remote-tracking branch 'origin/main' into generic_format
jan-janssen Jan 5, 2024
ffcd881
Replace dataclass by abstract class
jan-janssen Jan 5, 2024
33a183b
fix phonon jobs
jan-janssen Jan 5, 2024
de46f34
fit energy volume curve
jan-janssen Jan 5, 2024
aeae541
more fixes
jan-janssen Jan 5, 2024
6d2e837
return tuple from get_keys()
jan-janssen Jan 5, 2024
1acb557
Format black
pyiron-runner Jan 5, 2024
bbd6e99
fix thermal expasion
jan-janssen Jan 5, 2024
eea1e4c
Merge remote-tracking branch 'origin/abstract_class' into abstract_class
jan-janssen Jan 5, 2024
9cd9cb9
fix coverage
jan-janssen Jan 5, 2024
ab97e6c
fix function list
jan-janssen Jan 5, 2024
ddcf101
be more explicit
jan-janssen Jan 6, 2024
a6b774f
black formatting
jan-janssen Jan 6, 2024
0665c4d
rename output parameter to output_keys
jan-janssen Jan 6, 2024
fc12349
Update output.py
jan-janssen Jan 6, 2024
f100af0
fix test
jan-janssen Jan 6, 2024
cb2c5c6
fix signature test
jan-janssen Jan 6, 2024
c23292a
use type hints in abstract class
jan-janssen Jan 6, 2024
7650963
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 6, 2024
2b2681c
updates
jan-janssen Jan 6, 2024
c183384
introduce output properties and rename output classes
jan-janssen Jan 7, 2024
d390579
Format black
pyiron-runner Jan 7, 2024
d0f55ed
fix test
jan-janssen Jan 7, 2024
803c889
Add Docstrings to output class
jan-janssen Jan 7, 2024
1a733cb
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 8, 2024
195a983
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 8, 2024
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
30 changes: 17 additions & 13 deletions atomistics/calculators/ase.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,43 +25,54 @@
from atomistics.calculators.interface import TaskName


class ASEExecutor(object):
class ASEOutput(OutputStatic, OutputMolecularDynamics):
def __init__(self, ase_structure, ase_calculator):
self.structure = ase_structure
self.structure.calc = ase_calculator

@property
def forces(self):
return self.structure.get_forces()

@property
def energy(self):
return self.structure.get_potential_energy()

@property
def energy_pot(self):
return self.structure.get_potential_energy()

@property
def energy_tot(self):
return (
self.structure.get_potential_energy() + self.structure.get_kinetic_energy()
)

@property
def stress(self):
return self.structure.get_stress(voigt=False)

@property
def pressure(self):
return self.structure.get_stress(voigt=False)

@property
def cell(self):
return self.structure.get_cell()

@property
def positions(self):
return self.structure.get_positions()

@property
def velocities(self):
return self.structure.get_velocities()

@property
def temperature(self):
return self.structure.get_temperature()

@property
def volume(self):
return self.structure.get_volume()

Expand Down Expand Up @@ -107,11 +118,8 @@ def calc_static_with_ase(
ase_calculator,
output_keys=OutputStatic.keys(),
):
return OutputStatic(
**{k: getattr(ASEExecutor, k) for k in OutputStatic.keys()}
).get(
ASEExecutor(ase_structure=structure, ase_calculator=ase_calculator),
*output_keys,
return ASEOutput(ase_structure=structure, ase_calculator=ase_calculator).get_output(
output_keys=output_keys
)


Expand All @@ -120,16 +128,12 @@ def _calc_md_step_with_ase(
):
structure.calc = ase_calculator
MaxwellBoltzmannDistribution(atoms=structure, temperature_K=temperature)
ASEOutputMolecularDynamics = OutputMolecularDynamics(
**{k: getattr(ASEExecutor, k) for k in OutputMolecularDynamics.keys()}
)
cache = {q: [] for q in output_keys}
for i in range(int(run / thermo)):
dyn.run(thermo)
calc_dict = ASEOutputMolecularDynamics.get(
ASEExecutor(ase_structure=structure, ase_calculator=ase_calculator),
*output_keys,
)
calc_dict = ASEOutput(
ase_structure=structure, ase_calculator=ase_calculator
).get_output(output_keys=output_keys)
for k, v in calc_dict.items():
cache[k].append(v)
return {q: np.array(cache[q]) for q in output_keys}
Expand Down
16 changes: 7 additions & 9 deletions atomistics/calculators/lammps/calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from pylammpsmpi import LammpsASELibrary

from atomistics.calculators.interface import get_quantities_from_tasks
from atomistics.calculators.lammps.output import LammpsOutput
from atomistics.calculators.lammps.helpers import (
lammps_calc_md,
lammps_run,
Expand All @@ -28,9 +29,11 @@
LAMMPS_MINIMIZE_VOLUME,
)
from atomistics.calculators.wrapper import as_task_dict_evaluator
from atomistics.shared.thermal_expansion import OutputThermalExpansion
from atomistics.shared.output import OutputStatic, OutputMolecularDynamics

from atomistics.shared.output import (
OutputStatic,
OutputMolecularDynamics,
OutputThermalExpansion,
)

if TYPE_CHECKING:
from ase import Atoms
Expand Down Expand Up @@ -132,12 +135,7 @@ def calc_static_with_lammps(
lmp=lmp,
**kwargs,
)
result_dict = OutputStatic(
forces=LammpsASELibrary.interactive_forces_getter,
energy=LammpsASELibrary.interactive_energy_pot_getter,
stress=LammpsASELibrary.interactive_pressures_getter,
volume=LammpsASELibrary.interactive_volume_getter,
).get(lmp_instance, *output_keys)
result_dict = LammpsOutput(lmp=lmp_instance).get_output(output_keys=output_keys)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict

Expand Down
18 changes: 6 additions & 12 deletions atomistics/calculators/lammps/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
from pylammpsmpi import LammpsASELibrary

from atomistics.calculators.lammps.potential import validate_potential_dataframe
from atomistics.calculators.lammps.output import LammpsOutput
from atomistics.shared.output import (
OutputMolecularDynamics,
OutputThermalExpansion,
)
from atomistics.shared.thermal_expansion import get_thermal_expansion_output
from atomistics.shared.tqdm_iterator import get_tqdm_iterator
from atomistics.shared.output import OutputMolecularDynamics, OutputThermalExpansion


def lammps_run(structure, potential_dataframe, input_template=None, lmp=None, **kwargs):
Expand Down Expand Up @@ -47,17 +51,7 @@ def lammps_calc_md_step(
):
run_str_rendered = Template(run_str).render(run=run)
lmp_instance.interactive_lib_command(run_str_rendered)
return OutputMolecularDynamics(
positions=LammpsASELibrary.interactive_positions_getter,
cell=LammpsASELibrary.interactive_cells_getter,
forces=LammpsASELibrary.interactive_forces_getter,
temperature=LammpsASELibrary.interactive_temperatures_getter,
energy_pot=LammpsASELibrary.interactive_energy_pot_getter,
energy_tot=LammpsASELibrary.interactive_energy_tot_getter,
pressure=LammpsASELibrary.interactive_pressures_getter,
velocities=LammpsASELibrary.interactive_velocities_getter,
volume=LammpsASELibrary.interactive_volume_getter,
).get(lmp_instance, *output_keys)
return LammpsOutput(lmp=lmp_instance).get_output(output_keys=output_keys)


def lammps_calc_md(
Expand Down
50 changes: 50 additions & 0 deletions atomistics/calculators/lammps/output.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from atomistics.shared.output import OutputMolecularDynamics, OutputStatic


class LammpsOutput(OutputMolecularDynamics, OutputStatic):
def __init__(self, lmp):
self._lmp = lmp

@property
def forces(self):
return self._lmp.interactive_forces_getter()

@property
def energy(self):
return self._lmp.interactive_energy_pot_getter()

@property
def stress(self):
return self._lmp.interactive_pressures_getter()

@property
def volume(self):
return self._lmp.interactive_volume_getter()

@property
def positions(self):
return self._lmp.interactive_positions_getter()

@property
def cell(self):
return self._lmp.interactive_cells_getter()

@property
def temperature(self):
return self._lmp.interactive_temperatures_getter()

@property
def energy_pot(self):
return self._lmp.interactive_energy_pot_getter()

@property
def energy_tot(self):
return self._lmp.interactive_energy_tot_getter()

@property
def pressure(self):
return self._lmp.interactive_pressures_getter()

@property
def velocities(self):
return self._lmp.interactive_velocities_getter()
10 changes: 6 additions & 4 deletions atomistics/calculators/qe.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,23 @@
from atomistics.calculators.wrapper import as_task_dict_evaluator


class QEStaticParser(object):
class QEOutputStatic(OutputStatic):
def __init__(self, filename):
self.parser = io.read_pw_scf(filename=filename, use_alat=True)

@property
def forces(self):
return self.parser.forces

@property
def energy(self):
return self.parser.etot

@property
def stress(self):
return self.parser.stress

@property
def volume(self):
return self.parser.volume

Expand Down Expand Up @@ -207,9 +211,7 @@ def calc_static_with_qe(
call_qe_via_ase_command(
calculation_name=calculation_name, working_directory=working_directory
)
return OutputStatic(
**{k: getattr(QEStaticParser, k) for k in OutputStatic.keys()}
).get(QEStaticParser(filename=output_file_name), *output_keys)
return QEOutputStatic(filename=output_file_name).get_output(output_keys=output_keys)


@as_task_dict_evaluator
Expand Down
Loading
Loading