Bitwise, shift and index operations on `bit[n]` registers raise raw `TypeError`
メンテナーはふだん 1 日以内に返信
評価
この issue はまだ評価されていません。
説明
Limitation
The spec defines bit[n] as a register of bits supporting
bitwise and shift operators and
indexing / slicing.
pyqasm stores a bit[n] value as a Python str, so every one of these operations reaches
a Python operator that str does not implement. The result is an uncaught TypeError
escaping the public API instead of either a correct value or a ValidationError.
Example QASM failure
import pyqasm
for op in ["a | b", "a & b", "a ^ b"]:
m = pyqasm.loads(f'''
OPENQASM 3.0;
bit[4] a = "1010";
bit[4] b = "0101";
bit[4] c = {op};
''')
m.validate()
TypeError: unsupported operand type(s) for |: 'str' and 'str'
TypeError: unsupported operand type(s) for &: 'str' and 'str'
TypeError: unsupported operand type(s) for ^: 'str' and 'str'
Shifts fail the same way:
OPENQASM 3.0;
bit[4] a = "1010";
bit[4] c = a << 1;
// TypeError: unsupported operand type(s) for <<: 'str' and 'int'
Indexing and slicing also fail, and these are plain reads:
OPENQASM 3.0;
bit[8] b = "00101010";
bit c = b[0];
// TypeError: string indices must be integers, not 'tuple'
OPENQASM 3.0;
bit[8] b = "00101010";
bit[4] c = b[0:3];
// TypeError: string indices must be integers, not 'tuple'
Related, and blocked by the same representation:
OPENQASM 3.0;
bit[4] a = "1010";
bit[4] c = ~a;
// ValidationError: Invalid initialization value for variable 'c'
Change Requested
- Give
bit[n]an internal representation that supports the spec's operator set. A
fixed-width integer plus an explicit width is the natural choice; thestrform is then
produced only at serialisation time. - Support
|,&,^,~,<<,>>onbit[n]operands, with the spec rule that both
operands of a binary bitwise operator must have equal width. - Support
b[i](yieldingbit) andb[a:b]/b[a:step:b](yieldingbit[k]). - No operation on a
bit[n]should ever surface a raw Python exception; anything genuinely
invalid must raiseValidationErrorwith the offending span.
Implementation Details
- Bit values are produced by the classical declaration path in
Qasm3Visitor._visit_classical_declaration(src/pyqasm/visitor.py:~1991) and consumed by
Qasm3ExprEvaluatorinsrc/pyqasm/expressions.py. - The binary/unary operator dispatch in
src/pyqasm/maps/expressions.pyapplies Python
operators directly to the stored value. Bit-typed operands need to be converted to their
integer form before the operator is applied, and the result re-widened and masked ton
bits. - Indexing is handled by
Qasm3Analyzer.analyze_classical_indices
(src/pyqasm/analyzer.py); it currently assumes an indexable non-strcontainer, which is
wherestring indices must be integers, not 'tuple'originates. - A shared helper pair —
bits_to_int(value, width)/int_to_bits(value, width)— keeps the
conversion in one place and makes the serialiser's job unambiguous. - Once this lands, the
rotl/rotr/popcountbuilt-ins (separate issue) become
straightforward, since they are defined onbit[n]. - Tests:
tests/qasm3/test_expressions.py— each operator, width-mismatch errors, single-bit
and ranged reads, and a round-trip throughdumps()confirming the"1010"literal form
is preserved.
- 主要言語
- Python
- スター
- 29
- フォーク
- 33
- 平均マージ
- 2日 4時間
- マージ済み PR(30日)
- 15
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
qBraid/pyqasm のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 63/100
メンテナーはふだん 1 日以内に返信
-
enhancement error-handling program-validation
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
Move the QASM 2 printer and its branch pre-processing out of qasm2.py対応中かも @danielgaskins が 9 日前に担当しました。 オープンenhancement qasm2
難易度 4/5 3〜5日 初心者へのやさしさ 22/100
qBraid/pyqasm#447 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
[BUG] dumps() emits extern calls without a semicolon, producing unparsable QASM対応中かも @Jah-yee が 17 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 25/100
qBraid/pyqasm#438 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Parse failures raise ValidationError with an empty message; the ANTLR diagnostic is lost対応中かも @tonycoder-hub が 10 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 22/100
qBraid/pyqasm#436 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
gramaziokohler/compas_timber#870 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
autowarefoundation/autoware_carla_scenario#500 ·
メンテナーはふだん 1 日以内に返信
-
good first issue priority: low size: XS testing
難易度 1/5 1〜3時間 初心者へのやさしさ 86/100
cubrid-lab/cubrid-mcp-server#385 ·
メンテナーはふだん 1 日以内に返信
-
good first issue priority: low size: S testing
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
cubrid-lab/cubrid-cookbook-python#447 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100