Changelog¶
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[0.3.0] - 2026-06-10¶
First PyPI release of the fork.
Fixed¶
- Repaired the breakage left behind by the spectral/ann/dists simplification:
restored imports and call sites (
pairwise_distancesnow delegated to scikit-learn, spectral initialization viaEigenDecomposition/LE), broke thekernels <-> spectral.eigencircular import, removed the deadgraph_kernelstate, and made the UoM path populateP_Z_/P_msZ_. - kNN graphs no longer silently drop genuine zero-distance neighbors
(duplicate points); off-diagonal zeros are clamped to a tiny positive float
so every row keeps exactly
kedges (both sklearn and HNSWlib backends).
Changed¶
- Deleted
topo.base.dists; the Euclidean gradient is delegated toumap.distances.euclidean_grad. - Runtime dependencies slimmed: Jupyter packages moved to the dev group;
hnswlibandpacmapare optional extras only ([ann],[layouts]), with corrected install hints.
Documentation¶
- API reference now covers the standalone building blocks (
compute_kernel,eigendecompose,LE,graph_laplacian,diffusion_operator,automated_scaffold_sizing, projection diagnostics). cknn_graphgained a full NumPy-style docstring with the Berry & Sauer reference. Example notebooks updated to the current API and re-synced with their jupytext sources.
Tests¶
- Added integration tests composing the standalone estimators outside
TopOGraph, plus a duplicate-point kNN regression test. Suite: 213 tests, ruff/mypy/pyright clean.
Packaging¶
- Renamed the distribution to
topometry-nosc(independently maintained fork) to avoid colliding with the upstreamtopometryproject on PyPI. The import package is stilltopo. Reset the version to0.1.0. - Added the
py.typedmarker so the declaredTyping :: Typedsupport is honoured by downstream type checkers (PEP 561). - Set fork authorship/maintainership, repointed project URLs to the fork (with
an "Original project" link to upstream), and fork-ified
CITATION.cffto cite this fork while referencing the original TopOMetry software and paper. - Migrated the build backend to Hatchling with dynamic versioning sourced
from
src/topo/version.py. - Adopted a src-layout (
src/topo/) so tests run against the installed package. - Completed project metadata: real description, authors/maintainers, SPDX
license, classifiers, keywords and project URLs. - Slimmed the core dependencies to numpy/scipy/scikit-learn/numba/tqdm.
Moved plotting, dataframe and third-party layout/ANN dependencies into
optional extras:
plot,pandas,ann,layouts,notebooks, andall.
Documentation¶
- Documented the entire public API to a single NumPy-convention standard, added
type hints across public signatures, and enabled ruff
D(pydocstyle) lint enforcement to keep docstrings consistent.
Changed¶
- Split the monolithic
TopOGraph(≈1370 → ≈750 lines) into focused mixins undertopo._pipeline(GraphBuildMixin,EigenBuildMixin,LayoutBuildMixin), mirroring the existingUoMMixinpattern. Public API, attributes and method-resolution order are unchanged. - Centralised optional-dependency and ANN-backend detection in
topo._optional(single source of truth replacing duplicated_have_*flags). Missing optional dependencies now raise a clearpip install topometry-nosc[<extra>]hint instead of a raw traceback. - Replaced
print()calls in library code with thetopologger hierarchy; verbosity now maps onto log levels viatopo.configure_logging. IntrinsicDim.transformis now a clean no-op for scikit-learn compatibility (previously printed a placeholder message); invalidrandom_statevalues now raiseTypeError.
Tooling¶
- CI rewritten to use
uvwith a Python 3.10–3.13 matrix, plus ruff lint, ruff format check and a minimal-core import smoke test. - Added a tag-triggered release workflow (builds sdist + wheel; PyPI publishing stubbed and ready to enable).
- Added
Makefile,CONTRIBUTING.md, ruff/mypy/pytest/coverage configuration.
[2.0.0]¶
Removed¶
- Single-cell / scanpy / AnnData wrappers — TopoMetry is now a standalone geometry toolkit.
Notes¶
- Core API unchanged:
TopOGraph, spectral scaffolds, graph operators, layouts, metrics and plotting.