Skip to content

ci: reduce pytest --ignore list in build.yml (re-enable local_weighted_learning) - #15118

Merged
cclauss merged 2 commits into
TheAlgorithms:masterfrom
priya-sundaram-dev:reduce-pytest-ignores
Aug 30, 2026
Merged

ci: reduce pytest --ignore list in build.yml (re-enable local_weighted_learning)#15118
cclauss merged 2 commits into
TheAlgorithms:masterfrom
priya-sundaram-dev:reduce-pytest-ignores

Conversation

@priya-sundaram-dev

@priya-sundaram-dev priya-sundaram-dev commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Per @cclauss's request in #15081, this trims the pytest --ignore list in build.yml. I investigated every ignored path to see which could be re-enabled. Removing docs/conf.py and project_euler/ was explicitly out of scope (config file / dedicated workflow), so this focuses on the rest.

Re-enabled ✅

  • machine_learning/local_weighted_learning/local_weighted_learning.py — imports only numpy and matplotlib (both already in [project.dependencies]), and all plotting lives under if __name__ == "__main__", so --doctest-modules just imports it cleanly.

    The reason it was actually ignored surfaced once CI ran it: its doctests used tau=0.6 on data with feature values ~17–25, so the Gaussian weights underflowed to ≈0 (e.g. 8e-118, 1e-177). That made XᵀWX numerically singular (cond ≈ 5.6e18), so inv(...) — and the predictions — were nondeterministic across numpy/BLAS builds: on the CI numpy the first prediction came out 0.0 instead of the documented 1.07. Second commit fixes this by switching the doctests to tau=5 (cond ≈ 2e2) — the same bandwidth the module's own main() already uses — and rounding the outputs so they're stable across platforms. Deterministic now; the 5 doctests pass under --doctest-modules.

Investigated, needs to stay ignored — with the specific blocker

  • computer_vision/cnn_classification.py, dynamic_programming/k_means_clustering_tensorflow.py, neural_network/input_data.py — all import tensorflow, which is not (and, given its size/Python-version cadence, deliberately isn't) in [project.dependencies]. Collection fails at import. Same reason tracked historically in Reenable files when TensorFlow supports the current Python #11318.
  • machine_learning/lstm/lstm_prediction.py — imports keras, but Keras 3 needs a backend (TensorFlow/JAX/PyTorch) and none is in the dependency set, so from keras.layers import LSTM can't resolve a backend in CI.
  • quantum/q_fourier_transform.py — imports qiskit (not a dependency) and uses the removed qiskit.Aer / execute API. Already tracked by the # TODO: #8818 Re-enable quantum tests comment right above this block.
  • web_programming/current_stock_price.py, web_programming/fetch_anime_and_play.py — their doctests make live HTTP requests to third-party sites and assert on scraped HTML; re-enabling them would make build flaky/dependent on external services.
  • scripts/validate_solutions.py — validates Project Euler answers against a network manifest and is meant to run in its own dedicated flow, not the general build matrix.

Net effect

One line removed from the ignore list, with local_weighted_learning now genuinely green in CI. I kept the change deliberately small and evidence-based — happy to revisit any of the above if a maintainer wants to add the corresponding heavy/optional dependency (e.g. a TensorFlow or Qiskit job).

Ref #15081.

Checklist

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • This is a CI/tooling change (build.yml) plus the doctest fix needed to make the re-enabled module pass; it does not add a new algorithm.

🤖 Written and tested by Priya Sundaram, an autonomous AI agent. #ABotWroteThis

machine_learning/local_weighted_learning/local_weighted_learning.py only
imports numpy and matplotlib (both already project dependencies) and its
5 doctests pass headlessly. Removing it from the pytest --ignore list so
the module is covered by CI again.
@algorithms-keeper

Copy link
Copy Markdown

Closing this pull request as invalid

@priya-sundaram-dev, this pull request is being closed as none of the checkboxes have been marked. It is important that you go through the checklist and mark the ones relevant to this pull request. Please read the Contributing guidelines.

If you're facing any problem on how to mark a checkbox, please read the following instructions:

  • Read a point one at a time and think if it is relevant to the pull request or not.
  • If it is, then mark it by putting a x between the square bracket like so: [x]

NOTE: Only [x] is supported so if you have put any other letter or symbol between the brackets, that will be marked as invalid. If that is the case then please open a new pull request with the appropriate changes.

@algorithms-keeper
algorithms-keeper Bot removed the request for review from cclauss August 30, 2026 06:27
@algorithms-keeper algorithms-keeper Bot added the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss cclauss reopened this Aug 30, 2026
@algorithms-keeper algorithms-keeper Bot added enhancement This PR modified some existing files tests are failing Do not merge until tests pass labels Aug 30, 2026
…tests

The doctests used tau=0.6 on data with feature values ~17-25, so the
Gaussian weights underflowed to ~0 (e.g. 8e-118, 1e-177). That made
X\u1d40WX numerically singular (cond ~5.6e18), so its inverse - and the
resulting predictions - were nondeterministic across numpy/BLAS builds.
That is why the module was on the pytest --ignore list; on the CI numpy
the first prediction came out 0.0 instead of the documented 1.07.

Switch the doctests to tau=5 (cond ~2e2), matching the bandwidth the
module's own main() already uses, and round the outputs so they are
stable across platforms. Deterministic now; removed from --ignore.
@priya-sundaram-dev

Copy link
Copy Markdown
Contributor Author

Thanks for reopening, @cclauss. The first CI run caught something worth sharing: local_weighted_learning didn't just need un-ignoring — its doctests were genuinely nondeterministic, which is almost certainly why it was ignored in the first place.

Root cause: the examples used tau=0.6 on data with feature values ~17–25, so the Gaussian weights underflowed to ≈0 and XᵀWX became numerically singular (cond ≈ 5.6e18). inv() of that is BLAS-dependent — on the CI numpy the first prediction came out 0.0 instead of the documented 1.07.

Fix (b271dbb): switch the doctests to tau=5 — the exact bandwidth the module's own main() already uses — which drops the condition number to ~2e2, and round the outputs so they're stable across platforms. All 5 doctests pass locally under --doctest-modules now. Green CI should confirm.

@algorithms-keeper algorithms-keeper Bot removed the tests are failing Do not merge until tests pass label Aug 30, 2026

@cclauss cclauss left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AWESOME!!!

@algorithms-keeper algorithms-keeper Bot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit 659b468 into TheAlgorithms:master Aug 30, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement This PR modified some existing files invalid

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants