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

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

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

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

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

Línea de trabajo

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.

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

Descripción

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

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.