Source code for pyiron_atomistics.atomistics.structure.factories.ase
# coding: utf-8
# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department
# Distributed under the terms of "New BSD License", see the LICENSE file.
from functools import wraps
from inspect import getmodule
from ase.build import (
bulk as ase_bulk,
)
from ase.build import (
cut as ase_cut,
)
from ase.build import (
molecule as ase_molecule,
)
from ase.build import (
stack as ase_stack,
)
from ase.io import read as ase_read
from ase.spacegroup import crystal as ase_crystal
from pyiron_base import state
from pyiron_atomistics.atomistics.structure.atoms import ase_to_pyiron
from pyiron_atomistics.atomistics.structure.pyironase import (
publication as publication_ase,
)
__author__ = "Ali Zendegani"
__copyright__ = (
"Copyright 2021, Max-Planck-Institut für Eisenforschung GmbH - "
"Computational Materials Design (CM) Department"
)
__version__ = "1.0.1"
__maintainer__ = "Liam Huber"
__email__ = "huber@mpie.de"
__status__ = "production"
__date__ = "Feb 26, 2021"
def _ase_header(ase_func):
chain = getmodule(ase_func).__name__
name = chain.split(".")[-1]
return f"""
Returns an ASE's {name} result as a `pyiron_atomistics.atomistics.structure.atoms.Atoms`.
{chain} docstring:
"""
def _ase_wraps(ase_func):
def decorator(func):
@wraps(ase_func)
def wrapper(*args, **kwargs):
state.publications.add(publication_ase())
return func(*args, **kwargs)
wrapper.__doc__ = _ase_header(ase_func) + wrapper.__doc__
return wrapper
return decorator
[docs]
class AseFactory:
@_ase_wraps(ase_bulk)
def bulk(self, *args, **kwargs):
return ase_to_pyiron(ase_bulk(*args, **kwargs))
@_ase_wraps(ase_cut)
def cut(self, *args, **kwargs):
return ase_cut(*args, **kwargs)
@_ase_wraps(ase_stack)
def stack(self, *args, **kwargs):
return ase_stack(*args, **kwargs)
@_ase_wraps(ase_crystal)
def crystal(self, *args, **kwargs):
return ase_to_pyiron(ase_crystal(*args, **kwargs))
@_ase_wraps(ase_read)
def read(self, *args, **kwargs):
return ase_to_pyiron(ase_read(*args, **kwargs))
@_ase_wraps(ase_molecule)
def molecule(self, *args, **kwargs):
return ase_to_pyiron(ase_molecule(*args, **kwargs))