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

Joerg's lammps nodes #33

Closed
wants to merge 114 commits into from
Closed
Changes from 39 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
38ce4b9
Add files via upload
JNmpi Sep 19, 2023
4f06e58
Merge branch 'branch-source' into JNmpi_lammps_nodes
liamhuber Oct 16, 2023
74487d9
Move file into the workflow module and update workflow import paths
liamhuber Oct 16, 2023
8f2347e
Modified/corrected to address code warnings (PEP8 etc.)
JNmpi Oct 21, 2023
79add2a
formatted Black
JNmpi Oct 21, 2023
9f77a1f
Merge remote-tracking branch 'origin/refactor_run_cycle' into JNmpi_l…
JNmpi Oct 22, 2023
48a0376
merged with refactor_run_cycle
JNmpi Oct 22, 2023
187be01
[dependabot skip] Update env file
pyiron-runner Oct 22, 2023
1710b04
Merge branch 'main' into 0.0.2_hotfix
liamhuber Oct 23, 2023
aa59cd3
Give atomistic_codes and lammps node packages direct access
liamhuber Oct 23, 2023
2e93143
Don't register node packages in notebook
liamhuber Oct 23, 2023
b3fd13a
Exploit single point of import
liamhuber Oct 23, 2023
e31a4b4
Exploit node working_directory code instead of hard-coding path
liamhuber Oct 23, 2023
eb9e4f2
Re-execute demo notebook
liamhuber Oct 23, 2023
b4ebb1b
Comment out draw calls and re-execute
liamhuber Oct 23, 2023
b20f0dc
Add contrib to the notebook envs
liamhuber Oct 23, 2023
21263eb
[dependabot skip] Update env file
pyiron-runner Oct 23, 2023
b0ca617
Merge branch 'main' into merge_0.0.3
liamhuber Oct 24, 2023
a9ea55b
Use new method name
liamhuber Oct 24, 2023
3e6e331
Hint optional kwargs as Optional
liamhuber Oct 24, 2023
c8b942b
Pass a string to the string-hinted channel
liamhuber Oct 24, 2023
bd43dcd
Remove string casting
liamhuber Oct 24, 2023
afd0718
Re-execute notebook
liamhuber Oct 24, 2023
c8b2741
Merge pull request #49 from pyiron/merge_0.0.3
liamhuber Oct 24, 2023
b2004e2
Merge pull request #43 from pyiron/0.0.2_hotfix
liamhuber Oct 25, 2023
25dc174
adapted to latest main version
JNmpi Nov 4, 2023
3c11a45
[dependabot skip] Update env file
pyiron-runner Nov 4, 2023
58801d6
adapted to latest main version
JNmpi Nov 5, 2023
04c24ba
Merge remote-tracking branch 'origin/JNmpi_lammps_nodes' into JNmpi_l…
JNmpi Nov 5, 2023
ab3b09a
Merge remote-tracking branch 'origin/main' into JNmpi_lammps_nodes
JNmpi Nov 17, 2023
cb230e5
Merge branch 'main' into JNmpi_lammps_nodes_patch_0.1.0
liamhuber Nov 27, 2023
f2e15ac
Re-order notebooks env
liamhuber Nov 27, 2023
65f9f06
Remove binder maggma pin
liamhuber Nov 27, 2023
4d7ec2b
Conform to type hints
liamhuber Nov 27, 2023
4a29d7c
[dependabot skip] Update env file
pyiron-runner Nov 27, 2023
6c586fa
Add contrib to notebook deps
liamhuber Nov 27, 2023
361726f
[dependabot skip] Update env file
pyiron-runner Nov 27, 2023
9ff5e5c
Merge pull request #91 from pyiron/JNmpi_lammps_nodes_patch_0.1.0
liamhuber Nov 28, 2023
21587b7
prototype example of storing node input and output data in a DataStor…
JNmpi Dec 3, 2023
ce5c7de
Merge remote-tracking branch 'origin/JNmpi_lammps_nodes' into JNmpi_l…
JNmpi Dec 3, 2023
23cef90
Merge branch 'macro_interface' into merge_JNmpi_lammps_nodes
liamhuber Dec 13, 2023
9d5d94b
Conform to node decorator signature
liamhuber Dec 13, 2023
0a4dfe5
Rename package nodes in a ClassLike way
liamhuber Dec 13, 2023
01a7783
Make sure nodes belong to their macro parent
liamhuber Dec 13, 2023
e6c918d
Modernize macro syntax
liamhuber Dec 13, 2023
92b9fa6
Merge branch 'macro_interface' into merge_JNmpi_lammps_nodes
liamhuber Dec 13, 2023
39cdce7
Add default to macro
liamhuber Dec 13, 2023
7d995f4
Remove incorrect type hint
liamhuber Dec 13, 2023
0c8e33e
Update method name
liamhuber Dec 13, 2023
a0d0866
Make sure DataStore always has a directory to work with
liamhuber Dec 13, 2023
5609402
In media res notebook updates
liamhuber Dec 13, 2023
62869b5
Merge branch 'macro_interface' into merge_JNmpi_lammps_nodes
liamhuber Dec 14, 2023
1989e1c
Look for value before _convert_to_dict
liamhuber Dec 14, 2023
7f0aa69
Update the example notebook
liamhuber Dec 14, 2023
41aac40
Remove unused nodes
liamhuber Dec 14, 2023
6ece816
Update and extend type hints
liamhuber Dec 14, 2023
0994caf
Remove unused stuff
liamhuber Dec 14, 2023
fef104a
Reexecute notebook
liamhuber Dec 14, 2023
8d63194
[dependabot skip] Update env file
pyiron-runner Dec 14, 2023
015d8c0
Format black
pyiron-runner Dec 14, 2023
10c820d
Merge remote-tracking branch 'origin/main' into JNmpi_lammps_nodes
JNmpi Dec 23, 2023
3ab6e84
Merge branch 'main' into JNmpi_lammps_nodes_patch_0p2p0
liamhuber Jan 2, 2024
795fede
Merge pull request #139 from pyiron/JNmpi_lammps_nodes_patch_0p2p0
liamhuber Jan 2, 2024
042efaf
Merge remote-tracking branch 'origin/JNmpi_lammps_nodes' into JNmpi_l…
JNmpi Jan 4, 2024
d5eb20c
Further modularization of the atomistics class for the example of pho…
JNmpi Jan 4, 2024
c401b8b
Restructering/modularizyation of the node library
JNmpi Jan 7, 2024
4472a4f
Development and implementation of a wf_data_class that extends the fu…
JNmpi Jan 11, 2024
d6c57a9
- Restructered node library with several new nodes
JNmpi Feb 6, 2024
b62874a
Remove run prior to wf definition
liamhuber Feb 13, 2024
a956958
PEP8 kwarg assignment
liamhuber Feb 13, 2024
f1aaa0a
Re-introduce the calc_mode input variable to Collect
liamhuber Feb 13, 2024
2cb075b
Update my lammps script and re-execute the notebook
liamhuber Feb 13, 2024
153f6c8
Don't use `**kwargs` as input
liamhuber Feb 13, 2024
33a3ab7
:bug: calculate kinetic energy
liamhuber Feb 13, 2024
14e81b2
Comment out the DataStore stuff
liamhuber Feb 13, 2024
e9b0990
Register Jan's package and rerun notebook
liamhuber Feb 13, 2024
9ea245c
Be more flexible when parsing input
liamhuber Feb 13, 2024
4984094
Refactor: rename
liamhuber Feb 13, 2024
2847981
Refactor: move function
liamhuber Feb 13, 2024
9420833
Refactor: rename signature variable
liamhuber Feb 13, 2024
fd461b3
Update docstring
liamhuber Feb 13, 2024
c1180bf
Provide explicit channels for each piece of input
liamhuber Feb 13, 2024
5f4f25b
Rerun notebook
liamhuber Feb 13, 2024
a0f3846
Add matgl dependency for notebooks
liamhuber Feb 13, 2024
80b27a6
Make the elasticity database file a variable
liamhuber Feb 13, 2024
7ff39c0
Add pandas dep
liamhuber Feb 13, 2024
a1f2206
Rerun notebook and remove breaklines
liamhuber Feb 13, 2024
64de8de
[dependabot skip] Update env file
pyiron-runner Feb 13, 2024
fcc81ea
Merge branch 'main' into JNmpi_notebook_patch
liamhuber Feb 14, 2024
e578f1a
Use new registration syntax
liamhuber Feb 14, 2024
fa8d8cd
Merge branch 'main' into JNmpi_notebook_patch
liamhuber Feb 15, 2024
4a52aa3
Update notebooks
liamhuber Feb 15, 2024
254e5a4
Don't print what's not there
liamhuber Feb 15, 2024
545dd73
Update workflow notebook
liamhuber Feb 15, 2024
dcc1b92
Format black
pyiron-runner Feb 16, 2024
8659ee2
Bump atomistics and contrib
liamhuber Feb 16, 2024
e142c2a
[dependabot skip] Update env file
pyiron-runner Feb 16, 2024
b5999d8
Reformat cell
liamhuber Feb 16, 2024
52bb470
Add a flag for matgl-requiring cells
liamhuber Feb 16, 2024
9ffec99
Match signature of called object
liamhuber Feb 16, 2024
9b72361
:bug: test against the right instance
liamhuber Feb 16, 2024
b1cf8ab
Raise an error if you'd bypass the type checks
liamhuber Feb 16, 2024
e876ea4
Give the collect node a lot of freedom on its mode input
liamhuber Feb 16, 2024
86e733c
Pass around the single value calc throughout the macro
liamhuber Feb 16, 2024
f6f4cd4
Adjust and rerun phonopy notebook
liamhuber Feb 16, 2024
fce8831
Format black
pyiron-runner Feb 16, 2024
d50d3ad
Merge pull request #203 from pyiron/JNmpi_notebook_patch
liamhuber Feb 16, 2024
81ede52
Merge branch 'main' into JNmpi_lammps_nodes
JNmpi Feb 18, 2024
9d33815
- save latest jupyter notebooks
JNmpi Mar 25, 2024
4b3874f
Merge branch 'main' into JNmpi_lammps_nodes
JNmpi Mar 29, 2024
b69ca0b
- save latest jupyter notebooks and function_nodes
JNmpi May 1, 2024
0426c4c
JNmpi lammps nodes patch version ~0.7.0~ 0.7.1 (#315)
liamhuber May 9, 2024
4ab3bc1
Merge branch 'main' into JNmpi_lammps_nodes
liamhuber May 9, 2024
044598e
Merge branch 'main' into JNmpi_lammps_nodes
liamhuber May 9, 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
5 changes: 4 additions & 1 deletion .binder/environment.yml
Original file line number Diff line number Diff line change
@@ -14,7 +14,10 @@ dependencies:
- ase =3.22.1
- atomistics =0.1.23
- lammps
- matgl =0.9.2
- pandas =2.2.0
- phonopy =2.21.0
- pyiron_atomistics =0.4.14
- pyiron_atomistics =0.4.15
- pyiron_contrib =0.1.15
- pyiron-data =0.0.27
- numpy =1.26.4
10 changes: 6 additions & 4 deletions .ci_support/environment-notebooks.yml
Original file line number Diff line number Diff line change
@@ -4,8 +4,10 @@ dependencies:
- ase =3.22.1
- atomistics =0.1.23
- lammps
- matgl =0.9.2
- pandas =2.2.0
- phonopy =2.21.0
- pyiron_atomistics =0.3.5
- pyiron_contrib =0.1.13
- pyiron-data =0.0.24
- numpy =1.26.0
- pyiron_atomistics =0.4.15
- pyiron_contrib =0.1.15
- pyiron-data =0.0.27
- numpy =1.26.4
5,834 changes: 3,950 additions & 1,884 deletions notebooks/phonopy_wf.ipynb

Large diffs are not rendered by default.

3,661 changes: 2,745 additions & 916 deletions notebooks/pyiron_like_workflows.ipynb

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion pyiron_workflow/node_library/atomistic/calculator/data.py
Original file line number Diff line number Diff line change
@@ -136,7 +136,9 @@ class InputCalcMinimize:

@wf_data_class()
class InputCalcStatic:
keys_to_store: Optional[list] = field(default_factory=list)
# keys_to_store: Optional[list] = field(default_factory=list)
pass # LammpsControl.calc_static takes exactly zero arguments, and currently we
# have the input objects matching their respective LammpsControl counterparts


nodes = []
5 changes: 3 additions & 2 deletions pyiron_workflow/node_library/atomistic/calculator/generic.py
Original file line number Diff line number Diff line change
@@ -8,9 +8,10 @@


@single_value_node("generic")
def static(structure=None, engine=None, keys_to_store=None):
def static(structure=None, engine=None): # , keys_to_store=None):
output = engine(
structure=structure, calculator=InputCalcStatic(keys_to_store=keys_to_store)
structure=structure,
calculator=InputCalcStatic(), # keys_to_store=keys_to_store)
)
return output.generic

40 changes: 27 additions & 13 deletions pyiron_workflow/node_library/atomistic/engine/lammps.py
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@
InputCalcStatic,
)

