Releases#

Release Notes#

Version 0.4 (2026-02-03)#

Multi-GPU distributed training, CLI tool, and DataLoader integration.

Added#

  • Add TorchDR CLI for easy multi-GPU execution PR #233.

  • Add DistributedContext for multi-GPU distance computations PR #229.

  • Add multi-GPU affinity computations PR #217.

  • Add multi-GPU neighbor embedding PR #218.

  • Add distributed symmetrize sparse operations PR #219.

  • Add distributed support for neighborhood preservation metric PR #231.

  • Add DistributedPCA for multi-GPU PCA computation PR #248.

  • Add distributed support to PCA and ExactIncrementalPCA PR #253.

  • Add exact incremental PCA PR #213.

  • Add k-NN label accuracy metric PR #230.

  • Add k-means and neighborhood preservation evaluation scores PR #214.

  • Add IVF support in FAISS k-NN backend PR #220.

  • Add pairwise distances with query and key indexes PR #216.

  • Add DataLoader support for memory-efficient k-NN computation PR #236.

  • Add FAISS configuration options PR #208.

  • Add automatic releases via GitHub Actions PR #226.

  • Add cross-platform CI testing for macOS and Windows PR #258.

  • Add tests for CLI, distributed, and sparse modules PR #246.

Changed#

  • Rename SampledNeighborEmbedding to NegativeSamplingNeighborEmbedding PR #225.

  • Standardize device parameter to ‘auto’ default across all modules PR #241.

  • Refactor device management for consistency PR #211.

  • Improve memory management with torch buffers PR #203.

  • Optimize root_search with masked_scatter_ PR #204.

Fixed#

  • Fix memory leak in AffinityMatcher by freeing input data after initialization PR #223.

  • Fix PACMAP device handling PR #215.

  • Fix AffinityMatcher kwargs mutation PR #240.

  • Fix CLI port conflicts with –standalone flag PR #251.

  • Fix TSNEkhorn docstring parameter name PR #237.

  • Fix UMAP spectral init docstring PR #207.

  • Add warning when distributed launch detected without GPU PR #238.

Removed#

  • Remove clustering module PR #212.

  • Remove unnormalized affinity PR #209.

  • Remove use_float16 parameter from FaissConfig PR #228.

Documentation#

  • Add multi-GPU distributed training documentation PR #243.

  • Add DistributedPCA documentation PR #252.

  • Add DataLoader feature documentation PR #245.

  • Reorganize User Guide and API documentation PR #244.

  • Improve FAISS installation error detection and messages PR #227.

  • Fix documentation warnings and improve README PR #239.

Version 0.3 (2025-07-15)#

New algorithms (PHATE, PACMAP), torch.compile support, and Python 3.8+ compatibility.

Added#

  • Add PHATE algorithm PR #185.

  • Add PACMAP algorithm PR #182.

  • Add COSNE support for hyperbolic embeddings PR #178.

  • Add support for torch.compile PR #194.

  • Add direct gradient computation for neighbor embeddings PR #196.

  • Add support for any Torch optimizer or scheduler PR #174.

  • Add automatic duplicate handling PR #188.

Changed#

  • Optimize UMAP memory via direct gradient computation and edge masking PR #198.

  • Make affinity_out optional in AffinityMatcher PR #186.

  • Standardize logging across modules PR #187.

  • Enhance logging with timing information PR #193.

  • Align DRModule with scikit-learn API and improve type hints PR #191.

  • Reorganize affinity module structure PR #189.

  • Ensure compatibility with Python 3.8+ PR #173.

Fixed#

  • Fix PyKeOps and FAISS import errors PR #177.

  • Fix hyperbolic optimization without geoopt dependency PR #183.

  • Fix InfoTSNE docstring typo PR #184.

Version 0.2 (2025-02-07)#

FAISS support, incremental PCA, and improved developer tooling.

Added#

  • Add FAISS support for k-NN PR #160.

  • Add extensible k-NN backend system PR #159.

  • Add incremental PCA PR #137.

  • Add automatic fallback to KeOps backend on out-of-memory errors PR #130.

  • Add improved random seeding system PR #154.

  • Add CIFAR examples with DINOv2 features PR #158.

  • Add single-cell RNA-seq example with Census data PR #166.

  • Add pre-commit hooks for code quality PR #147.

  • Add code of conduct PR #127.

  • Add pull request template PR #125.

Changed#

  • Rename tol parameter to min_grad_norm PR #162.

  • Switch to Ruff for fast linting and formatting PR #151.

  • Improve citation style via sphinxcontrib-bibtex PR #143.

  • Set sparsity to True by default PR #156.

Fixed#

  • Fix clustering base methods PR #126.

  • Fix documentation consistency with bibliography PR #144.

Version 0.1 (2024-09-17)#

Initial release with core dimensionality reduction algorithms.

Added#

  • Add basic affinities: scalar product, Gaussian, and Student kernels.

  • Add k-NN normalized affinities: Self-tuning affinities and MAGIC.

  • Add doubly stochastic affinities with entropic and quadratic projections.

  • Add adaptive affinities with entropy control (entropic affinity) and symmetric version.

  • Add UMAP input and output affinities.

  • Add AffinityMatcher template for DR with gradient descent and custom affinities.

  • Add batched AffinityMatcher for efficient batch processing PR #12.

  • Add neighbor embedding methods: SNE, t-SNE, t-SNEkhorn, UMAP, LargeVis, InfoTSNE.

  • Add SampledNeighborEmbedding for efficient negative sampling PR #72.

  • Add template objects for neighbor embedding methods.

  • Add spectral embeddings via eigendecomposition of input affinity matrix.

  • Add Kernel PCA for nonlinear dimensionality reduction PR #41.

  • Add k-means clustering PR #111.

  • Add sparse affinity computations PR #70.

  • Add SparseAffinityMatcher PR #71.

  • Add transform method for affinities to apply to new data PR #69.

  • Add callable affinity objects PR #84.

  • Add pairwise symmetric distances with indices PR #75.

  • Add KeOps compatibility for all components except spectral embeddings.

  • Add silhouette score evaluation metric.

Changed#

  • Improve UMAP and LargeVis with stable attractive term PR #89.

  • Support affinity initialization from precomputed arrays PR #80.

  • Rename Gibbs affinity to Gaussian affinity PR #74.

  • Make PyKeOps an optional dependency PR #77.

Removed#

  • Remove SNEkhorn in favor of TSNEkhorn PR #90.