Welcome to librascal’s documentation!

librascal is a versatile and scalable fingerprint and machine learning code. It focuses on the efficient construction of representations of atomic structures, that can then be fed to any supervised or unsupervised learning algorithm. Simple regression code will be included for testing purposes, but the long-term goal is to develop a separate collection of tools to this end.

librascal is currently considered a standalone code. However, we aim to provide enough flexibility to interface it with other codes such as LAMMPS and PLUMED-2.0. It can be used as a C++ library as well as a python module. To be able to call it from python, we have used the pybind11 library.

Although at the moment is a serial-only code, we aim to write it in MPI so that it will be possible to take advantage of parallelization to speed up the calculations significantly. Parallelization is possible especially over atoms in a structure (for large structures), over structures in a collection (for large collections of small structures), or over components of a representation (for representations with a large number of independent functions or components).

librascal is distributed under the GNU Lesser General Public License version 2.1 or later, at your convenience. This means that it can be modified and freely distributed, although we take no responsibility for its misuse.

For more information, have a look at the documentation!

Development

The code is currently in the alpha development phase; it is not yet suitable for public use. Nevertheless, there is a significant amount of functionality (including two tutorials) currently working and available to test if you’re feeling adventurous. Feedback and bug reports are welcome, as long as you keep the above in mind.

Structure of the Code

The code is divided mainly in two parts: a pure C++ part and a python-binding interface.

The subroutines of the code that performs the expensive part of the calculation are written in C++14, and are collected in the /src/ directory, as in the case of the cdist. This folder is completely agnostic of the python bindings, and it should be kept in this way.

The python-bindings is obtained through the pybind11 library, and the binding subroutines are included in the /bindings/ folder. Here, the bind_py_module.cc is the file that contains the main binding of the C++ package (in other words, is what is needed to use the syntax import librascal). The binding for each submodule of Rascal and its members are collected in files named bind_py_METHOD.cc. We decided to employ pybind11 because of its seamless integration between Eigen and numpy. This allows the developer (and the user) to code fast and efficient algorithms easily, without losing the power of the C++ linear algebra as well as numpy simplicity. For more reference, please consult Eigen interface from pybind11 (outbound).

Developers

Rascal is jointly developed between the COSMO (outbound) and LAMMM (outbound) groups at EPFL. The active developers are Michele Ceriotti, Federico Giberti, Alexander Gocsinski, Till Junge, Félix Musil, Markus Stricker, Max Veit, and Michael Willatt.

This documentation has been contributed by Chiheb Ben Mahmoud, Michele Ceriotti, Federico Giberti, Klim Goldshtein, Till Junge, Markus Stricker, Félix Musil, and is currently maintained by Max Veit.

Contents

Indices and tables