Changelog#
v2.0.0b1 - 2022-03-15#
The version 2 release of aiida-core largely focusses on major improvements to the design of data storage within AiiDA, as well as updates to core dependencies and removal of deprecated APIs.
Assuming users have already addressed deprecation warnings from aiida-core v1.6.x, there should be limited impact on existing code.
For plugin developers, the AiiDA 2.0 plugin migration guide provides a step-by-step guide on how to update their plugins.
For existing profiles and archives, a migration will be required, before they are compatible with the new version.
Tip
Before updating your aiida-core installation, it is advisable to make sure you create a full backup of your profiles,
using the current version of aiida-core you have installed.
For backup instructions, using aiida-core v1.6.7, see this documentation.
Python support updated to 3.8 - 3.10 ⬆️#
Following the NEP 029 timeline, support for Python 3.7 is dropped as of December 26 2021, and support for Python 3.10 is added.
Plugin entry point updates 🧩#
AiiDA’s use of entry points, to allow plugins to extend the functionality of AiiDA, is described in the plugins topic section.
The use of reentry scan, for loading plugin entry points, is no longer necessary.
Use of the reentry dependency has been replaced by the built-in importlib.metadata library. This library requires no additional loading step.
All entry points provided by aiida-core now start with a core. prefix, to make their origin more explicit and respect the naming guidelines of entry points in the AiiDA ecosystem.
The old names are still supported so as to not suddenly break existing code based on them, but they have now been deprecated.
For example:
from aiida.plugins import DataFactory
Int = DataFactory('int') # Old name
Int = DataFactory('core.int') # New name
Note that entry point names are also used on the command line. For example:
$ verdi computer setup -L localhost -T local -S direct
# now changed to
$ verdi computer setup -L localhost -T local -S core.direct
Improvements to the AiiDA storage architecture ♻️#
Full details on the AiiDA storage architecture are available in the storage architecture section.
The storage refactor incorporates four major changes:
The
djangoandsqlalchemystorage backends have been merged into a singlepsql_dosbackend (PostgreSQL + Disk-Objectstore).See the
psql_dosstorage format for details.This has allowed for the
djangodependency to be dropped.
The file system node repository has been replaced with an object store implementation.
The object store automatically deduplicates files, and allows for the compression of many objects into a single file, thus significantly reducing the number of files on the file system and memory utilisation (by orders of magnitude).
Note, to make full use of object compression, one should periodically run
verdi storage maintain.See the repository design section for details.
Command-line interaction with a profile’s storage has been moved from
verdi databasetoverdi storage.The AiiDA archive format has been redesigned as the
sqlite_zipstorage backend.See the
sqlite_zipstorage format for details.The new format allows for streaming of data during exports and imports, significantly reducing both the time and memory utilisation of these actions.
The archive can now be loaded directly as a (read-only) profile, without the need to import it first, see this Jupyter Notebook tutorial.
The storage redesign also allows for profile switching, within the same Python process, and profile access within a context manager. For example:
from aiida import load_profile, profile_context, orm
with profile_context('my_profile_1'):
# The profile will be loaded within the context
node_from_profile_1 = orm.load_node(1)
# then the profile will be unloaded automatically
# load a global profile
load_profile('my_profile_2')
node_from_profile_2 = orm.load_node(1)
# switch to a different global profile
load_profile('my_profile_3', allow_switch=True)
node_from_profile_3 = orm.load_node(1)
See How to interact with AiiDA for more details.
On first using aiida-core v2.0, your AiiDA configuration will be automatically migrated to the new version (this can be reverted by verdi config downgrade).
To update existing profiles and archives to the new storage formats, simply use verdi storage migrate and verdi archive migrate, respectively.
Important
The migration of large storage repositories is a potentially time-consuming process. It may take several hours to complete, depending on the size of the repository. It is also advisable to make a full manual backup of any AiiDA setup with important data: see the installation management section for more information.
See also this testing of profile migrations, for some indicative timings.
Improvements to the AiiDA ORM 👌#
Node repository#
Inline with the storage improvements, Node methods associated with the repository have some backwards incompatible changes:
Node repository method changes
Altered:
FileType: moved fromaiida.orm.utils.repositorytoaiida.repository.commonFile: moved fromaiida.orm.utils.repositorytoaiida.repository.commonFile: changed from namedtuple to classFile: can no longer be iterated overFile:typeattribute was renamed tofile_typeNode.put_object_from_tree:pathargument was renamed tofilepathNode.put_object_from_file:pathargument was renamed tofilepathNode.put_object_from_tree:keyargument was renamed topathNode.put_object_from_file:keyargument was renamed topathNode.put_object_from_filelike:keyargument was renamed topathNode.get_object:keyargument was renamed topathNode.get_object_content:keyargument was renamed topathNode.open:keyargument was renamed topathNode.list_objects:keyargument was renamed topathNode.list_object_names:keyargument was renamed topathSinglefileData.open:keyargument was renamed topathNode.open: can no longer be called without context managerNode.open: only moderandrbare supported, useput_object_from_methods insteadNode.get_object_content: only moderandrbare supportedNode.put_object_from_tree: argumentcontents_onlywas removedNode.put_object_from_tree: argumentforcewas removedNode.put_object_from_file: argumentforcewas removedNode.put_object_from_filelike: argumentforcewas removedNode.delete_object: argumentforcewas removed
Added:
Node.walkNode.copy_treeNode.is_valid_cachesetterNode.objects.iter_repo_keys
Additionally, Node.open should always be used as a context manager, for example:
with node.open('filename.txt') as handle:
content = handle.read()
QueryBuilder#
When using the QueryBuilder to query the database, the following changes have been made:
The
Computer’snamefield is now replaced withlabel(as previously deprecated in v1.6)The
QueryBuilder.queryhelpattribute is deprecated, for theas_dict(andfrom_dict) methodsThe
QueryBuilder.firstmethod now allows theflatargument, which will return a single item, instead of a list of one item, if only a single projection is defined.
For example:
from aiida.orm import QueryBuilder, Computer
query = QueryBuilder().append(Computer, filters={'label': 'localhost'}, project=['label']).as_dict()
QueryBuilder.from_dict(query).first(flat=True) # -> 'localhost'
For further information, see How to find and query for data.
Dict usage#
The Dict class has been updated to support more native dict behaviour:
Initialisation can now use
Dict({'a': 1}), instead ofDict(dict={'a': 1}). This is also the case forList([1, 2]).Equality (
==/!=) comparisons now compare the dictionaries, rather than the UUIDsThe contains (
in) operator now returnsTrueif the dictionary contains the keyThe
itemsmethod iterates a list of(key, value)pairs
For example:
from aiida.orm import Dict
d1 = Dict({'a': 1})
d2 = Dict({'a': 1})
assert d1.uuid != d2.uuid
assert d1 == d2
assert not d1 != d2
assert 'a' in d1
assert list(d1.items()) == [('a', 1)]
New data types#
Two new built-in data types have been added:
EnumDataA data plugin that wraps a Python
enum.Enuminstance.JsonableDataA data plugin that allows one to easily wrap existing objects that are JSON-able (via an
as_dictmethod).
See the data types section for more information.
Improvements to the AiiDA process engine 👌#
CalcJob API#
A number of minor improvements have been made to the CalcJob API:
Both numpy arrays and
Enuminstances can now be serialized on process checkpoints.The
Calcjob.spec.metadata.options.rerunnableoption allows to specify whether the calculation can be rerun or requeued (dependent on the scheduler). Note, this should only be applied for idempotent codes.The
Calcjob.spec.metadata.options.environment_variables_double_quotesoption allows for double-quoting of environment variable declarations. In particular, this allows for use of the$character in the environment variable name, e.g.export MY_FILE="$HOME/path/my_file".CalcJob.local_copy_listnow allows for specifying entire directories to be copied to the local computer, in addition to individual files. Note that the directory itself won’t be copied, just its contents.WorkChain.to_contextnow allows.delimited namespacing, which generate nested dictionaries. See Nested context keys for more information.
Importing existing computations#
The new CalcJobImporter class has been added, to define importers for computations completed outside of AiiDA.
These can help onboard new users to your AiiDA plugin.
For more information, see Writing importers for existing computations.
Scheduler plugins#
Plugin’s implementation of Scheduler._get_submit_script_header should now utilise Scheduler._get_submit_script_environment_variables, to format environment variable declarations, rather than handling it themselves. See the exemplar changes in #5283.
The Scheduler.get_valid_transports() method has also been removed, use get_entry_point_names('aiida.schedulers') instead (see get_entry_point_names()).
See Scheduler plugins for more information.
Transport plugins#
The SshTransport now supports the SSH ProxyJump option, for tunnelling through other SSH hosts.
See How to setup SSH connections for more information.
Transport plugins now support also transferring bytes (rather than only Unicode strings) in the stdout/stderr of “remote” commands (see #3787). The required changes for transport plugins:
rename the
exec_command_waitfunction in your plugin implementation withexec_command_wait_bytesensure the method signature follows
exec_command_wait_bytes(), and thatstdinaccepts abytesobject.return bytes for stdout and stderr (most probably internally you are already getting bytes - just do not decode them to strings)
For an exemplar implementation, see exec_command_wait_bytes(),
or see Transport plugins for more information.
The Transport.get_valid_transports() method has also been removed, use get_entry_point_names('aiida.transports') instead (see get_entry_point_names()).
Improvements to the AiiDA command-line 👌#
The AiiDA command-line interface (CLI) can now be accessed as both verdi and /path/to/bin/python -m aiida.
The underlying dependency for this CLI, click, has been updated to version 8, which contains built-in tab-completion support, to replace the old click-completion.
The completion works the same, except that the string that should be put in the activation script to enable it is now shell-dependent.
See Activating tab-completion for more information.
Logging for the CLI has been updated, to standardise its use across all CLI commands. This means that all commands include the option:
-v, --verbosity [notset|debug|info|report|warning|error|critical]
Set the verbosity of the output.
By default the verbosity is set to REPORT (see verdi config list), which relates to using Logger.report, as defined in report().
The following specific changes and improvements have been made to the CLI commands:
verdi storage(replacesverdi database)This command group replaces the
verdi databasecommand group, which is now deprecated, in order to represent its interaction with the full profile storage (not just database).verdi storage infoprovides information about the entities contained for a profile.verdi storage maintainhas also been added, to allow for maintenance of the storage, for example, to optimise the storage size.verdi archive versionandverdi archive info(replaceverdi archive inspect)This change synchronises the commands with the new
verdi storage versionandverdi storage infocommands.verdi group move-nodesThis command moves nodes from a source group to a target group (removing them from one and adding them to the other).
verdi code setupThere is a small change to the order of prompts, in interactive mode.
The uniqueness of labels is now validated, for both remote and local codes.
verdi code testRun tests for a given code to check whether it is usable, including whether remote executable files are available.
See AiiDA Command Line for more information.
Development improvements#
The build tool for aiida-core has been changed from setuptools to flit.
This allows for the project metadata to be fully specified in the pyproject.toml file, using the PEP 621 format.
Note, editable installs (using the -e flag for pip install) of aiida-core now require pip>=21.
Type annotations have been added to most of the code base. Plugin developers can use mypy to check their code against the new type annotations.
All module level imports are now defined explicitly in __all__.
See Overview of public API for more information.
The aiida.common.json module is now deprecated.
Use the json standard library instead.
Changes to the plugin test fixtures 🧪#
The deprecated AiidaTestCase class has been removed, in favour of the AiiDA pytest fixtures, which can be loaded in your conftest.py using:
pytest_plugins = ['aiida.manage.tests.pytest_fixtures']
The fixtures clear_database, clear_database_after_test, clear_database_before_test are now deprecated, in favour of the aiida_profile_clean fixture, which ensures (before the test) the default profile is reset with clean storage, and that all previous resources are closed
If you only require the profile to be reset before a class of tests, then you can use aiida_profile_clean_class.
Key Pull Requests#
Below is a list of some key pull requests that have been merged into version 2.0.0b1:
Storage and migrations:
♻️ REFACTOR: Implement the new file repository by @sphuber in #4345
♻️ REFACTOR: New archive format by @chrisjsewell in #5145
♻️ REFACTOR: Remove
QueryManagerby @chrisjsewell in #5101♻️ REFACTOR: Fully abstract QueryBuilder by @chrisjsewell in #5093
✨ NEW: Add
Backendbulk methods by @chrisjsewell in #5171⬆️ UPDATE: SQLAlchemy v1.4 (v2 API) by @chrisjsewell in #5103 and #5122
👌 IMPROVE: Configuration migrations by @chrisjsewell in #5319
♻️ REFACTOR: Remove Django storage backend by @chrisjsewell in #5330
♻️ REFACTOR: Move archive backend to
aiida/storageby @chrisjsewell in 5375👌 IMPROVE: Use
sqlalchemy.funcfor JSONB QB filters by @ltalirz in #5393✨ NEW: Add Mechanism to lock profile access by @ramirezfranciscof in #5270
✨ NEW: Add
verdi storageCLI by @ramirezfranciscof in #4965 and #5156
ORM API:
♻️ REFACTOR: Add the
core.prefix to all entry points by @sphuber in #5073👌 IMPROVE: Replace
InputValidationErrorwithValueErrorandTypeErrorby @sphuber in #4888👌 IMPROVE: Add
Node.walkmethod to iterate over repository content by @sphuber in #4935👌 IMPROVE: Add
Node.copy_treemethod by @sphuber in #5114👌 IMPROVE: Add
Node.is_valid_cachesetter property by @sphuber in #5114👌 IMPROVE: Add
Node.objects.iter_repo_keysby @chrisjsewell in #5114👌 IMPROVE: Allow storing
DecimalinNode.attributesby @dev-zero in #4964🐛 FIX: Initialising a
Nodewith aUserby @chrisjsewell in #5114🐛 FIX: Deprecate double underscores in
LinkManagercontains by @sphuber in #5067♻️ REFACTOR: Rename
namefield ofComputertolabelby @sphuber in #4882♻️ REFACTOR:
QueryBuilder.queryhelp->QueryBuilder.as_dictby @chrisjsewell in #5081👌 IMPROVE: Add
AuthInfojoins toQueryBuilderby @chrisjsewell in #5195👌 IMPROVE:
QueryBuilder.firstaddflatkeyword by @sphuber in #5410👌 IMPROVE: Add
Computer.default_memory_per_machineattribute by @yakutovicha in #5260👌 IMPROVE: Add
Code.validate_remote_exec_pathmethod to check executable by @sphuber in #5184👌 IMPROVE: Allow
sourceto be passed as a keyword toData.__init__by @sphuber in #5163👌 IMPROVE:
Dict.__init__andList.__init__by @mbercx in #5165‼️ BREAKING: Compare
Dictnodes by content by @mbercx in #5251👌 IMPROVE: Implement the
Dict.__contains__method by @sphuber in #5251👌 IMPROVE: Implement
Dict.items()method by @mbercx in #5251🐛 FIX:
BandsData.show_mplallow NaN values by @PhilippRue in #5024🐛 FIX: Replace
KeyErrorwithAttributeErrorinTrajectoryDatamethods by @Crivella in #5015✨ NEW:
EnumDatadata plugin by @sphuber in #5225✨ NEW:
JsonableDatadata plugin by @sphuber in #5017👌 IMPROVE: Register
Listclass withto_aiida_typedispatch by @sphuber in #5142👌 IMPROVE: Register
EnumDataclass withto_aiida_typedispatch by @sphuber in #5314
Processing:
✨ NEW:
CalcJob.get_importer()to import existing calculations, run outside of AiiDA by @sphuber in #5086✨ NEW:
ProcessBuilder._repr_pretty_ipython representation by @mbercx in #4970👌 IMPROVE: Allow
Enumtypes to be serialized onProcessNode.checkpointby @sphuber in #5218👌 IMPROVE: Allow numpy arrays to be serialized on
ProcessNode.checkpointby @greschd in #4730👌 IMPROVE: Add
Calcjob.spec.metadata.options.rerunnableto requeue/rerun calculations by @greschd in #4707👌 IMPROVE: Add
Calcjob.spec.metadata.options.environment_variables_double_quotesto escape environment variables by @unkcpz in #5349👌 IMPROVE: Allow directories in
CalcJob.local_copy_listby @sphuber in #5115👌 IMPROVE: Add support for
.namespacing in the keys forWorkChain.to_contextby @dev-zero in #4871👌 IMPROVE: Handle namespaced outputs in
BaseRestartWorkChainby @unkcpz in #4961🐛 FIX: Nested namespaces in
ProcessBuilderNamespaceby @sphuber in #4983🐛 FIX: Ensure
ProcessBuilderinstances do not interfere by @sphuber in #4984🐛 FIX: Raise when
Process.exposed_outputsgets non-existingnamespaceby @sphuber in #5265🐛 FIX: Catch
AttributeErrorfor unloadable identifier inProcessNode.is_valid_cacheby @sphuber in #5222🐛 FIX: Handle
CalcInfo.codes_run_modewhenCalcInfo.codes_infocontains multiple codes by @unkcpz in #4990🐛 FIX: Check for recycled circus PID by @dev-zero in #5086
Scheduler/Transport:
👌 IMPROVE: Specify abstract methods on
Transportby @chrisjsewell in #5242✨ NEW: Add support for SSH proxy_jump by @dev-zero in #4951
🐛 FIX: Daemon hang when passing
Noneasjob_idby @ramirezfranciscof in #4967🐛 FIX: Avoid deadlocks when retrieving stdout/stderr via SSH by @giovannipizzi in #3787
🐛 FIX: Use sanitised variable name in SGE scheduler job title by @mjclarke94 in #4994
🐛 FIX:
listdirmethod with pattern for SSH by @giovannipizzi in #5252👌 IMPROVE:
DirectScheduler: usenum_cores_per_mpiprocif defined in resources by @sphuber in #5126👌 IMPROVE: Add abstract generation of submit script env variables to
Schedulerby @sphuber in #5283
CLI:
✨ NEW: Allow for CLI usage via
python -m aiidaby @chrisjsewell in #5356⬆️ UPDATE:
click==8.0and removeclick-completionby @sphuber in #5111♻️ REFACTOR: Replace
verdi databasecommands withverdi storageby @ramirezfranciscof in #5228✨ NEW: Add verbosity control by @sphuber in #5085
♻️ REFACTOR: Logging verbosity implementation by @sphuber in #5119
✨ NEW: Add
verdi group move-nodescommand by @mbercx in #4428👌 IMPROVE:
verdi code setup: validate the uniqueness of label for local codes by @sphuber in #5215👌 IMPROVE:
GroupParamType: store group if created by @sphuber in #5411👌 IMPROVE: Show #procs/machine in
verdi computer showby @dev-zero in #4945👌 IMPROVE: Notify users of runner usage in
verdi process listby @ltalirz in #4663👌 IMPROVE: Set
localhostas default for database hostname inverdi setupby @sphuber in #4908👌 IMPROVE: Make
verdi groupmessages consistent by @CasperWA in #4999🐛 FIX:
verdi calcjob cleanworkdircommand by @zhubonan in #5209🔧 MAINTAIN: Add
verdi devel run-sqlby @chrisjsewell in #5094
REST API:
Developers:
🔧 MAINTAIN: Move to flit for PEP 621 compliant package build by @chrisjsewell in #5312
🔧 MAINTAIN: Make
__all__imports explicit by @chrisjsewell in #5061🔧 MAINTAIN: Add
pre-commit.ciby @chrisjsewell in #5062🔧 MAINTAIN: Add isort pre-commit hook by @chrisjsewell in #5151
⬆️ UPDATE: Drop support for Python 3.7 by @sphuber in #5307
⬆️ UPDATE: Support Python 3.10 by @csadorf in #5188
♻️ REFACTOR: Remove
reentryrequirement by @chrisjsewell in #5058♻️ REFACTOR: Remove
simplejsonby @sphuber in #5391♻️ REFACTOR: Remove
ete3dependency by @ltalirz in #4956👌 IMPROVE: Replace deprecated imp with importlib by @DirectriX01 in #4848
⬆️ UPDATE:
sphinx~=4.1(+ sphinx extensions) by @chrisjsewell in #5420🧪 CI: Move time consuming tests to separate nightly workflow by @sphuber in #5354
🧪 TESTS: Entirely remove
AiidaTestCaseby @chrisjsewell in #5372
v1.6.7 - 2022-03-07#
The markupsafe dependency specification was moved to install_requires
v1.6.5 - 2021-08-13#
This patch release contains a number of helpful bug fixes and improvements.
Improvements 👌#
Add support for the
ProxyJumpSSH config option for seting up an arbitrary number of proxy jumps without additional processes by creating TCP channels over existing SSH connections. This provides improved control over the lifetime of the different connections. See SSH configuration for further details. [#4951]Allow numpy arrays to be serialized to a process checkpoint. [#4730)])
Add the
_mergemethod toProcessBuilder, to update the builder with a nested dictionary. [#4983)])verdi setup: Set the defaut database hostname aslocalhost. [#4908]Allow
Node.__init__to be constructed with a specificUsernode. [#4977]Minimize database logs of failed schema version retrievals. [#5056]
Remove duplicate call of normal
callbackforInteractiveOption. [#5064]Update requirement
pyyaml~=5.4, which contains critical security fixes. [#5060]
Bug Fixes 🐛#
Fix regression issue with
__contains__operator inLinkManager, when using double underscores, e.g. for'some__nested__namespace' in calc.inputs. #5067Stop deprecation warning being shown when tab-completing incoming and outgoing node links. [#5011]
Stop possible command hints being shown when attempting to tab complete
verdicommands that do not exist. [#5012]Do not use
get_detailed_job_infowhen retrieving a calculation job, if no job id is set. [#4967]Race condition when two processes try to create the same
Folder/SandboxFolder, [#4912]Return the whole nested namespace when using
BaseRestartWorkChain.result. [#4961]Use
numpy.nanminandnumpy.nanmaxfor computing y-limits ofBandsDatamatplotlib methods. [#5024]Use sanitized job title with
SgeSchedulerscheduler. [#4994]
v1.6.4 - 2021-06-23#
This is a patch release to pin psycopg2-binary to version 2.8.x, to avoid an issue with database creation in version 2.9 (#4989).
v1.6.3 - 2021-04-28#
full changelog | GitHub contributors page for this release
This is a patch release to fix a bug that was introduced in v1.6.2 that would cause a number of verdi commands to fail due to a bug in the with_dbenv decorator utility.
v1.6.2 - 2021-04-28#
full changelog | GitHub contributors page for this release
Bug fixes#
CLI: Use the proper proxy command for
verdi calcjob gotocomputerif configured as such [#4761]Respect nested output namespaces in
Process.exposed_outputs[#4863]NodeLinkManagernow properly regenerates original nested namespaces from the flat link labels stored in the database. This means one can now donode.outputs.some.nested.outputinstead of having to donode.outputs.some__nested__output. The same goes fornode.inputs[#4625]Fix
aiida.cmdline.utils.decorators.with_dbenvalways loading the database. Now it will only load the database if not already loaded, as intended [#4865]
Documentation#
Update ssh proxycommand section with instructions on how to handle cases where the SSH key needs to be specified for the proxy server [#4839]
Add the “How to extend workflows” section, explaining the use of the
expose_inputsandexpose_outputsfeatures, as well as nested namespaces [#4562]Add help in intro for when quicksetup fails due to problems autodetecting the PostgreSQL settings [#4838]
v1.6.1 - 2021-03-31#
full changelog | GitHub contributors page for this release
This patch release is primarily intended to fix a regression in the aiida_profile test fixture, used by plugin developers, causing config validation errors (#4831).
Other additions:
✨ NEW: Added
structure.data.importentry-point, allowing for plugins to define file-format specific sub-commands ofverdi data structure import(#4427).✨ NEW: Added
--labeland--groupoptions toverdi data structure import, which apply a label/group to all structures being imported (#4429).⬆️ UPDATE:
psgudependency increased tov0.2.x. This fixes a bug inverdi quicksetup, when used on the Windows Subsystem for Linux (WSL) platform (#4834).🐛 FIX:
metadata.options.max_memory_kbis now ignored when using the direct scheduler (#4825). This was previously imposing a a virtual memory limit withulimit -v, which is very different to the physical memory limit that other scheduler plugins impose. No straightforward way exists to directly limit the physical memory usage for this scheduler.🐛 FIX: Added
__str__method to theOrbitalclass, fixing a recursion error (#4829).
v1.6.0 - 2021-03-15#
full changelog | GitHub contributors page for this release
As well as introducing a number of improvements and new features listed below, this release marks the “under-the-hood” migration from the tornado package to the Python built-in module asyncio, for handling asynchronous processing within the AiiDA engine.
This removes a number of blocking dependency version clashes with other tools, in particular with the newest Jupyter shell and notebook environments.
The migration does not present any backward incompatible changes to AiiDA’s public API.
A substantial effort has been made to test and debug the new implementation, and ensure it performs at least equivalent to the previous code (or improves it!), but please let us know if you uncover any additional issues.
This release also drops support for Python 3.6 (testing is carried out against 3.7, 3.8 and 3.9).
NOTE: v1.6 is tentatively intended to be the final minor v1.x release before v2.x, that will include a new file repository implementation and remove all deprecated code.
New calculation features ✨#
The additional_retrieve_list metadata option has been added to CalcJob (#4437).
This new option allows one to specify additional files to be retrieved on a per-instance basis, in addition to the files that are already defined by the plugin to be retrieved.
A new namespace stash has bee added to the metadata.options input namespace of the CalcJob process (#4424).
This option namespace allows a user to specify certain files that are created by the calculation job to be stashed somewhere on the remote.
This can be useful if those files need to be stored for a longer time than the scratch space (where the job was run) is available for, but need to be kept on the remote machine and not retrieved.
Examples are files that are necessary to restart a calculation but are too big to be retrieved and stored permanently in the local file repository.
See Stashing files on the remote for more details.
The new TransferCalcjob plugin (#4194) allows the user to copy files between a remote machine and the local machine running AiiDA.
More specifically, it can do any of the following:
Take any number of files from any number of
RemoteDatafolders in a remote machine and copy them in the local repository of a single newly createdFolderDatanode.Take any number of files from any number of
FolderDatanodes in the local machine and copy them in a single newly createdRemoteDatafolder in a given remote machine.
See the Transferring data how-to for more details.
Profile configuration improvements 👌#
The way the global/profile configuration is accessed has undergone a number of distinct changes (#4712):
When loaded, the
config.json(found in the.aiidafolder) is now validated against a JSON Schema that can be found inaiida/manage/configuration/schema.The schema includes a number of new global/profile options, including:
transport.task_retry_initial_interval,transport.task_maximum_attempts,rmq.task_timeoutandlogging.aiopika_loglevel(#4583).The
cache_config.ymlhas now also been deprecated and merged into theconfig.json, as part of the profile options. This merge will be handled automatically, upon first load of theconfig.jsonusing the new AiiDA version.
In-line with these changes, the verdi config command has been refactored into separate commands, including verdi config list, verdi config set, verdi config unset and verdi config caching.
See the Configuring profile options and Configuring caching how-tos for more details.
Command-line additions and improvements 👌#
In addition to verdi config, numerous other new commands and options have been added to verdi:
Deprecated
verdi exportandverdi importcommands (replaced by newverdi archive) (#4710)Added
verdi group delete --delete-nodes, to also delete the nodes in a group during its removal (#4578).Improved
verdi group remove-nodescommand to warn when requested nodes are not in the specified group (#4728).Added
exceptionto the projection mapping ofverdi process list, for example to use in debugging as:verdi process list -S excepted -P ctime pk exception(#4786).Added
verdi database summary(#4737): This prints a summary of the count of each entity and (optionally) the list of unique identifiers for some entities.Improved
verdi process playperformance, by only querying for active processes with the--allflag (#4671)Added the
verdi database versioncommand (#4613): This shows the schema generation and version of the database of the given profile, useful mostly for developers when debugging.Improved
verdi node deleteperformance (#4575): The logic has been re-written to greatly reduce the time to delete large amounts of nodes.Fixed
verdi quicksetup --non-interactive, to ensure it does not include any user prompts (#4573)Fixed
verdi --versionwhen used in editable mode (#4576)
API additions and improvements 👌#
The base Node class now evaluates equality based on the node’s UUID (#4753).
For example, loading the same node twice will always resolve as equivalent: load_node(1) == load_node(1).
Note that existing, class specific, equality relationships will still override the base class behaviour, for example: Int(99) == Int(99), even if the nodes have different UUIDs.
This behaviour for subclasses is still under discussion at: https://github.com/aiidateam/aiida-core/issues/1917
When hashing nodes for use with the caching features, -0. is now converted to 0., to reduce issues with differing hashes before/after node storage (#4648).
Known failure modes for hashing are now also raised with the HashingError exception (#4778).
Both aiida.tools.delete_nodes (#4578) and aiida.orm.to_aiida_type (#4672) have been exposed for use in the public API.
A pathlib.Path instance can now be used for the file argument of SinglefileData (#3614)
Type annotations have been added to all inputs/outputs of functions and methods in aiida.engine (#4669) and aiida/orm/nodes/processes (#4772).
As outlined in PEP 484, this improves static code analysis and, for example, allows for better auto-completion and type checking in many code editors.
New REST API Query endpoint ✨#
The /querybuilder endpoint is the first POST method available for AiiDA’s RESTful API (#4337)
The POST endpoint returns what the QueryBuilder would return, when providing it with a proper queryhelp dictionary (see the documentation here).
Furthermore, it returns the entities/results in the “standard” REST API format - with the exception of link_type and link_label keys for links (these particular keys are still present as type and label, respectively).
For security, POST methods can be toggled on/off with the verdi restapi --posting/--no-posting options (it is on by default).
Although note that this option is not yet strictly public, since its naming may be changed in the future!
See AiiDA REST API documentation for more details.
Additional Changes#
Fixed the direct scheduler which, in combination with
SshTransport, was hanging on submit command (#4735). In the ssh transport, to emulate ‘chdir’, the current directory is now kept in memory, and every command prepended withcd FOLDER_NAME && ACTUALCOMMAND.In
aiida.tools.ipython.ipython_magics,load_ipython_extensionhas been deprecated in favour ofregister_ipython_extension(#4548).Refactored
.ci/folder to make tests more portable and easier to understand (#4565) Theci/folder had become cluttered, containing configuration and scripts for both the GitHub Actions and Jenkins CI. This change moved the GH actions specific scripts to.github/system_tests, and refactored the Jenkins setup/tests to use molecule in the.molecule/folder.For aiida-core development, the pytest
requires_rmqmarker andconfig_with_profilefixture have been added (#4739 and #4764)
v1.5.2 - 2020-12-07#
Note: release v1.5.1 was skipped due to a problem with the uploaded files to PyPI.
Bug fixes#
v1.5.0 - 2020-11-13#
In this minor version release, support for Python 3.9 is added [#4301], while support for Python 3.5 is dropped [#4386]. This version is compatible with all current Python versions that are not end-of-life:
3.6
3.7
3.8
3.9
Features#
Process functions (
calcfunctionandworkfunction) can now be submitted to the daemon just likeCalcJobs andWorkChains [#4539]REST API: list endpoints at base URL [#4412]
REST API: new
full_types_countendpoint that counts the number of nodes for each type of node [#4277]ProcessBuilder: allow unsetting of inputs through attribute deletion [#4419]verdi migrate: make--in-placework across different file systems [#4393]
Improvements#
Added remaining original documentation that didn’t make it into the first step of the recent major overhaul of v1.3.0
verdi process show: order by ctime and print process label [#4407]LinkManager: fix inaccuracy in exception message for non-existent link [#4388]Add
resetmethod toProgressReporterAbstract[#4522]Improve the deprecation warning for
Node.openoutside context manager [#4434]
Bug fixes#
SlurmScheduler: fix bug in validation of job resources [#4555]Fix
ZeroDivisionErrorin worker slots check [#4513]CalcJob: only attempt to clean up the retrieve temporary folder after parsing if it is present [#4379]Add missing entry point groups to the mapping [#4395]
REST API: the
process_typecan now identify pathological empty-stringed or null entries in the database [#4277]
Developers#
verdi group delete: deprecate and ignore the--clearoption [#4357]Replace old format string interpolation with f-strings [#4400]
CI: move
pylintconfiguration topyproject.toml[#4411]CI: use
-einstall for tox + add docker-compose for isolated RabbitMQ [#4375]CI: add coverage patch threshold to prevent false positives [#4413]
CI: Allow for mypy type checking of third-party imports [#4553]
Archive (import/export) refactor#
The refactoring goal was to pave the way for the implementation of a new archive format in v2.0.0 ( aiidateamAEP005)
Three abstract+concrete interface classes are defined; writer, reader, migrator, which are independent of theinternal structure of the archive. These classes are used within the export/import code.
The code in
aiida/tools/importexporthas been largely re-written, in particular addingaiida/toolsimportexport/archive, which contains this code for interfacing with an archive, and does not require connectionto an AiiDA profile.The export logic has been re-written; to minimise required queries (faster), and to allow for “streaming” datainto the writer (minimise RAM requirement with new format). It is intended that a similiar PR will be made for the import code.
A general progress bar implementation is now available in
aiida/common/progress_reporter.py. All correspondingCLI commands now also have--verbosityoption.Merged PRs:
Updated archive version from
0.9->0.10(#4561Deprecations:
export_zip,export_tar,export_tree,extract_zip,extract_tarandextract_treefunctions.silentkey-word in theexportfunctionRemoved:
ZipFolderclass
v1.4.4#
This patch is a backport for 2 of the fixes in v1.5.2.
v1.4.3#
v1.4.2#
v1.4.0#
Improvements#
Features#
Make the RabbitMQ connection parameters configurable [#4341]
Add infrastructure to parse scheduler output for
CalcJobs[#3906]Add support for “peer” authentication with PostgreSQL [#4255]
Add the
--pausedflag toverdi process list[#4213]Make the loglevel of the daemonizer configurable [#4276]
Transport: add option to not use a login shell for all commands [#4271]Implement
skip_ormoption for SqlAlchemyGroup.remove_nodes[#4214]Dict: allow setting attributes through setitem andAttributeManager[#4351]CalcJob: allow nested target paths forlocal_copy_list[#4373]verdi export migrate: add--in-placeflag to migrate archive in place [#4220]
Bug fixes#
verdi: make--prepend-textand--append-textoptions properly interactive [#4318]verdi computer test: fix failing result in harmlessstderrresponses [#4316]QueryBuilder: Accept empty string forentity_typeinappendmethod [#4299]verdi status: do not except when no profile is configured [#4253]ArithmeticAddParser: attach output before checking for negative value [#4267]CalcJob: fix bug inretrieve_listaffecting entries without wildcards [#4275]TemplateReplacerCalculation: makefilesnamespace dynamic [#4348]
Developers#
Dependencies#
Deprecations#
v1.3.1#
v1.3.0#
Improvements#
Performance#
Features#
Add a progress bar for export and import related functionality [#3599]
Enable loading config.yml files from URL in
verdicommands with--configoption [#3977]QueryBuilder: add theflatargument to the.all()method [#3945]verdi status: add--no-rmqflag to skip the RabbitMQ check [#4181]Add support for process functions in
verdi plugin list[#4117]Allow profile selection in ipython magic
%aiida[#4071]Support more complex formula formats in
aiida.orm.data.cif.parse_formula[#3954]
Bug fixes#
BaseRestartWorkChain: do not assumemetadataexists in inputs inrun_process[#4210]BaseRestartWorkChain: fix bug ininspect_process[#4166]BaseRestartWorkChain: fix the “unhandled failure mechanism” for dealing with failures of subprocesses [#4155]Fix exception handling in commands calling
list_repository_contents[#3968]Fix bug in
Code.get_full_text_info[#4083]Fix bug in
verdi daemon restart --reset[#3969]Fix tab-completion for
LinkManagerandAttributeManager[#3985]CalcJobResultManager: fix bug that broke tab completion [#4187]SshTransport.gettree: allow non-existing nested target directories [#4175]CalcJob: move job resource validation to theSchedulerclass fixing a problem for the SGE and LSF scheduler plugins [#4192]WorkChain: guarantee to maintain order of appended awaitables [#4156]Add support for binary files to the various
verdicat commands [#4077]Ensure
verdi group show --limitrespects limit even in raw mode [#4092]QueryBuilder: fix type string filter generation forGroupsubclasses [#4144]Raise when calling
Node.objects.deletefor node with incoming links [#4168]Properly handle multiple requests to threaded REST API [#3974]
NodeTranslator: do not assumeget_export_formatsexists [#4188]Only color directories in
verdi node repo ls --color[#4195]
Developers#
Add arithmetic workflows and restructure calculation plugins [#4124]
Add minimal
mypyrun to the pre-commit hooks. [#4176]Fix timeout in
tests.cmdline.commands.test_process:test_pause_play_kill[#4052]Revise update-dependency flow to resolve issue #3930 [#3957]
Add GitHub action for transifex upload [#3958]
v1.2.1#
In the fixing of three bugs, three minor features have been added along the way.
Features#
Add config option
daemon.worker_process_slotsto configure the maximum number of concurrent tasks each daemon worker can handle [#3949]Add config option
daemon.default_workersto set the default number of workers to be started byverdi daemon start[#3949]CalcJob: make submit script filename configurable through themetadata.options[#3948]
Bug fixes#
CalcJob: fix bug in idempotency check of upload transport task [#3948]REST API: reintroduce CORS headers, the lack of which was breaking the Materials Cloud provenance explorer [#3951]
Remove the equality operator of
ExitCodewhich caused the serialization of workchains to fail if put in the workchain context [#3940]
v1.2.0#
Features#
ExitCode: make the exit message parameterizable through templates [#3824]GroupPath: a utility to work with virtualGrouphierarchies [#3613]Make
Groupsub classable through entry points [#3882][#3903][#3926]Add auto-complete support for
CodeParamTypeandGroupParamType[#3926]Add export archive migration for
Grouptype strings [#3912]Add the
-v/--versionoption toverdi export migrate[#3910]Add the
-l/--limitoption toverdi group show[#3857]Add the
--order-by/--order-directionoptions toverdi group list[#3858]Add
prepend_textandappend_texttoaiida_local_code_factorypytest fixture [#3831]REST API: make it easier to call
run_apiin wsgi scripts [#3875]Plot bands with only one kpoint [#3798]
Bug fixes#
Improved validation for CLI parameters [#3894]
Ensure unicity when creating instances of
Autogroup[#3650]Prevent nodes without registered entry points from being stored [#3886]
Fix the
RotatingFileHandlerconfiguration of the daemon logger[#3891]Ensure log messages are not duplicated in daemon log file [#3890]
Convert argument to
strinaiida.common.escaping.escape_for_bash[#3873]Remove the return statement of
RemoteData.getfile()[#3742]Support for
BandsDatanodes withoutStructureDataancestors [#3817]
Documentation#
Developers#
Deduplicate code for tests of archive migration code [#3924]
CI: use GitHub Actions services for PostgreSQL and RabbitMQ [#3901]
Move
aiida.manage.external.pgsuto external packagepgsu[#3892]Cleanup the top-level directory of the repository [#3738]
Remove unused
orm.implementation.utilsmodule [#3877]Revise dependency management workflow [#3771]
Re-add support for Coverage reports through codecov.io [#3618]
v1.1.1#
Changes#
Emit a warning when input port specifies a node instance as default [#3466]
BaseRestartWorkChain: require process handlers to be instance methods [#3782]BaseRestartWorkChain: add method to enable/disable process handlers [#3786]Docker container: remove conda activation from configure-aiida.sh script [#3791]
Add fixtures to clear the database before or after tests [#3783]
verdi status: add the configuration directory path to the output [#3587]QueryBuilder: add support fordatetime.dateobjects in filters [#3796]
Bug fixes#
Fix bugs in
Node._store_from_cacheandNode.repository.erasethat could result in calculations not being reused [#3777]Caching: fix configuration spec and validation [#3785]
Write migrated config to disk in
Config.from_file[#3797]Validate label string at code setup stage [#3793]
Reuse
prepend_textandappend_textinverdi computer/code duplicate[#3788]Fix broken imports of
urllibin various locations includingverdi import[#3767]Match headers with actual output for
verdi data structure list[#3756]Disable caching for the
Datanode subclass (this should not affect usual caching behavior) [#3807]
v1.1.0#
Nota Bene: although this is a minor version release, the support for python 2 is dropped (#3566) following the reasoning outlined in the corresponding AEP001.
Critical bug fixes for python 2 will be supported until July 1 2020 on the v1.0.* release series.
With the addition of python 3.8 (#3719), this version is now compatible with all current python versions that are not end-of-life:
3.5
3.6
3.7
3.8
Features#
Add the AiiDA Graph Explorer (AGE) a generic tool for traversing provenance graph [#3686]
Add the
BaseRestartWorkChainwhich makes it easier to write a simple work chain wrapper around another process with automated error handling [#3748]Add
provenance_exclude_listattribute toCalcInfodata structure, allowing to prevent calculation input files from being permanently stored in the repository [#3720]Add the
verdi node repo dumpcommand [#3623]Add more methods to control cache invalidation of completed process node [#3637]
Allow documentation to be build without installing and configuring AiiDA [#3669]
Add option to expand namespaces in sphinx directive [#3631]
Performance#
Changes#
CalcJob: movepresubmitcall fromCalcJob.runtoWaiting.execute[#3666]CalcJob: do not pause when exception thrown in thepresubmit[#3699]Move
CalcJobspec validator to corresponding namespaces [#3702]Move getting completed job accounting to
retrievetransport task [#3639]Move
last_job_infofrom JSON-serialized string to dictionary [#3651]Improve SqlAlchemy session handling for
QueryBuilder[#3708]Use built-in
openinstead ofio.open, which is possible now that python 2 is no longer supported [#3615]Add non-zero exit code for
verdi daemon status[#3729]
Bug fixes#
Deal with unreachable daemon worker in
get_daemon_status[#3683]Django backend: limit batch size for
bulk_createoperations [#3713]Make sure that datetime conversions ignore
None[#3628]Allow empty
key_filenameinverdi computer configure sshand reuse cooldown time when reconfiguring [#3636]Update
pyyamlto v5.1.2 to prevent arbitrary code execution [#3675]QueryBuilder: fix validation bug and improve message forinoperator [#3682]Consider ‘AIIDA_TEST_PROFILE’ in ‘get_test_backend_name’ [#3685]
Ensure correct types for
QueryBuilder().dict()with multiple projections [#3695]Make local modules importable when running
verdi run[#3700]Fix bug in
upload_calculationforCalcJobswith local codes [#3707]Add imports from
urllibto dbimporters [#3704]
Developers#
Moved continuous integration from Travis to Github actions [#3571]
Replace custom unit test framework for
pytestand move all tests toteststop level directory [#3653][#3674][#3715]Cleaned up direct dependencies and relaxed requirements where possible [#3597]
Set job poll interval to zero in localhost pytest fixture [#3605]
Make command line deprecation warnings visible with test profile [#3665]
Add docker image with minimal running AiiDA instance [#3722]
v1.0.1#
Improvements#
Improve the backup mechanism of the configuration file: unique backup written at each update [#3581]
Forward
verdi code deletetoverdi node delete[#3546]Homogenize and improve output of
verdi computer test[#3544]Scheduler SLURM: support
UNLIMITEDandNOT_SETas values for requested walltimes [#3586]Set default for the
safe_intervaloption ofverdi computer configure[#3590]Create backup of configuration file before migrating [#3568]
Add
python_requirestosetup.jsonnecessary for future dropping of python 2 [#3574]Remove unused QB methods/functions [#3526]
Move
pgtestargument ofTemporaryProfileManagerto constructor [#3486]Add
filenameargument toSinglefileDataconstructor [#3517]Mention machine in SSH connection exception message [#3536]
Docs: Expand on QB
order_byinformation [#3548]Replace deprecated pymatgen
site.species_and_occuwithsite.species[#3480]QueryBuilder: add deepcopy implementation andqueryhelpproperty [#3524]
Bug fixes#
Fix
verdi calcjob gotocomputerwhenkey_filenameis missing [#3593]Fix bug in database migrations where schema generation determination excepts for old databases [#3582]
Fix false positive for
verdi database integrity detect-invalid-links[#3591]Config migration: handle edge case where
daemonkey is missing fromdaemon_profiles[#3585]Raise when unable to detect name of local timezone [#3576]
Fix bug for
CalcJobdry runs withstore_provenance=False[#3513]Migrations for legacy and now illegal default link label
_return, export version upped to0.8[#3561]Fix REST API
attributes_filterandextras_filter[#3556]Fix bug in plugin
Factoryclasses for python 3.7 [#3552]Make
PolishWorkChainscheckpointable [#3532]REST API: fix generator of full node namespace [#3516]
v1.0.0#
Overview of changes#
The following is a summary of the major changes and improvements from v0.12.* to v1.0.0.
Faster workflow engine: the new message-based engine powered by RabbitMQ supports tens of thousands of processes per hour and greatly speeds up workflow testing. You can now run one daemon per AiiDA profile.
Faster database queries: the switch to JSONB for node attributes and extras greatly improves query speed and reduces storage size by orders of magnitude.
Robust calculations: AiiDA now deals with network connection issues (automatic retries with backoff mechanism, connection pooling, …) out of the box. Workflows and calculations are all Processes and can be “paused” and “played” anytime.
Better verdi commands: the move to the
clickframework brings homogenous command line options across all commands (loading nodes, …). You can easily add new commands through plugins.Easier workflow development: Input and output namespaces, reusing specs of sub-processes and less boilerplate code simplify writing WorkChains and CalcJobs, while also enabling powerful auto-documentation features.
Mature provenance model: Clear separation between data provenance (Calculations, Data) and logical provenance (Workflows). Old databases can be migrated to the new model automatically.
python3 compatible: AiiDA 1.0 is compatible with both python 2.7 and python 3.6 (and later). Python 2 support will be dropped in the coming months.
Detailed list of changes#
Below a (non-exhaustive) list of changes by category. Changes between 1.0 alpha/beta releases are not included - for those see the changelog of the corresponding releases.
Engine and daemon#
Implement the concept of an “exit status” for all calculations, allowing a programmatic definition of success or failure for all processes [#1189]
All calculations now go through the
Processlayer, homogenizing the state of work and job calculations [#1125]Allow
Noneas default for arguments of process functions [#2582]Implement the new
calcfunctiondecorator. [#2203]Each profile now has its own daemon that can be run completely independently in parallel [#1217]
Polling based daemon has been replaced with a much faster event-based daemon [#1067]
Replaced
CelerywithCircusas the daemonizer of the daemon [#1213]The daemon can now be stopped without loading the database, making it possible to stop it even if the database version does not match the code [#1231]
Implement exponential backoff retry mechanism for transport tasks [#1837]
Pause
CalcJobwhen transport task falls through exponential backoff [#1903]Separate
CalcJobsubmit task in folder upload and scheduler submit [#1946]Each daemon worker now respects an optional minimum scheduler polling interval [#1929]
Make the
execmanager.retrieve_calculationidempotent’ish [#3142]Make the
execmanager.upload_calculationidempotent’ish [#3146]Make the
execmanager.submit_calculationidempotent’ish [#3188]Implement a
PluginVersionProviderfor processes to automatically add versions ofaiida-coreand plugin to process nodes [#3131]
Processes#
Implement the
ProcessBuilderwhich simplifies the definition ofProcessinputs and the launching of aProcess[#1116]Namespaces added to the port containers of the
ProcessSpecclass [#1099]Convention of leading underscores for non-storable inputs is replaced with a proper
non_dbattribute of thePortclass [#1105]Implement a Sphinx extension for the
WorkChainclass to automatically generate documentation from the workchain definition [#1155]WorkChains can now expose the inputs and outputs of anotherWorkChain, which is great for writing modular workflows [#1170]Add built-in support and API for exit codes in
WorkChains [#1640], [#1704], [#1681]Implement method for
CalcJobNodeto create a restart builder [#1962]Add
CalculationToolsbase and entry pointaiida.tools.calculations[#2331]Generalize Sphinx workchain extension to processes [#3314]
Collapsible namespace in sphinxext [#3441]
The
retrieve_singlefile_listhas been deprecated and is replaced byretrieve_temporary_list[#3041]Automatically set
CalcInfo.uuidinCalcJob.run[#2874]Allow the usage of lambda functions for
InputPortdefault values [#3465]
ORM#
Implementat
AuthInfoclass which allows custom configuration per configured computer [#1184]Add efficient
countmethod foraiida.orm.groups.Group[#2567]Speed up creation of Nodes in the AiiDA ORM [#2214]
Enable use of tuple in
QueryBuilder.appendfor all ORM classes [#1608], [#1607]Refactor the ORM to have explicit front-end and back-end layers [#2190][#2210][#2225][#2227][#2481]
Add support for indexing and slicing in
orm.Group.nodesiterator [#2371]Add support for process classes to QueryBuilder.append [#2421]
Change type of uuids returned by the QueryBuilder to unicode [#2259]
The
AttributeDictis now constructed recursively for nested dictionaries [#3005]Ensure immutability of
CalcJobNodehash before and after storing [#3130]Fix bug in the
RemoteData._cleanmethod [#1847]Fix bug in
QueryBuilder.first()for multiple projections [#2824]Fix bug in
delete_nodeswhen passing pks of non-existing nodes [#2440]Remove unserializable data from metadata in
Logrecords [#2469]
Data#
Fix bug in
parse_formulafor formulas with leading or trailing whitespace [#2186]Refactor
Orbitalcode and fix some bugs [#2737]Fix bug in the
storemethod ofCifDatawhich would raise an exception when called more than once [#1136]Allow passing directory path in
FolderDataconstructor [#3359]Add element
Xto the elements list in order to support unknown species [#1613]Various bug and consistency fixes for
CifDataandStructureData[#2374]Changes to
Dataclass attributes andTrajectoryDatadata storage [#2310][#2422]Rename
ParameterDatatoDict[#2530]Remove the
FrozenDictdata sub class [#2532]Remove the
Errordata sub class [#2529]Make
Codea real sub class ofData[#2193]Implement the
has_atomic_sitesandhas_unknown_speciesproperties for theCifDataclass [#1257]Change default library used in
_get_aiida_structure(convertingCifDatatoStructureData) fromasetopymatgen[#1257]Add converter for
UpfDatafrom UPF to JSON format [#3308]Fix potential inefficiency in
aiida.tools.data.cifconverters [#3098]Fix bug in
KpointsData.reciprocal_cell()[#2779]Improve robustness of parsing versions and element names from UPF files [#2296]
Verdi command line interface#
Migrate
verdito the click infrastructure [#1795]Add a default user to AiiDA configuration, eliminating the need to retype user information for every new profile [#2734]
Implement tab-completion for profile in the
-poption ofverdi[#2345]Homogenize the interface of
verdi quicksetupandverdi setup[#1797]Add the option
--versiontoverdito display current version [#1811]verdi computer configurecan now read inputs from a yaml file through the--configoption [#2951]
External database importers#
Database#
Add an index to columns of
DbLinkfor SqlAlchemy [#2561]Creating unique constraint and indexes at the
db_dbgroup_dbnodestable for SqlAlchemy [#1680]Performance improvement for adding nodes to group [#1677]
Make UUID columns unique in SqlAlchemy [#2323]
Allow PostgreSQL connections via unix sockets [#1721]
Drop the unused
nodeversionandpubliccolumns from the node table [#2937]Drop various unused columns from the user table [#2944]
Drop the unused
transport_paramscolumn from the computer table [#2946]Drop the
DbCalcStatetable [#2198][Django]: migrate the node attribute and extra schema to use JSONB, greatly improving storage and querying efficiency [#3090]
[SqlAlchemy]: Improve speed of node attribute and extra deserialization [#3090]
Export and Import#
Implement the exporting and importing of node extras [#2416]
Implement the exporting and importing of comments [#2413]
Implement the exporting and importing of logs [#2393]
Add
export_parametersto themetadata.jsonin archive files [#3386]Simplify the data format of export archives, greatly reducing file size [#3090]
verdi importautomatically migrates archive files of old formats [#2820]
Miscellaneous#
Refactor unit test managers and add basic fixtures for
pytest[#3319]REST API v4: updates to conform with
aiida-core==1.0.0[#3429]Improve decorators using the
wraptlibrary such that function signatures are properly maintained [#2991]Allow empty
enabledanddisabledkeys in caching configuration [#3330]AiiDA now enforces UTF-8 encoding for text output in its files and databases. [#2107]
Backwards-incompatible changes (only a sub-set)#
Remove
aiida.testsand obsoleteaiida.storage.tests.test_parsersentry point group [#2778]Implement new link types [#2220]
Rename the type strings of
Groupsand change the attributesnameandtypetolabelandtype_string[#2329]Make various protected
Nodemethods public [#2544]Rename
DbNode.typetoDbNode.node_type[#2552]Rename the ORM classes for
Nodesub classesJobCalculation,WorkCalculation,InlineCalculationandFunctionCalculation[#2184][#2189][#2192][#2195][#2201]Do not allow the
copyordeepcopyofNode, except forDatanodes [#1705]Remove
aiida.controlandaiida.utilstop-level modules; reorganizeaiida.common,aiida.manageandaiida.tools[#2357]Make the node repository API backend agnostic [#2506]
Redesign the Parser class [#2397]
[Django]: Remove support for datetime objects from node attributes and extras [#3090]
Enforce specific precision in
clean_valuefor floats when computing a node’s hash [#3108]Move physical constants from
aiida.common.constantsto externalqe-toolspackage [#3278]Add type checks to all plugin factories [#3456]
Disallow pickle when storing numpy array in
ArrayData[#3434]Remove implementation of legacy workflows [#2379]
Implement
CalcJobprocess class that replaces the deprecatedJobCalculation[#2389]Change the structure of the
CalcInfo.local_copy_list[#2581]QueryBuilder: Change ‘ancestor_of’/’descendant_of’ to ‘with_descendants’/’with_ancestors’ [#2278]
v0.12.3#
Improvements#
Fast addition of nodes to groups with
skip_orm=True[#2471]Add
environment.ymlfor installing dependencies using conda; release ofaiida-coreon conda-forge channel [#2081]REST API: io tree response now includes link type and node label [#2033] [#2511]
Backport postgres improvements for quicksetup [#2433]
Backport
aiida.get_strict_version(for plugin development) [#2099]
Minor bug fixes#
Fix security vulnerability by upgrading
paramikoto2.4.2[#2043]Disable caching for inline calculations (broken since move to
workfunction-based implementation) [#1872]Let
verdi helpreturn exit status 0 [#2434]Decode dict keys only if strings (backport) [#2436]
Remove broken verdi-plug entry point [#2356]
verdi node delete(without arguments) no longer tries to delete all nodes [#2545]Fix plotting of
BandsDataobjects [#2492]
v0.12.2#
Improvements#
Minor bug fixes#
Make exported graphs consistent with the current node and link hierarchy definition [#1764]
Fix link import problem under SQLA [#1769]
Fix bug in mixins.py when copying node [#1743]
Fix pgtest failures (release-branch) on travis [#1736]
Fix plugin: return testrunner result to fail on travis, when tests don’t pass [#1676]
v0.12.1#
Improvements#
Always use a bash login shell to execute all remote SSH commands, overriding any system default shell [#1502]
Reduced the size of the distributed package by almost half by removing test fixtures and generating the data on the fly [#1645]
Removed the explicit dependency upper limit for
scipy[#1492]Resolved various dependency requirement conflicts [#1488]
v0.12.0#
Improvements#
Hashing, caching and fast-forwarding [#652]
Calculation no longer stores full source file [#1082]
Delete nodes via
verdi node delete[#1083]Import structures using ASE [#1085]
StructureData-pymatgen-StructureDataroundtrip works for arbitrary kind names [#1285] [#1306] [#1357]Output format of archive file can now be defined for
verdi export migrate[#1383]Automatic reporting of code coverage by unit tests has been added [#1422]
Critical bug fixes#
Minor bug fixes#
Miscellaneous#
Bump
qe-toolsversion [#1090]Document link types [#1174]
Switch to trusty + postgres 9.5 on Travis [#1180]
Use raw SQL in sqlalchemy migration of
Code[#1291]Document querying of list attributes [#1326]
Document running
aiidaas a daemon service [#1445]Document that Torque and LoadLever schedulers are now fully supported [#1447]
Cookbook: how to check the number of queued/running jobs in the scheduler [#1349]
v0.11.4#
v0.11.3#
Improvements#
Critical bug fixes#
FINISHED_KEYandFAILED_KEYvariables were not known toAbstractCalculation[#1314]
Minor bug fixes#
v0.11.2:#
v0.11.1:#
Improvements#
Critical bug fixes#
v0.11.0:#
Improvements#
Core entities#
Computer: the shebang line is now customizable [#940]KpointsData: deprecate buggy legacy implementation of k-point generation in favor of Seekpath [#1015]Dict:to_aiida_typeused on dictionaries now automatically converted toDict[#947]JobCalculation: parsers can now specify files that are retrieved locally for parsing, but only temporarily, as they are deleted after parsing is completed [#886] [#894]
Plugins#
Verdi#
Miscellaneous#
Supervisor removal: dependency on unix-only supervisor package removed [#790]
REST API: add server info endpoint, structure endpoint can return different file formats [#878]
REST API: update endpoints for structure visualization, calculation (includes retrieved input & output list), add endpoints for
UpfDataand more [#977] [#991]Tests using daemon run faster [#870]
Documentation: updated outdated workflow examples [#948]
Documentation: updated import/export [#994],
Documentation: plugin quickstart [#996],
Documentation: parser example [#1003]
Minor bug fixes#
v0.10.1:#
Improvements#
Improved exception handling for loading db tests [#968]
verdi work killon workchains: skip calculation if it cannot be killed, rather than stopping [#980]Remove unnecessary INFO messages of Alembic for SQLAlchemy backend [#1012]
Add filter to suppress unnecessary log messages during testing [#1014]
Critical bug fixes#
v0.10.0:#
Major changes#
The
DbPathtable has been removed and replaced with a dynamic transitive closure, because, among others, nested workchains could lead to theDbPathtable exploding in sizeCode plugins have been removed from
aiida-coreand have been migrated to their own respective plugin repositories and can be found here:Each can be installed from
pipusing e.g.pip install aiida-quantumespresso. Existing installations will require a migration (see update instructions in the documentation). For a complete overview of available plugins you can visit the registry.
Improvements#
A new entry
retrieve_temporary_listinCalcInfoallows to retrieve files temporarily for parsing, while not having to store them permanently in the repository [#903]New verdi command:
verdi work killto kill running workchains [#821]New verdi command:
verdi data remote [ls,cat,show]to inspect the contents ofRemoteDataobjects [#743]New verdi command:
verdi export migrateallows the migration of existing export archives to new formats [#781]New verdi command:
verdi profile delete[#606]Implemented a new option
-mfor theverdi work reportcommand to limit the number of nested levels to be printed [#888]Added a
runningfield to the output ofverdi work listto give the current state of the workchains [#888]Implemented faster query to obtain database statistics [#738]
Added testing for automatic SqlAlchemy database migrations through alembic [#834]
Exceptions that are triggered in steps of a
WorkChainare now properly logged to theNodemaking them visible throughverdi work report[#908]
Critical bug fixes#
Export will now write the link types to the archive and import will properly recreate the link [#760]
Fix bug in workchain persistence that would lead to crashed workchains under certain conditions being resubmitted [#728]
Fix bug in the pickling of
WorkChaininstances containing an_iflogical block in the outline [#904]
Minor bug fixes#
The logger for subclasses of
AbstractNodeis now properly namespaced toaiida.such that it works in plugins outside of theaiida-coresource tree [#897]Fixed a problem with the states of the direct scheduler that was causing the daemon process to hang during submission [#879]
Various bug fixes related to the old workflows in combination with the SqlAlchemy backend [#889] [#898]
Fixed bug in
TCODexporter[#761]verdi profile deletenow respects the configureddbportsetting [#713]Restore correct help text for
verdi --help[#704]Fixed query in the ICSD importer element that caused certain structures to be erroneously skipped [#690]
Miscellaneous#
Added a “quickstart” to plugin development in the documentation, structured around the new plugintemplate [#818]
Improved and restructured the developer documentation [#818]
v0.9.1:#
Critical bug fixes#
Workchain steps will no longer be executed multiple times due to process pickles not being locked
Minor bug fixes#
Fix arithmetic operations for basic numeric types
Fixed
verdi calculation cleanworkdirafter changes inQueryBuildersyntaxFixed
verdi calculation logshowexception when called forWorkCalculationnodesFixed
verdi importfor SQLAlchemy profilesFixed bug in
reentryand update dependency requirement tov1.0.2Made octal literal string compatible with python 3
Fixed broken import in the ASE plugin
Improvements#
verdi calculation shownow properly distinguishes betweenWorkCalculationandJobCalculationnodesImproved error handling in
verdi setup --non-interactiveDisable unnecessary console logging for tests
v0.9.0#
Data export functionality#
A number of new functionalities have been added to export band structures to a number of formats, including: gnuplot, matplotlib (both to export a python file, and directly PNG or PDF; both with support of LaTeX typesetting and not); JSON; improved agr (xmgrace) output. Also support for two-color bands for collinear magnetic systems. Added also possibility to specify export-format-specific parameters.
Added method get_export_formats() to know available export formats for a given data subclass
Added label prettifiers to properly typeset high-symmetry k-point labels for different formats (simple/old format, seekpath, …) into a number of plotting codes (xmgrace, gnuplot, latex, …)
Improvement of command-line export functionality (more options, possibility to write directly to file, possibility to pass custom options to exporter, by removing its DbPath dependency)
Workchains#
Crucial bug fix: workchains can now be run through the daemon, i.e. by using
aiida.work.submitEnhancement: added an
abortandabort_nowaitmethod toWorkChainwhich allows to abort the workchain at the earliest possible momentEnhancement: added the
reportmethod toWorkChain, which allows a workchain developer to log messages to the databaseEnhancement: added command
verdi work reportwhich for a givenpkreturns the messages logged for aWorkChainthrough thereportmethodEnhancement: workchain inputs ports with a valid default specified no longer require to explicitly set
required=Falsebut is overriden automatically
New plugin system#
New plugin system implemented, allowing to load aiida entrypoints, and working in parallel with old system (still experimental, though - command line entry points are not fully implemented yet)
Support for the plugin registry
Code refactoring#
Refactoring of
Nodeto move as much as possible of the caching code into the abstract classRefactoring of
Datanodes to have the export code in the topmost class, and to make it more general also for formats exporting more than one fileRefactoring of a number of
Datasubclasses to support the new export APIRefactoring of
BandsDatato have export code not specific to xmgrace or a given format, and to make it more general
Documentation#
General improvements to documentation
Added documentation to upgrade AiiDA from v0.8.0 to v0.9.0
Added documentation of new plugin system and tutorial
Added more in-depth documentation on how to export data nodes to various formats
Added explanation on how to export band structures and available formats
Added documentation on how to run tests in developer’s guide
Documented Latex requirements
Updated WorkChain documentation for
WaitingEquationOfStateexampleUpdated AiiDA installation documentation for installing virtual environment
Updated documentation to use Jupyter
Enhancements#
Speedups the travis builds process by caching pip files between runs
Node can be loaded by passing the start of its UUID
Handled invalid verdi command line arguments; added help texts for same
upgraded
Paramikoto 2.1.2 and avoided to create empty file when remote connection is failedverdi calculation killcommand is now available forSGE pluginUpdated
Plumfrom 0.7.8 to 0.7.9 to create a workchain inputs that had default value and evaluated to falseNow QueryBuilder will be imported by default for all verdi commands
Bug Fixes#
Bug fixes in QE input parser
Code.get() method accepts the pk in integer or string format whereas Code.get_from_string() method accepts pk only in string format
verdi code showcommand now shows the description of the codeBug fix to check if computer is properly configured before submitting the calculation
Miscellaneous#
Replacing dependency from old unmantained
pyspglibto newspglibAccept BaseTypes as attributes/extras, and convert them automatically to their value. In this way, for instance, it is now possible to pass a
Int,Float,Str, … as value of a dictionary, and store all into aDict.Switch from
pkg_resourcesto reentry to allow for much faster loading of modules when possible, and therefore allowing for good speed for bash completionRemoved obsolete code for Sqlite
Removed
mayavi2package from dependencies
v0.8.1#
Exporters#
Upgraded the TCODExporter to produce CIF files, conforming to the newest (as of 2017-04-26) version of cif_tcod.dic.
General#
Added dependency on six to properly re-raise exceptions
v0.8.0#
Installation and setup#
Simplified installation procedure by adopting standard python package installation method through setuptools and pip
Verdi install replaced by verdi setup
New verdi command
quicksetupto simplify the setup procedureSignificantly updated and improved the installation documentation
General#
Significantly increased test coverage and implemented for both backends
Activated continuous integration through Travis CI
Application-wide logging is now abstracted and implemented for all backends
Added a REST API layer with hook through verdi cli:
verdi restapiImproved
QueryBuilderComposition model instead of inheritance removing the requirement of determining the implementation on import
Added keyword
with_dbpaththat makesQueryBuilderswitch between using theDbPathand not using it.Updated and improved documentation
The QueryTool as well as the
class Node.query()method are now deprecated in favor of theQueryBuilderMigration of verdi cli to use the
QueryBuilderin order to support both database backendsAdded option
--projecttoverdi calculation listto specify which attributes to print
Documentation#
Documentation is restructured to improve navigability
Added pseudopotential tutorial
Database#
Dropped support for MySQL and SQLite to fully support efficient features in Postgres like JSONB fields
Database efficiency improvements with orders of magnitude speedup for large databases [added indices for daemon queries and node UUID queries]
Replace deprecated
commit_on_successwith atomic for Django transactionsChange of how SQLAlchemy internally uses the session and the engine to work also with forks (e.g. in celery)
Workflows#
Finalized the naming for the new workflow system from
workflows2toworkFragmentedWorkFunctionis replaced byWorkChainInlineCalculationis replaced byWorkfunctionProcessCalculationis replaced byWorkCalculation
Old style Workflows can still be called and run from a new style
WorkChainMajor improvements to the
WorkChainandWorkfunctionimplementationImprovements to
WorkChainImplemented a
returnstatement forWorkChainspecificationLogging to the database implemented through
WorkChain.report()for debugging
Improved kill command for old-style workflows to avoid steps to remaing in running state
Plugins#
Added finer granularity for parsing PW timers in output
New Quantum ESPRESSO and scheduler plugins contributed from EPFL
ASE/GPAW plugins: Andrea Cepellotti (EPFL and Berkeley)
Quantum ESPRESSO DOS, Projwfc: Daniel Marchand (EPFL and McGill)
Quantum ESPRESSO phonon, matdyn, q2r, force constants plugins: Giovanni Pizzi, Nicolas Mounet (EPFL); Andrea Cepellotti (EPFL and Berkeley)
Quantum ESPRESSO cp.x plugin: Giovanni Pizzi (EPFL)
Quantum ESPRESSO neb.x plugin: Marco Gibertini (EPFL)
LSF scheduler: Nicolas Mounet (EPFL)
Implemented functionality to export and visualize molecular dynamics trajectories (using e.g. matplotlib, mayavi)
Improved the TCODExporter (some fixes to adapt to changes of external libraries, added some additional TCOD CIF tags, various bugfixes)
Various fixes and improvements#
Fix for the direct scheduler on Mac OS X
Fix for the import of computers with name collisions
Generated backup scripts are now made profile specific and saved as
start_backup_<profile>.pyFix for the vary_rounds warning
v0.7.1#
Functionalities#
Implemented support for Kerberos authentication in the ssh transport plugin.
Added
_get_submit_script_footerto scheduler base class.Improvements of the SLURM scheduler plugin.
Fully functional parsers for Quantumespresso CP and PW.
Better parsing of atomic species from PW output.
Array classes for projection & xy, and changes in kpoints class.
Added codespecific tools for Quantumespresso.
verdi code listnow shows local codes too.verdi exportcan now export non user-defined groups (from their pk).
Fixes#
Fixed bugs in (old) workflow manager and daemon.
Improvements of the efficiency of the (old) workflow manager.
Fixed JobCalculation text prepend with multiple codes.
v0.7.0#
This release introduces a lot and significant changes & enhancements.
We worked on our new backend and now AiiDA can be installed using SQLAlchemy too. Many of the verdi commands and functionalities have been tested and are working with this backend. The full JSON support provided by SQLAlchemy and the latest versions of PostgreSQL enable significant speed increase in attribute related queries. SQLAlchemy backend choice is a beta option since some last functionalities and commands need to be implemented or improved for this backend. Scripts are provided for the transition of databases from Django backend to SQLAlchemy backend.
In this release we have included a new querying tool called QueryBuilder. It is a powerfull tool
allowing users to write complex graph queries to explore the AiiDA graph database. It provides
various features like selection of entity properties, filtering of results, combination of entities
on specific properties as well as various ways to obtain the final result. It also provides the
users an abstract way to query their data without enforcing them to write backend dependent queries.
Last but not least we have included a new workflow engine (in beta version) which is available
through the verdi workflow2 command. The new workflows are easier to write (it is as close as
writing python as possible), there is seamless mixing of short running tasks with long running
(remote) tasks and they encourage users to write reusable workflows. Moreover, debugging of
workflows has been made easier and it is possible both in-IDE and through logging.
List of changes:#
Installation procedure works with SQLAlchemy backend too (SQLAlchemy option is still in beta).
Most of the verdi commands work with SQLAlchemy backend.
Transition script from Django schema of version 0.7.0 to SQLAlchemy schema of version 0.7.0.
AiiDA daemon redesigned and working with both backends (Django & SQLAlchemy).
Introducing new workflow engine that allows better debugging and easier to write workflows. It is available under the
verdi workflows2command. Examples are also added.Old workflows are still supported and available under the “verdi workflow” command.
Introducing new querying tool (called
QueryBuilder). It allows to easily write complex graph queries that will be executed on the AiiDA graph database. Extensive documentation also added.Unifying behaviour of verdi commands in both backends.
Upped to version 0.4.2 of plum (needed for workflows2)
Implemented the validator and input helper for Quantum ESPRESSO pw.x.
Improved the documentation for the pw (and cp) input plugins (for all the flags in the Settings node).
Fixed a wrong behavior in the QE pw/cp plugins when checking for the parser options and checking if there were further unknown flags in the Settings node. However, this does not solve yet completely the problem (see issue #219).
Implemented validator and input helper for Quantum ESPRESSO pw.x.
Added elements with Z=104-112, 114 and 116, in
aiida.common.constants.Added method
set_kpoints_mesh_from_densityinKpointsDataclass.Improved incremental backup documentation.
Added backup related tests.
Added an option to
test_pw.pyto run also in serial.SSH transport, to connect to remote computers via SSH/SFTP.
Support for the SGE and SLURM schedulers.
Support for Quantum ESPRESSO Car-Parrinello calculations.
Support for data nodes to store electronic bands, phonon dispersion and generally arrays defined over the Brillouin zone.
v0.6.0#
We performed a lot of changes to introduce in one of our following releases a second object-relational mapper (we will refer to it as back-end) for the management of the used DBMSs and more specifically of PostgreSQL. SQLAlchemy and the latest version of PostgreSQL allows AiiDA to store JSON documents directly to the database and also to query them. Moreover the JSON query optimization is left to the database including also the use of the JSON specific indexes. There was major code restructuring to accommodate the new back-end resulting to abstracting many classes of the orm package of AiiDA.
Even if most of the needed restructuring & code addition has been finished, a bit of more work is needed. Therefore even in this version, Django is the only available back-end for the end user.
However, the users have to update their AiiDA configuration files by executing the migration file
that can be found at YOUR_AIIDA_DIR/aiida/common/additions/migration.py as the Linux user that
installed AiiDA in your system.
(e.g. python YOUR_AIIDA_DIR/aiida/common/additions/migration.py)
List of changes:#
Back-end selection (Added backend selection). SQLAlchemy selection is disabled for the moment.
Migration scripts for the configuration files of AiiDA (SQLAlchemy support).
Enriched link description in the database (to enrich the provenance model).
Corrections for numpy array and cell. List will be used with cell.
Fixed backend import. Verdi commands load as late as possible the needed backend.
Abstraction of the basic AiiDA orm classes (like node, computer, data etc). This is needed to support different backends (e.g. Django and SQLAlchemy).
Fixes on the structure import from QE-input files.
SQLAlchemy and Django benchmarks.
UltraJSON support.
requirements.txt now also include SQLAlchemy and its dependencies.
Recursive way of loading JSON for SQLAlchemy.
Improved way of accessing calculations and workflows attached to a workflow step.
Added methods to programmatically create new codes and computers.
v0.5.0#
General#
Final paper published, ref: G. Pizzi, A. Cepellotti, R. Sabatini, N. Marzari, and B. Kozinsky, AiiDA: automated interactive infrastructure and database for computational science, Comp. Mat. Sci 111, 218-230 (2016)
Core, concrete, requirements kept in
requirements.txtand optionals moved tooptional_requirements.txtSchema change to v1.0.2: got rid of
calc_states.UNDETERMINED
Import/export, backup and code interaction#
[non-back-compatible] Now supporting multiple codes execution in the same submission script. Plugin interface changed, requires adaptation of the code plugins.
Added import support for XYZ files
Added support for van der Waals table in QE input
Restart QE calculations avoiding using scratch using copy of parent calc
Adding database importer for NNIN/C Pseudopotential Virtual Vault
Implemented conversion of pymatgen Molecule lists to AiiDA’s TrajectoryData
Adding a converter from pymatgen Molecule to AiiDA StructureData
Queries now much faster when exporting
Added an option to export a zip file
Added backup scripts for efficient incremental backup of large AiiDA repositories
API#
Added the possibility to add any kind of Django query in Group.query
Added TCOD (Theoretical Crystallography Open Database) importer and exporter
Added option to sort by a field in the query tool
Implemented selection of data nodes and calculations by group
Added NWChem plugin
Change default behaviour of symbolic link copy in the transport plugins: “put”/”get” methods -> symbolic links are followed before copy; “copy” methods -> symbolic links are not followed (copied “as is”).
Schedulers#
Explicit Torque support (some slightly different flags)
Improved PBSPro scheduler
Added new
num_cores_per_machineandnum_cores_per_mpiproc fieldsfor pbs and torque schedulers (giving full support for MPI+OpenMP hybrid codes)Direct scheduler added, allowing calculations to be run without batch system (i.e. directly call executable)
verdi#
Support for profiles added: it allows user to switch between database configurations using the
verdi profilecommandAdded
verdi data structure import --file file.xyzfor importing XYZAdded a
verdi data upf exportfamilycommand (to export an upf pseudopotential family into a folder)Added new functionalities to the
verdi groupcommand (show list of nodes, add and remove nodes from the command line)Allowing verdi export command to take group PKs
Added ASE as a possible format for visualizing structures from command line
Added possibility to export trajectory data in xsf format
Added possibility to show trajectory data with xcrysden
Added filters on group name in
verdi group listAdded possibility to load custom modules in the verdi shell (additional property verdishell.modules created; can be set with
verdi devel setproperty verdishell.modules)Added
verdi data array showcommand, usingjson_dateserialization to display the contents ofArrayDataAdded
verdi data trajectory depositcommand line commandAdded command options
--computerand--codetoverdi data * depositAdded a command line option
--all-usersforverdi data * listto list objects, owned by all users