Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#387 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@TheGupta2012 ya está trabajando en esto.

Desde el 24/8/2026.

  • #410 de @TheGupta2012 — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
python
Área
compilers

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

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.
Lenguaje dominante
Python
Estrellas
29
Forks
33
Merge medio
2 d 4 h
PR fusionados (30 d)
15

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de qBraid/pyqasm

Todos los issues de qBraid/pyqasm

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.