Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[BUG] Missing `ccx` decomposition in `rebase` for `ROTATIONAL_CX` and `CLIFFORD_T`

Chiusa
#467 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Una pull request collegata è già stata integrata.

  • #468 di @tonycoder-hub — integrata

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
57/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend, compilers

Direzione di ricerca

Start with decomposition_rules.py and trace how rebase handles ccx, c3x, id, and p for the ROTATIONAL_CX and CLIFFORD_T bases; the issue reports that unroll retains ccx. Add regression coverage for the reported gates and run the project tests. Done when the requested gates rebase successfully and the regressions pass.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Environment
  • pyqasm version: 1.3.0 (also main at 62b012e)
  • Python version: 3.11.16
  • OS: Ubuntu 22.04.5 LTS (WSL2)
What happened?

rebase(BasisSet.ROTATIONAL_CX) and rebase(BasisSet.CLIFFORD_T) raise RebaseError on a program with a single ccx. validate() and unroll() accept the same program, and the unrolled program still contains the ccx.

How can we reproduce the issue?
import pyqasm
from pyqasm.elements import BasisSet

module = pyqasm.loads("""OPENQASM 2.0;
include "qelib1.inc";
qreg q[3];
ccx q[0], q[1], q[2];
""")
module.validate()
module.rebase(BasisSet.ROTATIONAL_CX)

Output:

pyqasm.exceptions.RebaseError: Gate 'ccx' is not supported in the 'BasisSet.ROTATIONAL_CX set'.

The user guide says there is "complete conversion support for the BasisSet.ROTATIONAL_CX basis set". When we tried every qelib1 gate on its own, ROTATIONAL_CX rejected three of them: ccx, id, and c3x (reported as Gate 'p' is not supported). Interestingly, cswap can be rebased successfully because it is already expanded into simpler gates, whereas ccx remains as a single gate after unrolling.

What should happen?

ccx should be decomposed into both ROTATIONAL_CX and CLIFFORD_T, while c3x should be decomposed into ROTATIONAL_CX. The id gate can simply be removed in either case.

Suggestions (Optional)

The issue appears to come from missing decomposition rules in decomposition_rules.py. ccx is retained by unroll, while c3x is expanded into gates including p, which is also missing from the target basis and decomposition rules.

One possible fix is to add the missing rules for ccx, id, and p, along with support for selecting a third qubit in the decomposition rules.

We prototyped this approach. The resulting circuits match their original unitaries up to global phase, all 1,011 existing tests pass, and five new regression tests fail before the change and pass afterward.

Lingua principale
Python
Stelle
29
Fork
33
Merge medio
1g 22h
PR unite (30g)
15

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di qBraid/pyqasm

Tutte le issue di qBraid/pyqasm

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.