Git Product home page Git Product logo

aiida-core's Introduction

AiiDA

AiiDA (www.aiida.net) is a workflow manager for computational science with a strong focus on provenance, performance and extensibility.

Latest release PyPI version conda-forge PyPI pyversions
Getting help Docs status Discourse status
Build status Build Status Coverage Status Benchmarks
Activity PyPI-downloads Commit Activity
Community Discourse Affiliated with NumFOCUS Twitter

Features

  • Workflows: Write complex, auto-documenting workflows in python, linked to arbitrary executables on local and remote computers. The event-based workflow engine supports tens of thousands of processes per hour with full checkpointing.
  • Data provenance: Automatically track inputs, outputs & metadata of all calculations in a provenance graph for full reproducibility. Perform fast queries on graphs containing millions of nodes.
  • HPC interface: Move your calculations to a different computer by changing one line of code. AiiDA is compatible with schedulers like SLURM, PBS Pro, torque, SGE or LSF out of the box.
  • Plugin interface: Extend AiiDA with plugins for new simulation codes (input generation & parsing), data types, schedulers, transport modes and more.
  • Open Science: Export subsets of your provenance graph and share them with peers or make them available online for everyone on the Materials Cloud.
  • Open source: AiiDA is released under the MIT open source license

Installation

Please see AiiDA's documentation.

How to contribute PRs Welcome GitHub issues by-label

The AiiDA team appreciates help from a wide range of different backgrounds. Small improvements of the documentation or minor bug fixes are always welcome.

Please see the Contributor wiki on how to get started.

Frequently Asked Questions

If you are experiencing problems with your AiiDA installation, please refer to the FAQ page of the documentation. For any other questions, discussion and requests for support, please visit the Discourse server.

How to cite

If you use AiiDA in your research, please consider citing the following publications:

  • S. P. Huber et al., AiiDA 1.0, a scalable computational infrastructure for automated reproducible workflows and data provenance, Scientific Data 7, 300 (2020); DOI: 10.1038/s41597-020-00638-4
  • M. Uhrin et al., Workflows in AiiDA: Engineering a high-throughput, event-based engine for robust and modular computational workflows, Computational Materials Science 187, 110086 (2021); DOI: 10.1016/j.commatsci.2020.110086

If the ADES concepts are referenced, please also cite:

  • Giovanni Pizzi, Andrea Cepellotti, Riccardo Sabatini, Nicola Marzari,and Boris Kozinsky, AiiDA: automated interactive infrastructure and database for computational science, Computational Materials Science 111, 218-230 (2016); DOI: 10.1016/j.commatsci.2015.09.013

License

AiiDA is distributed under the MIT open source license (see LICENSE.txt). For a list of other open source components included in AiiDA, see open_source_licenses.txt.

Acknowledgements

AiiDA is a NumFOCUS Affiliated Project and supported by the MARVEL National Centre of Competence in Research, the MaX European Centre of Excellence and by a number of other supporting projects, partners and institutions, whose complete list is available on the AiiDA website acknowledgements page.

aiida-core's People

Contributors

borellim avatar casperwa avatar cepellotti avatar chrisjsewell avatar conradjohnston avatar csadorf avatar danielhollas avatar dependabot[bot] avatar dev-zero avatar dropd avatar eimrek avatar elsapassaro avatar fernandogargiulo1986 avatar giovannipizzi avatar greschd avatar lekah avatar ltalirz avatar mbercx avatar merkys avatar muhrin avatar phisch124 avatar pre-commit-ci[bot] avatar ramirezfranciscof avatar riccardosabatini avatar sphuber avatar szoupanos avatar unkcpz avatar waychal avatar yakutovicha avatar zhubonan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aiida-core's Issues

Automatic attributes setter for new Data nodes

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


Think to a way to automatically set new attributes of stored nodes.
This should be user dependent (e..g, files stored in ~/.aiida), e.g. with a function that is called automatically every time a node of a given type is stored.
Manage also correctly the exception handling: even if there are errors, a warning should be issued but the node should be saved anyway!


Add scheduler features and honor them in execmanager

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


Issue: some schedulers allow to have a decently complete output, and to filter it by providing a list of jobs (PBSPro, SLURM, PBS, ...)

Others (SGE) instead allow to filter only by user, and not by jobid (unless one wants some completely different output with unuseful information).

Solution: implement an attribute of the plugin to tell which features are available, and use the available features.


Schedulers environment variables

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


  • implement the -V option of most schedulers (i.e., inheritance of the environment variables from the launching environment) both in the plugins + options to set this flag as methods of a calculation
  • Check if writing 'export AAA=BBB' in the scheduler script itself is sufficient, and if the environment variables are obtained by all processors or only by the first one.

Start to write a good sphinx documentation

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


  • Restructure the docs folder, moving out of the way old documentation
  • Have the automatic documentation from the docstrings
  • Add a few sections (developers, users)
  • Under developers, prepare the documentation on how to write a transport, scheduler, code (input and output) plugin + developer conventions (function names, code style, ...)
  • Under users, write how to setup the code + prepare a stub for a first tutorial

