Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#215 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
30/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
compilers

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
Python
Stelle
29
Fork
33
Merge medio
2g 4h
PR unite (30g)
15

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di qBraid/pyqasm

Tutte le issue di qBraid/pyqasm

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.