Skip to content

Releases: sbhattlab/phylo2vec

v1.7.0

26 Jan 16:18
32c31ba

Choose a tag to compare

This release adds new node depth calculation and Robinson-Foulds distance functions across Rust, Python, and R.

It also refactors the R package for better cross-language consistency, and updates CI/CD and documentation.

New Features

  • Added get_node_depth and get_node_depths functions across Rust, Python, and R APIs for calculating node depths in phylogenetic trees.
  • Added Robinson-Foulds distance calculation for tree comparison.
  • R API now supports matrix input for get_common_ancestor.

Fixes & Improvements

  • Refactored R package structure to align with Python organization.
  • Updated default Python version to 3.12.

Documentation Updates

  • Updated Python demo notebook with new features.
  • Added missing functions to API reference documentation.
  • Updated CLAUDE.md for Claude Code experiments.

What's Changed

  • Bump version in pixi.toml from 1.5.0 to 1.6.0 by @Neclow in #163
  • fix(cd): update macos 13-x86 --> macos 15-intel in Python CD by @Neclow in #165
  • chore(pixi): rename project --> workspace + remove template comments by @Neclow in #168
  • build(deps): bump the actions group with 2 updates by @dependabot[bot] in #167
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #166
  • feat(rs,py,r): add get_node_depth and get_node_depths functions by @Neclow in #171
  • feat(r): add matrix support for get_common_ancestor by @Neclow in #172
  • Update readme macos intel by @Neclow in #173
  • chore: sync all package versions to 1.7.0 by @Neclow in #175
  • refactor(r): Move functions to align with Python structure by @Neclow in #176
  • chore: update CLAUDE.md and add coverage files to gitignore by @Neclow in #177
  • chore: ignore joss secondary outputs by @Neclow in #178
  • feat: add Robinson-Foulds distance for tree comparison by @Neclow in #179
  • docs(py): update demo notebook with new features and add CI by @Neclow in #180
  • refactor(rs): fix linter warnings in distances.rs by @Neclow in #181
  • docs: add missing functions to API reference by @Neclow in #182
  • chore: update default Python to 3.12 by @Neclow in #183

Full Changelog: v1.6.0...v1.7.0

v1.6.0

25 Nov 08:32
2d6316f

Choose a tag to compare

This new release strengthens cross-language consistency, improves numerical robustness, and expands test coverage across Rust, Python, and R.

New Features

  • Rust now uses the ryu algorithm for fast and accurate float-to-string conversion.
  • Added find_num_leaves function to the R API.
  • Improved handling of scientific-notation floats in Rust’s remove_branch_lengths.
  • Reorganized and expanded R documentation and exported functions.

Fixes & Improvements

  • Numerous edge-case tests added across Rust, Python, and R to improve reliability.
  • Added round-trip tests for vector-to-Newick conversions.
  • Updated profiling/benchmarking scripts and expanded utility test coverage.
  • Bumped minimum Rust version to 1.82.
  • Python: relaxed NumPy requirement to allow <2.3.

Documentation Updates

  • JOSS paper: Extensive editorial updates to paper documentation, including ORCID additions, citation formatting, typo fixes, Oxford commas, and corrected author names.
  • Updated Fig. 1 and multiple paper-related assets to match the submitted manuscript.
  • Additional R documentation for Newick utilities.