celery

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


Check if the lock used in the poller hangs until the lock is released, or simply the current execution is skipped.

The second behavior is expected, to avoid that a long list of pending runs waits if one retrieve takes considerable time.


Implement folder-like grouping

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


As soon as we will start working with AIDA, we'll end up with tens/hundreds/... of groups, which may become unmanageable. We must implement a folder like structure.
Approaches:

  • Use a / as path separator, and then at the code-level manage the folders. Disadvantages: difficult to query/browse, must address 'empty' folders (as if I define the group named 'a/b' but no group 'a'.
  • Use dependencies between groups, with 'None' dependency meaning the root level, and putting a unique_together constraint for name+parent. Advantages: easy to get parent/children folders by querying. Disadvantage: must explicitly check that there are no 'loop' dependencies.
  • Other (better) approaches??

Improve aiida.common.Folder objects

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


  • Better method names:
    • get_content_list: use listdir as in os
    • insert_path: e.g. put
    • remove_path: e.g. remove
  • Better defaults:
    • get_abs_path should by default take relpath='.'
  • get_file_content:
    • add in aiida.common.Folder because it will need to do different things for different storage backends
  • deprecate get_file_content in aiida.orm.folder.FolderData

Implement querying of recursive dicts

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


Now, if a parameter data is a recursive dictionary, as

#!python

{ 'CONTROL' : 
  {'calculation': 'scf',
   'verbosity': 'high'}
}

only the first-level dictionary is exploded in attributes/properties, while each inner dictionary is simply stored as json, making queries difficult/impossible to do.

Implement querying also of inner fields, instead


Architecture of properties and attributes

Originally reported by: AiiDA Team (Bitbucket: aiida_team, GitHub: Unknown)


Which attributes should entity objects be allowed to have? And how do we manage them?
There are three types:

  1. Mandatory attributes like Calc.user which are enforced on DB and ORM level.
  2. Optional for convenience like calc1.cutoff. These may be temporary input parameters that the user may only need for template / input file generation or script control flow logic.
  3. Attributes like calc1.energy thata user may want to store in the DB (CalcAttrNum). Somehow one would specify a list of attributes to be saved and their datatypes.

Revisit directory structure of aida

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


The current directory structure mixes a lot the general library modules of aida (e.g. the submission scripts, the parsers, ...) with the code which is related to a given aida instance (i.e. the settings.py which points to a specific database etc.)

In principle, the latter //shouldn't// be put in the PYTHONPATH, but only the former libraries.

In the remote case that a user wants to have 2 aida instances on the same machine, the libraries (aidalib, aidasrv.submitter, ...) should be on the python path and referenced by both aida instances, while the settings.py should not be on the python path.

To discuss soon, because then one has to rename every module import!


bash_profile vs. bashrc

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


On some clusters, the settings for 'modules' is in /etc/profile, that is not sourced if a command is run via ssh, leading to errors.

  • Understand what is the best way to fix it
  • in verdi computer add also a test command that tries to get the output of the queue, as a test of the good functionality
  • add a FAQ saying what to do if there are such problems
  • add a FAQ to say that the .bashrc should not produce any output

Json field in database

Originally reported by: Andrea Cepellotti (Bitbucket: acepellotti, GitHub: cepellotti)


The most recent PostgreSQL v9.2 has added a JSON field. Investigate if it is worth using this feature.

It seems that now it has limited capabilities, that will be extended in the next versions. Check these links as reference:

http://www.postgresql.org/about/news/1415/
http://stackoverflow.com/questions/10560394/how-do-i-query-using-fields-inside-the-new-postgresql-json-datatype
http://stackoverflow.com/questions/12402630/how-do-i-use-postgresql-9-2-json-data-type-in-django


Link to other calculations in comments

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


Allow to have links to other calculations (or structures etc., to see what we really need; I think calculations at minimum) in comments to calculations.

For instance, if the string #123 appears in a comment, this will point to calculation with ID 123.

Some issues:

  • find a suitable way of distinguish links to different items (calc, struct, ...)
  • the web interface (at least) must provide real links
  • possibly, a way to query for calculations containing links to a given structure? [new many2many field?]
  • IMPORTANT: probably we shouldn't link to the ID but to the UUID so that we can safely export data from the database. The best: the user inputs something as #123, this is automatic converted upon save in the DB as M2M link + converted to a link to the correct UUID.

Consistency checker

Originally reported by: Giovanni Pizzi (Bitbucket: pizzi, GitHub: giovannipizzi)


It is useful to have a script that can be run by the user to verify if the database, local repository etc. are in a consistent state.

Since what has to be checked will be clear while we develop the code, I open a wiki page with a list of things to check.
Please add items to that page while you develop and realize that something could be inconsistent.


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.