Releases: DaymudeLab/assembly-theory
v0.6.1
This minor release implements timeout functionality, references our new JOSS publication in the documentation, and fixes some GitHub Actions infrastructure.
Changelog
🚨 Breaking Changes
As part of implementing timeout functionality across all interfaces (by @jdaymude in #133), there are two breaking changes:
- Adds a new
--timeoutflag for the CLI,timeoutparameter forassembly::index_searchin the Rust crate, andtimeoutparameter forassembly_theory.index_searchin the Python package. Assembly index search runs normally iftimeout == Noneand otherwise stops aftertimeoutmilliseconds, returning the best upper bound on the assembly index found so far instead. - The
assembly::index_searchfunction and its Python counterpart now return anOption<usize>for the number of states searched instead of a straightusize. It is either the number of states searched orNoneif search times out.
📝 JOSS Publication
🤖 GitHub Actions
- Update deprecated macOS 13 GitHub Actions runner by @jdaymude in #134
- build: only run actions jobs on semver tags. by @AgentElement in #138
Full Changelog: v0.6.0...v0.6.1
joss-final
This release includes all source files, supporting scripts, and performance evaluations for our Journal of Open Source Software manuscript titled assembly-theory: Open, Reproducible Calculation of Assembly Indices.
It reflects the functionality of assembly-theory v0.6.0 and additionally includes a paper/ directory containing:
- Source files for our JOSS manuscript.
- A dedicated
READMEwith instructions for compiling the paper and reproducing our performance evaluations. - Submodules for
assembly_goandassemblycpp-v5, the other open-source methods for computing assembly indices. - Benchmark and analysis scripts for the manuscript's performance evaluations.
Below are the raw outputs of those performance evaluations (see the manuscript for details). They have been renamed to avoid ambiguity, but can still be analyzed by paper/benches/bench_stats.py as described in paper/README.md.
v0.6.0
This release implements a new bounding strategy following that of Seet et al., 2024 (GitHub), many under-the-hood optimizations, and improved documentation and usage instructions.
Changelog
🚨 Breaking Changes
- Match enumeration modes have been removed from all interfaces in favor of DAG-based enumeration in #121. This used to be listed as
--enumerateon the CLI andEnumerateModein the Rust crate. You may simply drop this option/parameter from any existing code to use the new version. - The memoization mode previously listed as
--memoize frags-indexon the CLI andMemoizeMode::FragsIndexin the Rust crate has been removed, as it is incompatible with the cache key optimization done in #119. Use--memoize canon-indexon the CLI orMemoizeMode::CanonIndexin the Rust crate instead. - Bounds that were not implemented yet, including
Bounds::CoverNoSort,Bounds::CoverSort, andBounds::CliqueBudgethave been removed from all interfaces. Previously, providing any of these options would cause a panic with an informative error message, but after differentiating bound types in #129, this error is no longer straightforward to catch.
⚡ Algorithm Improvements and Optimizations
- Refactor recursive assembly index search by @Garrett-Pz in #118
- Optimize keys of the memoization cache by @Garrett-Pz in #119
- Enumerate matches using a DAG by @Garrett-Pz in #121
- Add the MatchableEdges bounding strategy by @Garrett-Pz in #129
- Change parallel iterator to ParallelBridge by @Garrett-Pz in #130
📝 Documentation
- Add shields to repository README by @jdaymude in #117
- Improve documentation to address JOSS reviews by @jdaymude in #128
⚖️ Governance
Full Changelog: v0.5.1...v0.6.0
v0.5.1
This release contains everything from v0.5.0, plus a hotfix addressing:
- 🐍 Nondeterministic bound ordering in the Python interface.
- 🔨 The possibility for the GitHub CI to install the live PyPI version of
assembly-theoryinstead of the local version it's supposed to test.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
This release brings a modular reorganization of our entire codebase; a streamlined Python interface; complete and context-specific documentation across the repo, Rust crate, and Python package; and many new algorithmic features and improvements.
Changelog
🔨 Refactors
- Modularize top-down algorithm components by @jdaymude in #89
- Bring documentation up to date, refactor Python package by @jdaymude in #99
- Directly depend on nauty-Traces-sys instead of modified graph-canon by @AgentElement in #109
✔️ Tests & Benchmarks
- Split benchmarks into phases enabling granular timing insights by @jdaymude in #103
- Restore data files from Git LFS to standard git by @jdaymude in #111
⚡ Algorithm Improvements
- Implement depth-one parallelization by @jdaymude and @Garrett-Pz in #92
- Implement new enumeration variants by @jdaymude and @AgentElement in #94
- Canonize subgraphs only once (and remove ExtendIsomorphic enumeration) by @jdaymude in #98
- Fast canonicalization for subgraphs that are trees by @AgentElement in #101
- Memoize assembly states to avoid redundant recursive search by @Garrett-Pz in #95
- Parallelize canonization by @AgentElement in #106
Full Changelog: v0.4.0...v0.5.0
v0.3.0
What's Changed
- Overhaul reference datasets and test suite by @jdaymude in #65
- Noninduced subgraph enumeration by @AgentElement in #72
- Temporary fix for ground truth by @colemathis in #73
- Faster subgraph enumeration with VF3 by @AgentElement in #74
Full Changelog: v0.2.0...v0.3.0
v0.2.0
Initial release
- Molecular assembly index with bound selection
- RDKit interop, custom molfile parser
- Rust and Python libraries available on crates.io and PyPI