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

Subroutines that return `bit` / `bit[n]` fail, including `return measure q;`

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

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

@TheGupta2012 がすでに取り組んでいます。

2026年8月24日 から。

  • #410 @TheGupta2012 による — オープン

評価

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

調査の方向性

Start by running the def f() -> bit snippet to reproduce the AttributeError, then find the .value dereference on the return path in src/pyqasm/subroutines.py and the call/return visiting in src/pyqasm/visitor.py. The measurement-return case needs a design decision about the caller's classical bit, and the issue says it depends on the bit[n] representation change. Done means the bit, bit[n] and return measure q cases in tests/qasm3/test_function.py either work or raise a ValidationError naming both types.

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

説明

bug llm-assisted qasm3

Limitation

Subroutines allow any classical scalar return type,
including bit and bit[n], and the spec shows returning a measurement result directly.

pyqasm crashes with an AttributeError for a bit return, and rejects bit[n] returns and
measurement returns with a misleading "Invalid initialization value" error at the call site.

Example QASM failure

Internal error:

OPENQASM 3.0;
def f() -> bit {
    bit b;
    return b;
}
bit x = f();
AttributeError: 'NoneType' object has no attribute 'value'

Register return, rejected:

OPENQASM 3.0;
def f() -> bit[2] {
    bit[2] b;
    return b;
}
bit[2] x = f();
// ValidationError: Invalid initialization value for variable 'x'

Returning a measurement — the idiom the spec uses:

OPENQASM 3.0;
include "stdgates.inc";
def f(qubit q) -> bit {
    return measure q;
}
qubit[1] r;
bit b = f(r[0]);
// ValidationError: Invalid initialization value for variable 'b'

Assigning first does not help:

def f(qubit q) -> bit {
    bit c;
    c = measure q;
    return c;
}
// ValidationError: Invalid initialization value for variable 'b'

For contrast, -> int[8], -> float[64] and -> bool returns all work today, so the gap is
specific to bit-typed returns.

Change Requested

  1. def ... -> bit and def ... -> bit[n] must return a usable value that can initialise or
    be assigned to a matching bit / bit[n] variable.
  2. return measure q; inside a subroutine must be accepted, with the measurement recorded in
    the unrolled program and its result becoming the return value.
  3. A genuine type mismatch between the declared return type and the returned expression must
    raise a ValidationError naming both types — never an AttributeError.

Change note

This is distinct from #311, which concerns qubit index remapping for arguments passed into a
subroutine. This issue is about the return path and bit-typed values.

Implementation Details

  • Subroutine handling is in src/pyqasm/subroutines.py together with the call/return visiting
    in src/pyqasm/visitor.py.
  • The AttributeError: 'NoneType' object has no attribute 'value' indicates the return-value
    path assumes the returned object carries a .value — true for the literal-backed numeric
    types, false for the bit representation. Locating that dereference identifies the fix site
    directly.
  • The measurement case is the harder half: a measurement inside a subroutine body must both
    (a) emit a QuantumMeasurementStatement into the unrolled output against the caller's
    qubit, and (b) bind its classical result to the return value. Decide whether to synthesise a
    temporary classical bit in the caller's scope for this, which keeps the emitted program
    valid OpenQASM.
  • This depends on the bit[n] representation change tracked in the bit-register operators
    issue; sequencing that one first will make this fix smaller.
  • Tests: tests/qasm3/test_function.py — -> bit, -> bit[n], return measure q, assign-
    then-return, a declared/returned type mismatch, and a nested subroutine that forwards a bit
    return.
主要言語
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 を短くまとめたダイジェスト。