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

`pow(k) @` modifier rejects non-integer exponents

Đang mở
#398 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

Chưa có ai nhận issue này.

Đá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
42/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
python
Lĩnh vực
quantum-computing

Hướng nghiên cứu

Start with the power-modifier check near src/pyqasm/visitor.py:1627, where the integer-only validation and the existing negative-integer inversion live. Then look at src/pyqasm/linalg.py and src/pyqasm/decomposer.py to see how a single-qubit matrix is turned into U(θ, φ, λ). Done means pow(0.5) @ x matches the sx matrix, pow(0.25) @ x and pow(1.5) @ z work, and unsupported multi-qubit or runtime-valued exponents raise a named ValidationError, with tests in tests/qasm3/test_gate.py.

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

Mô tả

enhancement llm-assisted qasm3 qasm3-coverage

Limitation

The power modifier is defined as: "The modifier
pow(k) @ replaces its gate argument U by its kth power U^k for some positive integer
or floating point number k (not necessarily constant)."

pyqasm requires k to be an integer and rejects everything else.

Example QASM failure

OPENQASM 3.0;
include "stdgates.inc";
qubit[1] q;
pow(0.5) @ x q[0];
ValidationError: Power modifier argument must be an integer in gate operation QuantumGate(...)

Integer exponents, including negative ones, work today:

pow(2) @ x q[0];    // OK
pow(-1) @ x q[0];   // OK

so the restriction is specifically on the fractional case — which is the interesting one, since
pow(0.5) @ x is the square root of X.

Change Requested

  1. Accept a floating-point k in pow(k) @.
  2. For a fractional k, the repeat-the-gate expansion used for integers does not apply. The
    unrolled result must be computed from the gate's matrix as U^k via matrix power — the
    principal branch, matching the spec's definition.
  3. Where a fractional power of a gate has a known closed form in the standard library, prefer
    emitting that named gate over a synthesised U(θ, φ, λ). For example pow(0.5) @ x is
    sx.
  4. If a fractional power cannot be realised for a given gate, raise a ValidationError naming
    the gate and the exponent — not the current blanket "must be an integer".

Implementation Details

  • The rejection is at src/pyqasm/visitor.py:1627. The surrounding block already handles
    negative integers by inverting and repeating, so the integer path is a useful reference for
    where the fractional branch belongs.
  • src/pyqasm/linalg.py and the Cython src/pyqasm/accelerate/linalg.pyx already provide the
    matrix machinery used by the decomposer; a matrix power via eigendecomposition fits there
    rather than in the visitor.
  • The single-qubit result can be routed through the existing ZYZ / U(θ, φ, λ) decomposition
    in src/pyqasm/decomposer.py, so the fractional case reduces to "compute the matrix, then
    decompose" and reuses tested code.
  • Decide the multi-qubit policy explicitly. A fractional power of a two-qubit gate is well
    defined mathematically but expensive to synthesise; rejecting it with a clear message is a
    reasonable first increment, provided the message says so.
  • The spec's "not necessarily constant" clause implies a runtime-valued exponent. That cannot
    be resolved during unrolling and is out of scope here — reject it with a specific message.
  • Tests: tests/qasm3/test_gate.py — pow(0.5) @ x against the sx matrix, pow(0.25) @ x,
    pow(1.5) @ z, a fractional power under ctrl @, and a clear error for the unsupported
    multi-qubit case.
Ngôn ngữ chính
Python
Star
29
Fork
33
Merge trung bình
2 ngày 4 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.