myQLM / myqlm-issues

4 stars 1 forks source link

IndexError with measures #7

Closed tigerjack closed 3 years ago

tigerjack commented 3 years ago

Describe the bug Exceptions when mixing measures with program.measure and circuit.to_job(qubits=)

To Reproduce I'm launching a circuit composing only of simple gates, as you can see from the output, but I'm getting an index error in the measures.

{'nbqbits': 21, 'size': 8, 'gates': {'custom gate': 0, 'X': 13, 'C-X': 9, 'C-C-X': 29}, 'measure': 0, 'reset': 0, 'logic': 0, 'break': 0, 'remap': 0, 'gate_size': 51}
Measured through cr.to_job(qubits=)
QReg(q[0]..q[3])
QReg(q[4]..q[7])
QReg(q[8]..q[11])
Measured through pr.measure
QReg(q[18]..q[20])
QReg(q[12]..q[17])
{'nbqbits': 21, 'size': 10, 'gates': {'custom gate': 0, 'X': 13, 'C-X': 9, 'C-C-X': 29}, 'measure': 2, 'reset': 0, 'logic': 0, 'break': 0, 'remap': 0, 'gate_size': 51}

Traceback (most recent call last):
  File "/home/simone/.pyenv/versions/3.8.7/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/simone/.pyenv/versions/3.8.7/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/mnt/internal/LinuxData/online_repos/git/quantum/qat-utils/experiments/rref.py", line 102, in <module>
    main()
  File "/mnt/internal/LinuxData/online_repos/git/quantum/qat-utils/experiments/rref.py", line 98, in main
    test_simple()
  File "/mnt/internal/LinuxData/online_repos/git/quantum/qat-utils/experiments/rref.py", line 73, in test_simple
    res = qpu.submit(cr.to_job(qubits=qregs_rows))
  File "qpu.py", line 159, in qat.core.qpu.qpu.CommonQPU.submit
  File "qpu.py", line 117, in qat.core.qpu.qpu.CommonQPU._submit_batch
  File "/home/simone/.pyenv/versions/myqlm/lib/python3.8/site-packages/qat/pylinalg/service.py", line 65, in submit_job
    np_state_vec, interm_measurements = simulate(job.circuit)  # perform simu
  File "/home/simone/.pyenv/versions/myqlm/lib/python3.8/site-packages/qat/pylinalg/simulator.py", line 65, in simulate
    intprob_list = measure(state_vec, op.qbits)
  File "/home/simone/.pyenv/versions/myqlm/lib/python3.8/site-packages/qat/pylinalg/simulator.py", line 201, in measure
    intprob_list.append((res_int, probs[index]))  # (int, prob) tuple
IndexError: too many indices for array: array is 6-dimensional, but 7 were indexed

If I comment out one of the two program.measure calls, I get an empty result.raw_data and no intermediate_measurement.

{'nbqbits': 21, 'size': 8, 'gates': {'custom gate': 0, 'X': 13, 'C-X': 9, 'C-C-X': 29}, 'measure': 0, 'reset': 0, 'logic': 0, 'break': 0, 'remap': 0, 'gate_size': 51}
Measured through cr.to_job(qubits=)
QReg(q[0]..q[3])
QReg(q[4]..q[7])
QReg(q[8]..q[11])
Measured through pr.measure
QReg(q[12]..q[17])
{'nbqbits': 21, 'size': 9, 'gates': {'custom gate': 0, 'X': 13, 'C-X': 9, 'C-C-X': 29}, 'measure': 1, 'reset': 0, 'logic': 0, 'break': 0, 'remap': 0, 'gate_size': 51}
Result(need_flip=False, lsb_first=False, nbqbits=None, has_statevector=False, statevector=None, data=None, _value=None, raw_data=[]
}

Commenting both of the program.measure produces the expected results

Measured through cr.to_job(qubits=)
QReg(q[0]..q[3])
QReg(q[4]..q[7])
QReg(q[8]..q[11])
Measured through pr.measure
{'nbqbits': 21, 'size': 8, 'gates': {'custom gate': 0, 'X': 13, 'C-X': 9, 'C-C-X': 29}, 'measure': 0, 'reset': 0, 'logic': 0, 'break': 0, 'remap': 0, 'gate_size': 51}

Result(need_flip=False, lsb_first=False, nbqbits=None, has_statevector=False, statevector=None, data=None, _value=None, raw_data=[Sample(_amplitude=None, probability=1.0, _state=2371, err=None, intermediate_measurements=[], ...)

Additional context The same circuit with both program.measure works on QLM 1.0. Sample(state=|1011>|0110>|0101>, probability=1.0, amplitude=None, intermediate_measurements=[IntermediateMeasurement(cbits=[True, False, False], gate_pos=8, probability=1.0), IntermediateMeasurement(cbits=[True, False, True, False, False, True], gate_pos=9, probability=1.0)], err=None)

ArnaudGazda commented 3 years ago

Hi @tigerjack

The issue was in the myQLM-simulators package. We published yesterday a new version of myQLM-simulators package available on PyPI

Please update this package using the following command:

python3 -m pip install myqlm-simulators --upgrade

Best,

Arnaud

PS: the release note of this release is available on the GitHub page of myQLM-simulators

tigerjack commented 3 years ago

Hi @ArnaudGazda, I confirm it works now. Thanks for your support.