What's Changed

  • test(rs): add more edge-case tests by @Neclow in #133
  • docs(paper): check + add missing ORCID by @Neclow in #134
  • docs: update citations + format middle names by @Neclow in #135
  • docs(paper): apply editorial suggestions by @Neclow in #138
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #136
  • docs(paper): more editorial fixes by @Neclow in #139
  • docs(paper): add missing issues and page numbers by @Neclow in #140
  • docs(paper): fix some BE typos + oxford commas by @Neclow in #141
  • docs(paper): fix author names in ola paper by @Neclow in #142
  • chore(rust): update min. rust version to 1.82 by @Neclow in #143
  • chore(py): allow numpy<2.3 by @Neclow in #144
  • feat(rs): use ryu float-to-string conversion by @Neclow in #145
  • chore(rs): update profiling and benchmarking scripts by @Neclow in #146
  • docs(paper): update fig1 to match submitted version by @Neclow in #147
  • fix(rs): make remove_branch_lengts work with sci floats by @Neclow in #148
  • test(py): add more util tests + cover more edge cases by @Neclow in #149
  • build(deps): bump prefix-dev/setup-pixi from 0.9.1 to 0.9.2 in the actions group by @dependabot[bot] in #150
  • test(rs): add roundtrip test for vector to newick by @Neclow in #151
  • feat(r): add find_num_leaves in R by @Neclow in #152
  • Edge cases graph rs by @Neclow in #154
  • test(r): increase R test coverage by @Neclow in #155
  • docs(r): add some extra docs in Newick utils by @Neclow in #156
  • refactor(r): add docs + reorganize exported functions by @Neclow in #157
  • build(deps): bump the actions group with 2 updates by @dependabot[bot] in #158
  • build(deps): bump prefix-dev/setup-pixi from 0.9.2 to 0.9.3 in the actions group by @dependabot[bot] in #160
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #161
  • build(deps): bump actions/checkout from 5 to 6 in the actions group by @dependabot[bot] in #162

Full Changelog: v1.5.0...v1.6.0

v1.5.0

08 Oct 13:59
8a4cefb

Choose a tag to compare

This release introduces new R features, Python 3.13 support, documentation updates, and a series of maintenance and CI improvements.


New Features

  • R Interface
    • Added remove_branch_lengths and remove_parent_labels functions.
  • Rust Backend
    • Updated rand to v0.9.2.
    • Added has_integer_labels.
  • Python
    • Upgraded from ete3 → ete4.
    • Added compatibility with Python 3.13.

Fixes & Improvements

  • CI: Added rustfmt installation for Rust 1.90.
  • Build: Disabled glob in pip install to improve MacOS compatibility.
  • Demo: Fixed section layout and corrected typos.
  • R CD: Improved release naming and renamed built R packages before upload.
  • Pre-commit & Dependencies: Multiple updates to hooks and GitHub Actions via Dependabot and CI bots.

Documentation Updates

  • README:
    • Added a subsection for reporting issues.
    • Included dataset download links and a new Data section.
  • Contributing:
    • Updated guidelines and API reference.

New Contributor

What's Changed

  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #100
  • build(deps): bump the actions group with 3 updates by @dependabot[bot] in #101
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #102
  • build(deps): bump the actions group with 2 updates by @dependabot[bot] in #103
  • chore: reduce word count in joss submission by @Neclow in #105
  • fix: fix sections in demo + typo by @Neclow in #104
  • feat(r): add remove_branch_lengths and remove_parent_labels to R by @Neclow in #106
  • Update ete3 to ete4 + add support for Python 3.13 by @Neclow in #108
  • docs(paper): update paper jats by @Neclow in #109
  • [JOSS Review] Disable glob in pip install to make it work on Mac by @tkchafin in #112
  • docs: Update contributing guidelines and API reference by @Neclow in #116
  • chore(r): update R CD to add OSs in release names by @Neclow in #117
  • chore(r): rename built R packages before uploading by @Neclow in #118
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #114
  • build(deps): bump prefix-dev/setup-pixi from 0.9.0 to 0.9.1 in the actions group by @dependabot[bot] in #115
  • chore(rust): update rand to 0.9.2 + has_integer_labels by @Neclow in #110
  • fix(ci): add rustfmt install for rust 1.90 by @Neclow in #124
  • docs(paper): clarify paragraphs in paper + add compilation guidelines by @Neclow in #122
  • docs(readme): add small subsection in README for reporting issues by @Neclow in #125
  • docs(paper): move fig2 from joss to demo by @Neclow in #127
  • docs(paper): update author list by @Neclow in #128
  • docs(data): add download links for each dataset + data section in readme by @Neclow in #130
  • Doc data by @Neclow in #131
  • chore: bump versions for next release by @Neclow in #132

New Contributors

Full Changelog: v1.4.0...v1.5.0

v1.4.0

07 Aug 12:46
eb7a4cb

Choose a tag to compare

New Features

  • Introduced simple model registration and listing for optimization schemes. #72
  • Added benchmarks for base matrix operations. #79
  • Implemented variance-covariance (vcov) and precision matrix support; moved float operations to f64. #86
  • Added functions for working with incidence matrices. #89
  • Introduced an optimized O(n) implementation of order_cherries using parental indices. #94
  • Added a simple CLI interface for the Python API. #96
  • Reintroduced the unrooted argument for cophenetic distances. #98

Improvements & Refactoring

  • Major revamp of the Rust core to improve performance and structure. #82
  • Improved handling of edge cases for leaf sampling. #95

Dependency updates and CI maintenance:

  • prefix-dev/setup-pixi bumped from 0.8.8 to 0.8.14. #77, #92, #93

What's Changed

  • Add simple model registration/listing for optimisation schemes by @Neclow in #72
  • docs: update README and fig1 in joss draft by @Neclow in #73
  • docs(paper): update features paragraph by @Neclow in #74
  • docs(paper): proof-reading JOSS paper make summary less jargon-y, ensure wordcount < 1000 by @Neclow in #75
  • paper: fix dois and affiliations by @Neclow in #76
  • build(deps): bump prefix-dev/setup-pixi from 0.8.8 to 0.8.10 in the actions group by @dependabot[bot] in #77
  • feat: add benchmarks for base matrix operations by @Neclow in #79
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #78
  • Revamp rust core by @Neclow in #82
  • feat: vcov and precision matrices + move float ops to f64 by @Neclow in #86
  • feat: add incidence matrix functions by @Neclow in #89
  • Cleaning by @Neclow in #90
  • chore: update pre-commit hooks by @pre-commit-ci[bot] in #91
  • build(deps): bump prefix-dev/setup-pixi from 0.8.10 to 0.8.11 in the actions group by @dependabot[bot] in #92
  • build(deps): bump prefix-dev/setup-pixi from 0.8.11 to 0.8.14 in the actions group by @dependabot[bot] in #93
  • feat: O(n) order_cherries using parental indices by @Neclow in #94
  • refactor: handle n_leaves edge cases for sampling by @Neclow in #95
  • feat: add a simple CLI for the python API by @Neclow in #96
  • feat: re-add 'unrooted' argument to cophenetic distances by @Neclow in #98
  • chore: bump versions + cleaning by @Neclow in #99

Full Changelog: v1.3.1...v1.4.0

v1.3.1

11 Jun 18:52
e95ebf5

Choose a tag to compare

What's Changed

  • Add minimum working example of beagle likelihood calculation from a phylo2vec matrix
  • Fix optimisation and Queue Shuffle by @Neclow in #71

Full Changelog: v1.3.0...v1.3.1

v1.3.0

05 Jun 15:56
36fc7f4

Choose a tag to compare

New Features

  • Added GradME optimization to the Python optimization module.
  • Introduced a vector rerooting function (Python, ete3-based).
  • Moved and unified the common-ancestor implementation into Rust, now available in both Python and R.

Fixes & Improvements

  • Updated optimization classes and simplified Python hill-climbing optimization with a new result dataclass.
  • Refactored queue shuffling logic into the Rust core and removed redundant Python code.
  • Renamed the shuffle argument in QS for clearer semantics.
  • Improved demo functions and fixed matrix input handling in pairwise_distances.
  • Added Python functional tests for pairwise_distances.

Documentation Updates

  • Updated paper text to incorporate the new matrix formulation.
  • Added an explainer in the demo and improved general documentation clarity.

What's Changed

  • docs: update demo and fix matrix input in pairwise_distances by @Neclow in #55
  • CD (R): make binary installation work with other Ubuntu versions (non-latest) by @Neclow in #56
  • test(python): add functional test for pairwise_distances + minor change in demo by @Neclow in #57
  • docs: update paper with new matrix formulation + add explainer in demo by @Neclow in #58
  • feat(rust): move python's common ancestor to Rust + make available to R by @Neclow in #59
  • refactor(reorder_v): move queue shuffle to core, remove _reorder_bfs from py by @Neclow in #60
  • refactor: rename 'shuffle' argument in QS by @Neclow in #61
  • refactor(opt): update optimisation classes by @Neclow in #62
  • feat(py): add reroot function for a vector (ete3-based) by @Neclow in #63
  • refactor(py): simplify hc optimization; make an opt result dataclass by @Neclow in #64
  • feat(py): add GradME optimization in opt by @Neclow in #65

Full Changelog: v1.2.0...v1.3.0

v1.2.0

24 May 21:37

Choose a tag to compare

New Features

  • Added cophenetic distances from matrix format
  • Added all missing components for the R package
  • Conversion from v to "pairs" object and vice versa

Improvements & Refactoring

  • Rust:
    • Unified newick → matrix conversion
    • Make matrix formulation bijective
    • Moved label_mapping functions from Python to Rust + make them more robust
    • Simplified get_cherries functions
    • Ensured consistent output in order_cherries functions
  • Python
    • Improved IO validation and added more tests
  • R:
    • Fix rextendr installation in the R in the CD workflow (install it as a non-CRAN package)

What's Changed

  • refactor: unify newick --> matrix conversion in rust and tests in python by @Neclow in #32
  • feat: cophenetic distances from matrix format by @Neclow in #34
  • From pairs (and a bit of cleaning) by @Neclow in #35
  • chore: bump python version by @Neclow in #36
  • Vector for r by @Neclow in #37
  • refactor: consistent output in order_cherries functions by @Neclow in #38
  • fix(rust): make matrix formulation bijective by @Neclow in #41
  • feat(r): add all base+utils in components for the R package by @Neclow in #43
  • refactor: move label_mapping functions to rust and make them more robust by @Neclow in #44
  • refactor(rust): simplify get cherries by @Neclow in #45
  • feat(r): add IO ops for R (+ minor touch to py reader) by @Neclow in #47
  • Fix CD pipeline for R by @Neclow in #54
  • refactor(python): simplify io validation + add more tests by @Neclow in #46

Full Changelog: v1.1.1...v1.2.0

v1.1.1

14 May 13:59
c4b4756

Choose a tag to compare

Minor patch to fix edge conversion and add more tests for conversion from Phylo2Vec vectors to other objects (edges, ancestry).

What's Changed

  • fix: exclude joss from pre-commit CI by @Neclow in #28
  • chore: update names in paper/readme/citation by @Neclow in #30
  • fix/py-phylo2vec: rust binding call in to_edges by @Neclow in #31

Full Changelog: v1.1.0...v1.1.1

v1.1.0

13 May 12:46

Choose a tag to compare

New Features

  • Added conversion from a vector representation to an edge list, enabling easier interoperability with other tools.

Fixes & Improvements

  • Improved performance of Newick tree construction, resulting in faster serialization.
  • Corrected a typo in the demo.

New Contributors

  • @msuchard made their first contribution — welcome!

What's Changed

New Contributors

Full Changelog: v1.0.0...v1.1.0

v1.0.0

01 May 17:54
a783667

Choose a tag to compare

This major version introduces a new Rust core with Python/R bindings, delivering performance and usability improvements.

Core Architecture

  • Rust-powered core for high-performance phylogenetic operations
  • Seamless bindings for both Python and R interfaces
  • Removed duplicate Python implementations in favor of optimized Rust logic (#15)

Key Features & Improvements

Performance

  • 50% faster Newick tree generation with optimized build_newick (#17)
  • Benchmark sample sizes increased to 10k-100k for more representative tests (#16)

Core Enhancements

  • Revamped Python API for better usability (#20)
  • Added new Rust core operations while removing Python duplicates (#15)
  • Fixed critical recursion error in to_matrix (#21)

Documentation

  • Updated demos and examples (#10, #23)
  • Improved README and CONTRIBUTING guides (#8, #14)

Maintenance & Fixes

  • Removed dead code (#13)
  • Fixed R's to_newick_from_vector (#18)
  • Resolved Clippy warnings (#11)

What's Changed

  • Release v1.0 Updates by @lsetiawan in #5
  • chore: Perform some detailed tweaks for README by @lsetiawan in #8
  • refactor: fix clippy warnings by @Neclow in #11
  • chore: remove dead code by @Neclow in #13
  • docs: fix links in CONTRIBUTING and add temporary README for opt by @Neclow in #14
  • feat: add extra core rust operations and remove python duplicates by @Neclow in #15
  • refactor: change benchmark sample sizes to 10k-100k by @Neclow in #16
  • 50% improvement on build_newick by @Neclow in #17
  • fix: to_newick --> to_newick_from_vector in R by @Neclow in #18
  • Revamp python API by @Neclow in #20
  • fix: fix to_matrix recursion error and tests by @Neclow in #21
  • feat: update demos! #10 by @Neclow in #23

New Contributors

Full Changelog: v0.1.12...v1.0.0