Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đã đóng
#467 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Một pull request liên quan đã được merge.

  • #468 của @tonycoder-hub — đã merge

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
57/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
backend, compilers

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
Python
Star
29
Fork
33
Merge trung bình
1 ngày 22 giờ
Pull request đã merge (30 ngày)
15

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của qBraid/pyqasm

Tất cả issue của qBraid/pyqasm

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.