from pyiron_workflow.node_library.dev_tools import VarType, FileObject
from pyiron_workflow.node_library.dev_tools import FileObject, parse_input_kwargs
from pyiron_workflow.node_library.dev_tools import wf_data_class

from pyiron_atomistics.lammps.control import LammpsControl
@@ -32,35 +32,40 @@ def Calc(parameters):
elif isinstance(parameters, InputCalcMinimize):
calculator.calc_minimize(**parameters)
calculator._mode = "minimize"
elif isinstance(parameters, InputCalcMinimize):
elif isinstance(parameters, InputCalcStatic):
calculator.calc_static(**parameters)
calculator._mode = "static"
else:
raise TypeError(f"Unexpected parameters type {parameters}")

return calculator


@single_value_node("calculator")
def CalcStatic():
def CalcStatic(calculator_input: Optional[InputCalcStatic | dict] = None):
calculator_kwargs = parse_input_kwargs(calculator_input, InputCalcStatic)
calculator = LammpsControl()
calculator.calc_static()
calculator.calc_static(**calculator_kwargs)
calculator._mode = "static"

return calculator


@single_value_node("calculator")
def CalcMinimize(**kwargs):
def CalcMinimize(calculator_input: Optional[InputCalcMinimize | dict] = None):
calculator_kwargs = parse_input_kwargs(calculator_input, InputCalcMinimize)
calculator = LammpsControl()
calculator.calc_minimize(InputCalcMinimize(**kwargs))
calculator.calc_minimize(**calculator_kwargs)
calculator._mode = "static"

