Skip to content

quantum: modernize QFT to Qiskit 2.x and re-enable its test - #15120

Merged
cclauss merged 3 commits into
TheAlgorithms:masterfrom
priya-sundaram-dev:modernize-quantum-qft
Aug 30, 2026
Merged

quantum: modernize QFT to Qiskit 2.x and re-enable its test#15120
cclauss merged 3 commits into
TheAlgorithms:masterfrom
priya-sundaram-dev:modernize-quantum-qft

Conversation

@priya-sundaram-dev

Copy link
Copy Markdown
Contributor

Describe your change:

Follow-up to #15118 and the ask in #15081. Re-opens #15119 (auto-closed by the keeper bot for the draft's unchecked template — CI has since gone fully green, so there's no reason to keep it a draft).

quantum/q_fourier_transform.py imported Aer and execute from qiskit — both removed in the Qiskit 1.0 API break — so the file could never import, which is why it sat on the --ignore list and its doctest was never validated. This ports it to the current API:

  • Simulate with the pure-Python BasicSimulator (transpile() + backend.run()) instead of Aer.get_backend("qasm_simulator") + execute(). BasicSimulator ships inside qiskit core, so no compiled qiskit-aer backend is required — relevant because qiskit-aer has no Python 3.14 wheels yet (Need binary distribution on PyPI for Python 3.14 Qiskit/qiskit-aer#2378), while this repo requires Python ≥ 3.14.
  • Seed the run (seed_simulator=42) and rewrite the doctest to check the reproducible, shot-noise-independent facts (all four outcomes appear; counts sum to the shot total) rather than exact per-state counts — the old {'00': 2500, ...} doctest was statistically impossible and only "passed" because it was ignored.
  • Add qiskit>=2 to dependencies; drop --ignore=quantum/q_fourier_transform.py and the stale # TODO: #8818 comment from build.yml.

CI is green: build and build_docs both pass on the repo's Python 3.14 interpreter, confirming qiskit core installs/imports and the new doctest runs and passes. Closes the quantum half of #8818.

The remaining TensorFlow --ignore entries are hard-blocked by the Python 3.14 floor (TensorFlow tops out at 3.13); full matrix is in #15081 / the earlier #15119 thread.

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.
  • Documentation change?

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.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • 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.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.

quantum/q_fourier_transform.py used the Aer and execute symbols that were
removed from qiskit in the 1.0 API break, so it could never run and was on
the pytest --ignore list. Port it to the current API:

- Drop 'from qiskit import Aer, execute'. Build the circuit unchanged, then
  simulate with the pure-Python BasicSimulator via transpile() + backend.run(),
  so no compiled qiskit-aer backend is needed (qiskit-aer has no Python 3.14
  wheels yet; BasicSimulator ships inside qiskit core).
- Seed the run (seed_simulator=42) and rewrite the doctest to assert the
  reproducible, shot-noise-independent facts (the four outcomes appear and the
  counts sum to the shot total) instead of exact per-state counts, which random
  sampling can never hit.
- Add 'qiskit>=2' to project dependencies and drop the quantum ignore + the
  stale '# TODO: TheAlgorithms#8818 Re-enable quantum tests' comment in build.yml.

Draft until CI confirms qiskit installs and imports on the repo's Python 3.14.
@algorithms-keeper algorithms-keeper Bot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels 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.

Thousands separators make numbers easier for humans to read.

Comment thread quantum/q_fourier_transform.py Outdated
@algorithms-keeper algorithms-keeper Bot added awaiting changes A maintainer has requested changes to this PR and removed awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026
@algorithms-keeper algorithms-keeper Bot added awaiting reviews This PR is ready to be reviewed and removed awaiting changes A maintainer has requested changes to this PR labels Aug 30, 2026
@cclauss
cclauss enabled auto-merge (squash) August 30, 2026 08:27
Comment thread quantum/q_fourier_transform.py Outdated
@algorithms-keeper algorithms-keeper Bot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:master Aug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
Contributor Author

Thanks for the review and the merge, @cclauss! Glad the QFT test is back in the suite on Qiskit 2.x. Happy to keep chipping away at the remaining --ignore entries in build.yml — the TensorFlow/Keras files are the main blockers (no 3.14 wheels yet); I'll follow up on #15081 if a path opens up.

@cclauss

cclauss commented Aug 30, 2026

Copy link
Copy Markdown
Member

Awesome work on Qiskit!

I find it stunning that TensorFlow/Keras does not have v3.14 wheels when v3.15 is available as a release candidate.

@priya-sundaram-dev

Copy link
Copy Markdown
Contributor Author

Right? The catch is that a "3.15 release candidate exists" and "TF/Keras ship wheels for 3.x" are almost unrelated events. TensorFlow bundles a big C++/pybind11 extension that has to be rebuilt and tested against each new CPython ABI, so their wheels historically trail the interpreter by one or two minor versions — 3.15 RC availability just means CPython froze its ABI, not that TF has caught up on 3.14 yet.

The cleaner path for us is the pure-Python-first files: the lstm_prediction example is Keras-only today, but the same model expresses fine on a JAX backend (keras.backend = jax), and JAX does publish 3.14 wheels. Happy to spin that up as a separate PR so we can drop another --ignore without waiting on the TF release train. The genuinely TF-graph-API files (k_means_clustering_tensorflow, the old input_data) are a bigger lift and probably better rewritten than ported.

@cclauss

cclauss commented Aug 30, 2026

Copy link
Copy Markdown
Member

I like your Keras-only workaround idea. Please go for it.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants