Releases: sbhattlab/phylo2vec
v1.7.0
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_depthandget_node_depthsfunctions 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
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_leavesfunction 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
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_lengthsandremove_parent_labelsfunctions.
- Added
- Rust Backend
- Updated
randto v0.9.2. - Added
has_integer_labels.
- Updated
- Python
- Upgraded from ete3 → ete4.
- Added compatibility with Python 3.13.
Fixes & Improvements
- CI: Added
rustfmtinstallation for Rust 1.90. - Build: Disabled
globinpip installto 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
- @tkchafin – contributed Mac installation fix ([#112](https://github.com/sbhattlab/phylo2vec/pull/
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
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:
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
v1.3.0
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
shuffleargument 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
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
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
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
- typo in demo by @msuchard in #24
- feat: add conversion from v to edge list by @Neclow in #25
- fix: speed-up build newick by @Neclow in #27
New Contributors
Full Changelog: v1.0.0...v1.1.0
v1.0.0
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
Maintenance & Fixes
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
- @dependabot made their first contribution in #7
- @pre-commit-ci made their first contribution in #9
- @Neclow made their first contribution in #11
Full Changelog: v0.1.12...v1.0.0