Skip to content

[MRG] Fix sparse simplex projection with oversized budgets - #876

Open
AHMETHAKANBEZIR1 wants to merge 2 commits into
PythonOT:masterfrom
AHMETHAKANBEZIR1:fix/sparse-simplex-oversized-budget
Open

AHMETHAKANBEZIR1 wants to merge 2 commits into
PythonOT:masterfrom
AHMETHAKANBEZIR1:fix/sparse-simplex-oversized-budget

Conversation

@AHMETHAKANBEZIR1

Copy link
Copy Markdown

Types of changes

Bug fix: one source line, one focused parametrized regression, and a release note.

Motivation and context / Related issue

Fixes #875. The documented behavior for max_nz greater than the projected dimension is ordinary simplex projection. Instead, the row slice only contains the actual width while the threshold index array has length max_nz, producing a broadcasting error. Cap the effective budget at the row width; axis=0 and axis=None inherit the fix through their existing recursion. Equal-width and smaller budgets retain their existing behavior.

How has this been tested

  • Built POT's native extensions from this source checkout using MSVC 2022, OpenMP, Cython and the repository's Eigen submodule on Windows/Python 3.12.
  • On unmodified master 98d09a1, the added regression yields 3 failures/3 controls with NumPy. Restoring that exact baseline function in memory in a second environment yields 6 failures/6 controls across NumPy and PyTorch CPU. No source file is altered by that baseline harness.
  • After the fix, the complete test/test_utils.py module passes: 120 tests in the NumPy environment; 182 tests (2 warnings) in the NumPy/PyTorch 2.10 CPU environment. Expected values are analytic simplex solutions, covering all three axis modes with budgets equal to or larger than the projected dimension.
  • Configured pre-commit hooks applicable to all three changed files pass; git diff --check passes. Hooks reporting no matching files are not counted as executed checks.
  • Focused Sphinx autodoc/Napoleon build of the changed public API passes with warnings treated as errors. The harness references the existing algorithm footnote; its first isolated build warned that the existing footnote was unreferenced. The repository docstring is unchanged.
  • Not run: full package suite, full project documentation/gallery, GPU, or the TensorFlow/JAX/CuPy backends. Zero/negative sparsity-budget validation is outside this change.

PR checklist

  • I have read the CONTRIBUTING document.
  • The documentation is up-to-date with the changes I made (check build artifacts). The documented contract already states this behavior; only the focused API build was run locally.
  • All tests passed, and additional code has been covered with new tests. The complete utility module and regression passed; the full package suite was not run.
  • I have added the Issue fix to RELEASES.md.

AI assistance disclosure

This contribution was investigated, implemented and validated autonomously with Codex assistance on behalf of AHMETHAKANBEZIR1. It has not received independent human code review. The commit records Codex as a co-author. Maintainer review is requested; local test evidence is not a claim of upstream CI success.

Cap the effective row budget at its width, preserving the documented
equivalence to the unconstrained projection. Add an analytic regression
for exact and oversized budgets across all supported axis modes.

Co-authored-by: Codex <noreply@openai.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

projection_sparse_simplex fails when max_nz exceeds the projected dimension

1 participant