Changelog#

All notable changes to NeuroLang are documented here.

Contributors: when adding a change, add an entry under Unreleased using the format below, then move it to the appropriate version section when releasing.

Unreleased#

New features:

  • Declarative engine registry for the neurolang-query CLI. Engines are defined in YAML and initialised by pluggable Python modules under neurolang/utils/engines/. Includes --list-engines for discovery and --list-predicates showing declarative metadata without data download. (neurolang.utils.engine_registry, neurolang.utils.engines)

  • The existing NeuroSynth and Destrieux engines were refactored into the new declarative system. Engine init code moved from neurolang.utils.cli to neurolang.utils.engines.neurosynth.init and neurolang.utils.engines.destrieux.init.

  • neurolang-query --list-predicates no longer requires downloading data; predicate metadata is read from the YAML engine config.

  • Datalog init — engines can declare inline Datalog rules that run after the Python init via the datalog_init YAML field. Derived predicates can be defined without writing Python.

  • CSV/TSV relations — engines can load tabular data files as extensional predicates with the relations YAML field. Supported formats: .csv, .tsv, .csv.gz, .tsv.gz. Relation entries may include an optional description field for predicate metadata shown by --list-predicates. The file value may be a URL for automatic download.

  • Builtins — engines can declare builtins: [exp, log, startswith] in YAML to register known functions as callable symbols without Python.

  • Downloads — the downloads section fetches files from URLs (with optional archive extraction) before other init phases.

  • Probabilistic choices — engines can declare uniform probabilistic choices declaratively with probabilistic_choice: instead of calling add_uniform_probabilistic_choice_over_set in Python.

  • Ontology loading — the ontologies section loads OWL/RDF ontologies from URLs or local paths.

  • Atlases — engines can declare atlases: with nilearn atlas names (destrieux, schaefer, difumo) and parameters. Atlas regions are loaded as ExplicitVBR predicates before Datalog init rules.

  • Declarative migrationexp, log, startswith symbols now come from YAML builtins rather than base.py; the selected_study choice for the neurosynth engine is now declared in the engine YAML instead of Python init code; the destrieux predicate is now declared in the YAML atlases: section.

  • Base symbols — engines can set use_base_symbols: true in YAML to register common neuroimaging symbols (agg_count, agg_create_region, agg_create_region_overlay, principal_direction, region_union) automatically, without a Python init script. region_union was moved into init_base_engine() as part of this change.

  • YAML-only engines — the destrieux engine no longer needs a python_init module. It is now fully declarative, using use_base_symbols and the atlases: section. The neurolang/utils/engines/destrieux/init.py module was removed.

v0.0.1 (Alpha)#

Initial alpha release of NeuroLang.

New features:

  • Datalog-based logic programming frontend (NeurolangDL)

  • Probabilistic extensions with independent probabilistic facts (NeurolangPDL)

  • Tuple-generating dependencies (TGDs) for open-world reasoning

  • Aggregation support (COUNT, MAX, SUM, custom callables)

  • Neuroimaging integration: nibabel image loading, Destrieux atlas, NeuroSynth

  • Example gallery: Destrieux gyri, sulcal queries, NeuroSynth implementation

How to add a changelog entry#

Add entries under Unreleased in the following format:

Unreleased
----------

**New features:**

* Short description of the feature (`:class:` or `:func:` link if applicable)

**Bug fixes:**

* Short description of the bug and fix

**Breaking changes:**

* What changed and how to migrate