Subroutines that return `bit` / `bit[n]` fail, including `return measure q;`
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
def ... -> bitanddef ... -> bit[n]must return a usable value that can initialise or
be assigned to a matchingbit/bit[n]variable.return measure q;inside a subroutine must be accepted, with the measurement recorded in
the unrolled program and its result becoming the return value.- A genuine type mismatch between the declared return type and the returned expression must
raise aValidationErrornaming both types — never anAttributeError.
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.pytogether with the call/return visiting
insrc/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 aQuantumMeasurementStatementinto 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.
- Lenguaje dominante
- Python
- Estrellas
- 29
- Forks
- 33
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 15
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de qBraid/pyqasm
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 63/100
Los mantenedores suelen responder en 1 día
-
enhancement error-handling program-validation
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Move the QASM 2 printer and its branch pre-processing out of qasm2.pyPosiblemente ocupada @danielgaskins la tomó hace 12 días. Abiertoenhancement qasm2
Dificultad 4/5 3-5 días Aptitud para principiantes 22/100
qBraid/pyqasm#447 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
[BUG] dumps() emits extern calls without a semicolon, producing unparsable QASMPosiblemente ocupada @Jah-yee la tomó hace 20 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 25/100
qBraid/pyqasm#438 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Parse failures raise ValidationError with an empty message; the ANTLR diagnostic is lostPosiblemente ocupada @tonycoder-hub la tomó hace 13 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 22/100
qBraid/pyqasm#436 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de qBraid/pyqasm
Issues similares
-
The changelog workflow excludes otelbot but not dependabot, so every Dependabot pull request fails the changelog checkPosiblemente ocupada @ocelotl la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
open-telemetry/opentelemetry-python#5825 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
cuga-project/cuga-agent#1020 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 70/100
microsoft/playwright#43640 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
stac-utils/stac-fastapi-elasticsearch-opensearch#965 ·
Los mantenedores suelen responder en 2 días
-
from-review-extraction library privacy python severity:suggested
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
LearningCircuit/local-deep-research#7951 ·
Los mantenedores suelen responder en 2 días