mqt-qcec icon indicating copy to clipboard operation
mqt-qcec copied to clipboard

Segmentation fault and bus error when running qcec

Open ritu-thombre99 opened this issue 7 months ago • 3 comments

Environment information

OS: MacOS MQT version: 2.6.0 Compiler: C++

Description

I'm trying to run a circuit equivalence check for two particular circuits (Steane code). There are no mid-circuit measurements, and I have I get

  1. segmentation fault with qcec.verify("circ1.qasm", "circ2.qasm", transform_dynamic_circuit=True)
  2. bus error with qcec.verify("circ1.qasm", "circ2.qasm")

Circ1.qasm is an actual code of Steane code circuit Circ2.qasm is a hardware aware compiled circuit for the following coupling map:

 connection=[
        (0, 1),
        (1, 2),
        (2, 3),
        (2, 5),
        (4, 5),
        (5, 6),
        (5, 8),
        (7, 8),
        (8, 9),
        (9, 10),
        (3, 11),
        (7, 12),
        (10, 13),
        (0, 14),
    ],

Qubit 13 and 14 on the coupling graph are special, and cannot be used for any gates, only measuring the rest of the qubits.

circ1.qasm:

OPENQASM 2.0;
include "qelib1.inc";
qreg q[13];
creg c[3];
x q[5];
cx q[0],q[7];
cx q[2],q[7];
cx q[4],q[7];
cx q[6],q[7];
cx q[1],q[8];
cx q[2],q[8];
cx q[5],q[8];
cx q[6],q[8];
cx q[3],q[9];
cx q[4],q[9];
cx q[5],q[9];
cx q[6],q[9];
measure q[7] -> c[0];
measure q[8] -> c[1];
measure q[9] -> c[2];

circ2.qasm

OPENQASM 2.0;
include "qelib1.inc";
qreg q[15];
creg c[3];
cx q[3],q[2];
cx q[7],q[8];
cx q[9],q[8];
cx q[5],q[8];
cx q[5],q[2];
cx q[1],q[2];
cx q[2],q[1];
cx q[1],q[2];
cx q[4],q[5];
cx q[5],q[4];
cx q[4],q[5];
cx q[2],q[5];
cx q[8],q[9];
cx q[9],q[8];
cx q[8],q[9];
cx q[8],q[5];
cx q[3],q[11];
cx q[11],q[3];
cx q[3],q[11];
cx q[2],q[3];
cx q[3],q[2];
cx q[2],q[3];
rx(pi) q[2];
cx q[2],q[5];
cx q[2],q[1];
cx q[2],q[3];
cx q[3],q[2];
cx q[2],q[3];
cx q[3],q[11];
cx q[11],q[3];
cx q[3],q[11];
cx q[7],q[12];
cx q[12],q[7];
cx q[7],q[12];
cx q[7],q[8];
cx q[8],q[7];
cx q[7],q[8];
cx q[7],q[12];
cx q[8],q[9];
cx q[8],q[5];
cx q[5],q[8];
cx q[8],q[5];
cx q[5],q[8];
cx q[2],q[5];
cx q[5],q[2];
cx q[2],q[5];
cx q[2],q[1];
cx q[0],q[1];
cx q[1],q[0];
cx q[0],q[1];
cx q[2],q[5];
cx q[5],q[2];
cx q[2],q[5];
cx q[9],q[10];
cx q[10],q[9];
cx q[9],q[10];
cx q[8],q[9];
cx q[9],q[8];
cx q[8],q[9];
cx q[12],q[7];
cx q[7],q[12];
cx q[7],q[12];
cx q[12],q[7];
cx q[7],q[12];
measure q[13] -> c[0];
measure q[10] -> c[0];
cx q[9],q[10];
cx q[10],q[9];
cx q[9],q[10];
measure q[13] -> c[1];
measure q[10] -> c[1];
measure q[14] -> c[2];
measure q[0] -> c[2];

Expected behavior

Output with whether circuits are equivalent or not

How to Reproduce

from mqt import qcec

Code:
    print("With transform_dynamic_circuit")
    result = qcec.verify("circ1.qasm", "circ2.qasm", transform_dynamic_circuit=True)
    
Terminal Output:
    With transform_dynamic_circuit
    zsh: segmentation fault  /opt/anaconda3/envs/smt_compiler/bin/python 

Code:
    print("Without transform_dynamic_circuit")
    result = qcec.verify("circ1.qasm", "circ2.qasm")

Terminal ouput:
    Without transform_dynamic_circuit
    zsh: bus error  /opt/anaconda3/envs/smt_compiler/bin/python 

ritu-thombre99 avatar Jul 16 '24 20:07 ritu-thombre99