Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#398 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
42/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
python

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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.
主要言語
Python
スター
29
フォーク
33
平均マージ
2日 4時間
マージ済み PR(30日)
15

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

qBraid/pyqasm のほかの issue

qBraid/pyqasm の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。