Bitwise, shift and index operations on `bit[n]` registers raise raw `TypeError`
I maintainer di solito rispondono entro 1 giorno
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
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.
- Lingua principale
- Python
- Stelle
- 29
- Fork
- 33
- Merge medio
- 2g 4h
- PR unite (30g)
- 15
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di qBraid/pyqasm
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement error-handling program-validation
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Move the QASM 2 printer and its branch pre-processing out of qasm2.pyForse già presa @danielgaskins l’ha presa 10 giorni fa. Apertaenhancement qasm2
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
qBraid/pyqasm#447 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG] dumps() emits extern calls without a semicolon, producing unparsable QASMForse già presa @Jah-yee l’ha presa 18 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 25/100
qBraid/pyqasm#438 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Parse failures raise ValidationError with an empty message; the ANTLR diagnostic is lostForse già presa @tonycoder-hub l’ha presa 11 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 22/100
qBraid/pyqasm#436 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di qBraid/pyqasm
Issue simili
-
type-bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
push_gh-pages fails on master branch on forksForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertagood first issue infrastructure
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
kuznia-rdzeni/coreblocks#1135 ·
-
good first issue server
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
documentation priority: high
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
a-lex-s/mealie-telegram-bot#54 ·
I maintainer di solito rispondono entro 1 giorno