return calculator


@single_value_node("calculator")
def CalcMD(**kwargs):
def CalcMD(calculator_input: Optional[InputCalcMD | dict] = None):
calculator_kwargs = parse_input_kwargs(calculator_input, InputCalcMD)
calculator = LammpsControl()
calculator.calc_md(InputCalcMD(**kwargs))
calculator.calc_md(**calculator_kwargs)
calculator._mode = "md"

return calculator
@@ -84,7 +89,7 @@ def InitLammps(structure=None, potential=None, calculator=None, working_director

calculator.write_file(file_name="control.inp", cwd=working_directory)
bla = "bla"
print("Lammps_init: ", calculator._mode, bla)
# print("Lammps_init: ", calculator._mode, bla)

# return os.path.abspath(working_directory), calculator._mode, bla
return os.path.abspath(working_directory), bla
@@ -170,7 +175,7 @@ class GenericOutput:
def Collect(
out_dump,
out_log,
# calc_mode: str = "stat",
calc_mode: str | LammpsControl | InputCalcMinimize | InputCalcMD | InputCalcStatic,
bla="",
):
import numpy as np
@@ -184,6 +189,15 @@ def Collect(
print("Collect: ", calc_mode, bla)
log = out_log[0]

if isinstance(calc_mode, str) and calc_mode in ["static", "minimize", "md"]:
pass
elif isinstance(calc_mode, (InputCalcMinimize, InputCalcMD, InputCalcStatic)):
calc_mode = calc_mode.__class__.__name__.replace("InputCalc", "").lower()
elif isinstance(calc_mode, LammpsControl):
calc_mode = calc_mode._mode
else:
raise ValueError(f"Unexpected calc_mode {calc_mode}")

if calc_mode == "static":
generic = OutputCalcStatic()
# print("output Collect: ", generic, isinstance(generic, OutputCalcStatic))
@@ -197,7 +211,7 @@ def Collect(
elif calc_mode == "md":
generic = OutputCalcMD()
generic.energies_pot = log["PotEng"].values
generic.energies_kin = log["KinEng"].values
generic.energies_kin = log["TotEng"].values - generic.energies_pot
generic.forces = np.array([o.data[["fx", "fy", "fz"]] for o in out_dump])

return generic
@@ -266,7 +280,7 @@ def Code(
wf.InitLammps = wf.create.atomistic.engine.lammps.InitLammps(
structure=structure,
potential=wf.Potential,
calculator=wf.calc.outputs.calculator,
calculator=wf.calc,
# working_directory="test2",
)
wf.InitLammps.inputs.working_directory = (
@@ -287,7 +301,7 @@ def Code(
bla=wf.InitLammps.outputs.bla,
out_dump=wf.ParseDumpFile.outputs.dump,
out_log=wf.ParseLogFile.outputs.log,
# calc_mode=wf.InitLammps.outputs.calc_mode,
calc_mode=wf.calc,
)

return wf.Collect
4 changes: 3 additions & 1 deletion pyiron_workflow/node_library/atomistic/property/elastic.py
Original file line number Diff line number Diff line change
@@ -49,7 +49,9 @@ def elastic_constants(structure, calculator=None, engine=None):
engine = M3GNet()

if calculator is None:
from pyiron_workflow.node_library.atomistic.calculator.ase import static as calculator
from pyiron_workflow.node_library.atomistic.calculator.ase import (
static as calculator,
)

gs = calculator(engine=engine)

35 changes: 32 additions & 3 deletions pyiron_workflow/node_library/atomistic/property/phonons.py
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@

# from pyiron_workflow.macro import Macro, macro_node
from pyiron_workflow.function import single_value_node, function_node
from pyiron_workflow.node_library.dev_tools import wf_data_class
from pyiron_workflow.node_library.dev_tools import wf_data_class, parse_input_kwargs


from phonopy.api_phonopy import Phonopy
@@ -32,22 +32,50 @@ def generate_supercells(phonopy, parameters: InputPhonopyGenerateSupercells):
return supercells


@single_value_node("parameters")
def PhonopyParameters(
distance: float = 0.01,
is_plusminus: Union[str, bool] = "auto",
is_diagonal: bool = True,
is_trigonal: bool = False,
number_of_snapshots: Optional[int] = None,
random_seed: Optional[int] = None,
temperature: Optional[float] = None,
cutoff_frequency: Optional[float] = None,
max_distance: Optional[float] = None,
) -> dict:
return {
"distance": distance,
"is_plusminus": is_plusminus,
"is_diagonal": is_diagonal,
"is_trigonal": is_trigonal,
"number_of_snapshots": number_of_snapshots,
"random_seed": random_seed,
"temperature": temperature,
"cutoff_frequency": cutoff_frequency,
"max_distance": max_distance,
}


# The following function should be defined as a workflow macro (presently not possible)
@function_node()
def create_phonopy(
structure,
engine=None,
executor=None,
max_workers=1,
parameters=InputPhonopyGenerateSupercells(),
parameters: Optional[InputPhonopyGenerateSupercells | dict] = None,
):
from phonopy import Phonopy
from structuretoolkit.common import atoms_to_phonopy
import pyiron_workflow

phonopy = Phonopy(unitcell=atoms_to_phonopy(structure))

cells = generate_supercells(phonopy, parameters=parameters) # .run()
cells = generate_supercells(
phonopy,
parameters=parse_input_kwargs(parameters, InputPhonopyGenerateSupercells),
)
gs = pyiron_workflow.node_library.atomistic.calculator.ase.static(engine=engine)
df = gs.iter(atoms=cells, executor=executor, max_workers=max_workers)
phonopy.forces = df.forces
@@ -109,6 +137,7 @@ def get_total_dos(phonopy, mesh=3 * [10]):
nodes = [
# generate_supercells,
create_phonopy,
PhonopyParameters,
get_dynamical_matrix,
get_eigenvalues,
check_consistency,
5 changes: 4 additions & 1 deletion pyiron_workflow/node_library/atomistic/structure/build.py
Original file line number Diff line number Diff line change
@@ -31,7 +31,10 @@ def bulk(
def cubic_bulk_cell(
wf, element: str, cell_size: int = 1, vacancy_index: int | None = None
):
from pyiron_workflow.node_library.atomistic.structure.transform import create_vacancy, repeat
from pyiron_workflow.node_library.atomistic.structure.transform import (
create_vacancy,
repeat,
)

wf.structure = bulk(name=element, cubic=True)
wf.cell = repeat(structure=wf.structure, repeat_scalar=cell_size)
Original file line number Diff line number Diff line change
@@ -7,9 +7,7 @@


@single_value_node("structure")
def repeat(
structure: Atoms, repeat_scalar: int = 1
) -> Atoms:
def repeat(structure: Atoms, repeat_scalar: int = 1) -> Atoms:
return structure.repeat(repeat_scalar)


4 changes: 3 additions & 1 deletion pyiron_workflow/node_library/atomistic_codes.py
Original file line number Diff line number Diff line change
@@ -41,7 +41,9 @@ def Lammps(wf, structure=Atoms(), potential=None):
dump_file=wf.Shell.outputs.dump
)
wf.Collect = wf.create.atomistic.engine.lammps.Collect(
out_dump=wf.ParseDumpFile.outputs.dump, out_log=wf.ParseLogFile.outputs.log
out_dump=wf.ParseDumpFile.outputs.dump,
out_log=wf.ParseLogFile.outputs.log,
calc_mode=wf.calc._mode, # SVN gives output -> inject attribute getter node
)

return wf.Collect
7 changes: 4 additions & 3 deletions pyiron_workflow/node_library/databases/elasticity.py
Original file line number Diff line number Diff line change
@@ -3,17 +3,18 @@


@single_value_node("dataframe")
def de_jong(max_index: int | None = None):
def de_jong(max_index: int | None = None, filename="ec.json"):
"""
Database from Ref. de Jong et al. https://www.nature.com/articles/sdata20159#MOESM77
Expects the file to be the "ec.json" database referenced by:
Ref. de Jong et al. https://www.nature.com/articles/sdata20159#MOESM77

:return:
"""
import pandas as pd
import io
from ase.io import read

df = pd.read_json("ec.json")
df = pd.read_json(filename)

structures = []
# count = 0
37 changes: 36 additions & 1 deletion pyiron_workflow/node_library/dev_tools.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# for development and testing only
# provide functionality, data types etc. that will be later moved to the workflow code
from __future__ import annotations

from pathlib import Path

@@ -23,7 +24,7 @@ def __init__(


class FileObject:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is nearly the same object as the FileObject that we already have in files.py

def __init__(self, path='.', directory=None):
def __init__(self, path=".", directory=None):
if directory is None:
self._path = Path(path)
else:
@@ -269,3 +270,37 @@ def select(self, keys_to_store=None):
class wfMetaData:
log_level: int = 0
doc: Optional[str] = None


def parse_input_kwargs(input_kwargs, expected_type):
"""
Get a dictionary of data for some dataclass.

Args:
input_kwargs (expected_type|dict|None):
expected_type (type): One of our input dataclasses

Returns:
(dict): A dictionary of data from the `expected_type`, updated from the
`input_kwargs` -- Just the defaults for the type when `input_kwargs` is
`None`, a dictionary version of the instance if it was an instance of the
expected type, or the defaults updated by the provided input if it was a
`dict`.

Warnings:
In the case that `input_kwargs` is a dict, there's not currently any safeguards
to make sure the provided data aligns with the `expected_type`.
"""
if input_kwargs is None or isinstance(input_kwargs, dict):
calculator_input = expected_type()
elif not isinstance(input_kwargs, expected_type):
raise TypeError(
f"Expected to get input that was None, a dict, or {expected_type}, but got"
f"{input_kwargs}"
)

parsed_kwargs = vars(calculator_input)
if isinstance(input_kwargs, dict):
# WARNING: We're not doing any checking here that the dictionary items are valid
parsed_kwargs.update(input_kwargs)
return parsed_kwargs
4 changes: 1 addition & 3 deletions pyiron_workflow/node_library/lammps.py
Original file line number Diff line number Diff line change
@@ -42,9 +42,7 @@ def Structure(structure):


@single_value_node("path")
def InitLammps(
structure=None, potential=None, calculator=None, working_directory=None
):
def InitLammps(structure=None, potential=None, calculator=None, working_directory=None):
import os
from pyiron_atomistics.lammps.potential import LammpsPotential, LammpsPotentialFile

9 changes: 6 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
@@ -39,10 +39,13 @@
extras_require={
"node_library": [
'ase==3.22.1',
'atomistics==0.1.15',
'numpy==1.26.2',
'atomistics==0.1.23',
'matgl==0.9.2',
'numpy==1.26.4',
'pandas==2.2.0',
'phonopy==2.21.0',
'pyiron_atomistics==0.3.11',
'pyiron_atomistics==0.4.15',
'pyiron_contrib==0.1.15',
],
},
cmdclass=versioneer.get_cmdclass(),
Loading