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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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-keeperalgorithms-keeperBot added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Aug 30, 2026

@cclausscclauss 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot 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-keeperalgorithms-keeperBot 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 threadquantum/q_fourier_transform.py Outdated
@algorithms-keeperalgorithms-keeperBot removed the awaiting reviews This PR is ready to be reviewed label Aug 30, 2026
@cclauss
cclauss merged commit dde1e49 into TheAlgorithms:masterAug 30, 2026
4 checks passed
@priya-sundaram-dev

Copy link
Copy Markdown
ContributorAuthor

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

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
ContributorAuthor

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

Copy link
Copy Markdown
Member

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

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

Labels

enhancementThis PR modified some existing files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@priya-sundaram-dev@cclauss