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

Move the QASM 2 printer and its branch pre-processing out of qasm2.py

Abierto
#447 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@danielgaskins ya está trabajando en esto.

Desde el 14/10/2026.

  • #454 de @danielgaskins — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
22/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

Start in src/pyqasm/modules/qasm2.py, where Qasm2Printer and the helpers _flatten_branch, _collapse_broadcast_measurement and _filter_branch sit, then read tests/qasm2/test_branching.py. Done means the printer lives in its own module, _filter_branch and the printer share one definition of what QASM 2 can express, and the suite passes without changing expected output. Pull request #454 is already open and the issue depends on #338, so check those before starting.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement qasm2
Feature Description

Follow-up to #338. That PR fixes QASM 2 branch output with a Qasm2Printer in src/pyqasm/modules/qasm2.py. The fix works, but it grows qasm2.py from 216 to 564 lines. Most of the growth is module-level helpers that pre-process the unrolled AST before printing:

  • _parse_branch_condition, _add_chain_constraint, _flatten_branch — walk the unroller's per-bit if chain back into one if (creg == int) comparison.
  • _collapse_broadcast_measurement, _single_index, _writes_to_register — rebuild measure q -> c from per-bit measurements and guard multi-statement bodies.
  • _creg_sizes, _qreg_sizes, _qasm3_repr, _unsupported_condition_message — supporting lookups and error text.

These helpers mix three concerns in one file: the Qasm2Module class, QASM 2 validation, and QASM 2 serialization. Qasm2Module._filter_branch also calls _flatten_branch and discards the result, only to reuse its exceptions.

This issue moves the helpers and Qasm2Printer out of qasm2.py and simplifies their design. Behavior must not change.

Acceptance criteria

  • Qasm2Printer and the branch pre-processing helpers live in a separate module. qasm2.py keeps only Qasm2Module and imports what it needs.
  • Validation (_filter_branch) and printing still share one definition of what QASM 2 can express, so validate() is never stricter or looser than the printer.
  • Helpers with one caller fold into it, or get a clear name and docstring if they stay separate.
  • tests/qasm2/test_branching.py and the rest of the suite pass without changes to expected output or error messages.

Out of scope

Ideally, qasm2.py should not need this pre-processing at all. The unroller ravels if (c == 2) into a nested per-bit chain, and the printer then undoes that work. A cleaner fix is an unroller that keeps QASM 2 branches in their original form. That change touches the visitor and is larger, so this issue keeps the pre-processing and only relocates and simplifies it.

Implementation (Optional)
  • src/pyqasm/printer.py already holds circuit drawing, so the new code needs a different name. One option is src/pyqasm/modules/qasm2_printer.py.
  • _flatten_branch could return a small dataclass (register, value, body) in place of a tuple, and expose a separate check function for _filter_branch.

Depends on #338 merging first.

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.