Move the QASM 2 printer and its branch pre-processing out of qasm2.py
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 22/100
- Loại issue
- Tái cấu trúc
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- python
- Lĩnh vực
- compilers, quantum-computing
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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-bitifchain back into oneif (creg == int)comparison._collapse_broadcast_measurement,_single_index,_writes_to_register— rebuildmeasure q -> cfrom 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
-
Qasm2Printerand the branch pre-processing helpers live in a separate module.qasm2.pykeeps onlyQasm2Moduleand imports what it needs. - Validation (
_filter_branch) and printing still share one definition of what QASM 2 can express, sovalidate()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.pyand 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.pyalready holds circuit drawing, so the new code needs a different name. One option issrc/pyqasm/modules/qasm2_printer.py._flatten_branchcould 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.
- Ngôn ngữ chính
- Python
- Star
- 29
- Fork
- 33
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 15
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của qBraid/pyqasm
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 63/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement error-handling program-validation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] dumps() emits extern calls without a semicolon, producing unparsable QASMCó thể đã có người làm @Jah-yee đã nhận 18 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 25/100
qBraid/pyqasm#438 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Parse failures raise ValidationError with an empty message; the ANTLR diagnostic is lostCó thể đã có người làm @tonycoder-hub đã nhận 11 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 22/100
qBraid/pyqasm#436 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`extern port` / `extern frame` in `cal` blocks fail to parse, blocking nearly every spec OpenPulse exampleCó thể đã có người làm @Riiocodee đã nhận 4 ngày trước. Đang mởbug llm-assisted qasm3 qasm3-coverage
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
qBraid/pyqasm#401 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của qBraid/pyqasm
Issue tương tự
-
good first issue infrastructure
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
kuznia-rdzeni/coreblocks#1135 ·
-
good first issue server
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation priority: high
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
a-lex-s/mealie-telegram-bot#54 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
type/test
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
SaltedTan/virgil-language-server#218 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
btclib-org/btclib-wallet#541 ·
Maintainer thường phản hồi trong vòng 1 ngày