quantumlib / Cirq

A Python framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
Apache License 2.0
4.24k stars 1.01k forks source link

ValueError: Cannot output operation as QASM: cirq.global_phase_operation #6457

Closed rht closed 7 months ago

rht commented 7 months ago

Description of the issue

Circuits containing cirq.global_phase_operation can't be converted to QASM

How to reproduce the issue

import cirq
import numpy as np

c = cirq.Circuit([cirq.global_phase_operation(np.exp(1j * 5))])
cirq.qasm(c)
``` Traceback (most recent call last): File "/workspace/delete_global_phase_problem.py", line 5, in cirq.qasm(c) File "/workspace/venv/lib/python3.11/site-packages/cirq/protocols/qasm.py", line 165, in qasm result = method(**kwargs) ^^^^^^^^^^^^^^^^ File "/workspace/venv/lib/python3.11/site-packages/cirq/circuits/circuit.py", line 1315, in _qasm_ return self.to_qasm() ^^^^^^^^^^^^^^ File "/workspace/venv/lib/python3.11/site-packages/cirq/circuits/circuit.py", line 1359, in to_qasm return str(self._to_qasm_output(header, precision, qubit_order)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/workspace/venv/lib/python3.11/site-packages/cirq/circuits/qasm_output.py", line 245, in __str__ self._write_qasm(lambda s: output.append(s)) File "/workspace/venv/lib/python3.11/site-packages/cirq/circuits/qasm_output.py", line 299, in _write_qasm self._write_operations(self.operations, output, output_line_gap) File "/workspace/venv/lib/python3.11/site-packages/cirq/circuits/qasm_output.py", line 326, in _write_operations decomposed = protocols.decompose( ^^^^^^^^^^^^^^^^^^^^ File "/workspace/venv/lib/python3.11/site-packages/cirq/protocols/decompose_protocol.py", line 315, in decompose return [*_decompose_dfs(val, args)] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/workspace/venv/lib/python3.11/site-packages/cirq/protocols/decompose_protocol.py", line 223, in _decompose_dfs raise error ValueError: Cannot output operation as QASM: cirq.global_phase_operation((0.28366218546322625-0.9589242746631385j)) ```

Cirq version 1.3.0

NoureldinYosri commented 7 months ago

cirq-cynk: global phase is a non qubit operation. AI: check if qasm has a way to represent non qubit operations. if yes add support for it.

short term solution: drop the operation and print a warning.

tanujkhattar commented 7 months ago

https://github.com/Qiskit/qiskit/issues/7167#issuecomment-947821313 suggests that OpenQASM 2 doesn't support global phase operations. In the short term, we should just add a warning and ignore global phase operations when converting to OpenQASM.

We should also add support for OpenQASM 3 in Cirq. This has been requested for a while now - https://github.com/quantumlib/Cirq/issues/4509

kenya-sk commented 7 months ago

@NoureldinYosri @tanujkhattar I'm interested in this issue. Can I try to implement a warning process?

NoureldinYosri commented 7 months ago

hi @kenya-sk , thanks for offering to help with this. I assigned the task to you