Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[FEATURE] Implement Circuit Segmentation via `.segment()` Method

オープン
#215 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
30/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python
領域
compilers

調査の方向性

Start from QasmModule and loads in the pyqasm package to see how a parsed program stores its qubit registers and gate statements. The new .segment() method needs a union-find over qubits joined by multi-qubit gates, then emits one QasmModule per component with remapped __PYQASM_SEGMENT_<idx>__ registers. Done means the example in the issue produces the two shown segments and that measurements or classical controls raise an error. The single-qubit edge case and the return-type question are unresolved in the thread, so confirm them with the maintainers first.

索引モデルが issue の本文から書いたものです。

説明

enhancement llm-assisted transformation
Feature Description
  • Introduce a .segment() method to pyqasm.QasmModule that partitions quantum circuits into independent segments where no entanglement exists between segments.

  • Each segment is returned as a standalone QasmModule object containing:

    • Remapped qubit registers (e.g., PYQASM_SEGMENT_0[i])
    • Gates acting exclusively on the segment's qubits
  • Key constraints:

    • We use entangling gates to define an "independently executable segment". Raises an error if the circuit contains measurements or classical controls (unsupported in v1).
    • Qubit order in new registers follows first occurrence in the original circuit.
Motivation
  • Parallel Execution: Enables independent segment execution across multiple QPUs.
  • Resource Optimization: Splits large circuits for execution on smaller devices.
  • Error Containment: Isolates quantum errors to individual segments.
Implementation (Optional)
Preprocessing:
  • Validate absence of measurements/classical controls.

  • Construct a qubit connectivity graph using multi-qubit gates (edges connect interacting qubits).

Segmentation Algorithm:
  • Identify connected components in the graph → segments. Should essentially be a disjoint set union amongst all the qubits present in our program. Inspired by the BlockSplitter in qiskit's dag_circuit.collect_blocks

  • For each segment:

    • Create a new register qubit[N] __PYQASM_SEGMENT_<idx>__ (N = segment qubit count).

    • Remap original qubits to new register indices ordered by first gate occurrence.

Module Generation:
  • Clone original module headers (OPENQASM 3.0, includes).
  • Replace original gates with remapped operations.
  • Preserve gate order within segments.
Edge Cases:
  • All Single-qubit gates → Divide into a default segment count (say 10) as all qubits are disjoint
  • Empty circuits → No OP
Example flow

from pyqasm import loads

qasm_code = """
OPENQASM 3.0;
qubit[4] q;
h q[0]; 
cx q[0], q[1];
h q[2];
cx q[2], q[3];
"""

module = loads(qasm_code)
segments = module.segment()  # Returns 2 QasmModules

print(segments[0])
# Output:
# OPENQASM 3.0;
# qubit[2] __PYQASM_SEGMENT_0__;
# h __PYQASM_SEGMENT_0__[0];
# cx __PYQASM_SEGMENT_0__[0], __PYQASM_SEGMENT_0__[1];

print(segments[1])
# Output:
# OPENQASM 3.0;
# qubit[2] __PYQASM_SEGMENT_1__;
# h __PYQASM_SEGMENT_1__[0];
# cx __PYQASM_SEGMENT_1__[0], __PYQASM_SEGMENT_1__[1];

This is a first draft where we return a list of modules but can potentially be changed in-place addition of these segments to existing module

主要言語
Python
スター
29
フォーク
33
平均マージ
2日 4時間
マージ済み PR(30日)
15

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

qBraid/pyqasm のほかの issue

qBraid/pyqasm の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。