Home

Awesome

<!-- markdownlint-disable MD033 --> <!-- markdownlint-disable-next-line MD041 --> <div align="center" style="padding-bottom: 1em;"> <img width="100px" align="center" src="https://matsci.org/uploads/default/original/2X/b/bd2f59b3bf14fb046b74538750699d7da4c19ac1.svg"> </div>

<div align="center">OPTIMADE Python tools</div>

<div align="center">

<a href="https://doi.org/10.21105/joss.03458"><img alt="JOSS DOI" src="https://img.shields.io/badge/JOSS-10.21105%2Fjoss.03458-blueviolet"></a>

</div> <div align="center"> <table> <thead align="center"> <tr><th align="center">Latest release</th><th align="center">Build status</th><th align="center">Activity</th></tr> </thead> <tbody> <tr> <td align="center"> <a href="https://pypi.org/project/optimade"><img alt="PyPI version" src="https://img.shields.io/pypi/v/optimade?logo=pypi&logoColor=white"></a><br> <a href="https://pypi.org/project/optimade"><img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/optimade?logo=python&logoColor=white"></a><br> <a href="https://github.com/Materials-Consortia/OPTIMADE"><img alt="OPTIMADE version" src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/Materials-Consortia/optimade-python-tools/main/optimade-version.json"></a> </td> <td align="center"> <a href="https://github.com/Materials-Consortia/optimade-python-tools/actions?query=branch%3Amain+"><img alt="Build Status" src="https://img.shields.io/github/actions/workflow/status/Materials-Consortia/optimade-python-tools/ci.yml?logo=github"></a><br> <a href="https://optimade.org/optimade-python-tools"><img alt="Docs" src="https://img.shields.io/github/actions/workflow/status/Materials-Consortia/optimade-python-tools/ci_cd_updated_main.yml?label=docs&logo=github"></a><br> <a href="https://codecov.io/gh/Materials-Consortia/optimade-python-tools"><img alt="Codecov" src="https://img.shields.io/codecov/c/github/Materials-Consortia/optimade-python-tools?logo=codecov&logoColor=white&token=UJAtmqkZZO"></a><br> </td> <td align="center"> <a href="https://github.com/Materials-Consortia/optimade-python-tools/pulse"><img alt="Commit Activity" src="https://img.shields.io/github/commit-activity/m/Materials-Consortia/optimade-python-tools?logo=github"></a><br> <a href="https://github.com/Materials-Consortia/optimade-python-tools/commits/main"><img alt="Last Commit" src="https://img.shields.io/github/last-commit/Materials-Consortia/optimade-python-tools/main?logo=github"></a><br> <a href="https://github.com/Materials-Consortia/optimade-python-tools/graphs/contributors"><img alt="Contributors" src="https://badgen.net/github/contributors/Materials-Consortia/optimade-python-tools?icon=github"></a> </td> </tr> </tbody> </table> </div>

The aim of OPTIMADE is to develop a common API, compliant with the JSON:API 1.0 specification. This is to enable interoperability among databases that serve crystal structures and calculated properties of existing and hypothetical materials.

This repository contains a library of tools for implementing and consuming OPTIMADE APIs using Python:

  1. pydantic data models for all OPTIMADE entry types and endpoint responses, and a Lark EBNF grammar implementation for the OPTIMADE filter language.
  2. Adapters to map OPTIMADE data to and from many commonly used atomistic Python frameworks (e.g., pymatgen, ASE) and crystallographic file types (e.g., CIF), using the optimade.adapters module.
  3. A configurable reference server implementation that can make use of either MongoDB or Elasticsearch database backends out-of-the-box, and is readily extensible to other backends. Try it out on the demo site! The OpenAPI schemas of the server are used to construct the OPTIMADE schemas site.
  4. An OPTIMADE client (optimade-get) that can query multiple OPTIMADE providers concurrently with a given filter, at the command-line or from Python code.
  5. A fuzzy API validator tool, which may be called from the shell (optimade-validator) or used as a GitHub Action from optimade-validator-action; this validator is used to construct the providers dashboard.

Documentation

This document, guides, and the full module API documentation can be found online at https://optimade.org/optimade-python-tools. In particular, documentation of the OPTIMADE API response data models (implemented here with pydantic) can be found online under OPTIMADE Data Models.

The release history and changelog can be found in the changelog.

Installation

Detailed installation instructions for different use cases (e.g., using the library or running a server) can be found in the installation documentation.

The latest stable version of this package can be obtained from PyPI:

pip install optimade

The latest development version of this package can be obtained from the main branch of this repository:

git clone https://github.com/Materials-Consortia/optimade-python-tools

Supported OPTIMADE versions

Each release of the optimade package from this repository only targets one version of the OPTIMADE specification, summarised in the table below.

<div align="center"> <table> <thead> <tr> <th align="center">OPTIMADE API version</th> <th align="center"><code>optimade</code> requirements</th> </tr> </thead> <tbody> <tr> <td align="center"><a href="https://github.com/Materials-Consortia/OPTIMADE/blob/v1.0.0/optimade.rst">v1.0.0</a></td> <td align="center"><code>optimade<=0.12.9</code></td> </tr> <tr> <td align="center"><a href="https://github.com/Materials-Consortia/OPTIMADE/blob/v1.1.0/optimade.rst">v1.1.0</a></td> <td align="center"><code>optimade>=0.16,<1.2</code></td> </tr> <tr> <td align="center"><a href="https://github.com/Materials-Consortia/OPTIMADE/blob/v1.2.0/optimade.rst">v1.2.0</a></td> <td align="center"><code>optimade>=1.2.0</code></td> </tr> </tbody> </table> </div>

Contributing and Getting Help

All development of this package (bug reports, suggestions, feedback and pull requests) occurs in the optimade-python-tools GitHub repository. Contribution guidelines and tips for getting help can be found in the contributing notes.

How to cite

If you use this package to access or serve OPTIMADE data, we kindly request that you cite the following:

Links