-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs/hardware/pasqal/getting_started.ipynb fails to execute in Google Colab #6655
Comments
This is a workaround to allow execution of getting_started.ipynb notebook as a part of documentation build. Related to quantumlib#6655
Circq cync: Goal is to enable this notebook again and make sure it works. |
I am trying to understand what happened here: This code in the main was added in pull request #6656: # TODO(https://github.com/quantumlib/Cirq/issues/6655) - remove after fixup
pasqal_circuit = cirq.Circuit(pasqal_circuit.all_operations(),
strategy=cirq.InsertStrategy.NEW) It was added as a workaround for the original circuit: pasqal_circuit = cirq.optimize_for_target_gateset(initial_circuit,
gateset=pasqal_gateset) So this issue is still open to address the bug in I will be trying to look into |
The workaround in #6656 transforms pasqal_circuit so that each moment has exactly one operation.
which fails validation for PasqalVirtualDevice, because it requires one operations per moment (excluding measurements) - Cirq/cirq-pasqal/cirq_pasqal/pasqal_device.py Lines 232 to 235 in 95f6a3f
|
Description of the issue
The cirq-pasqal getting_started.ipynb notebook calls cirq.optimize_for_target_gateset which should produce a circuit that validates w/r to pasqal device, but this fails when run on https://colab.research.google.com/ notebook.
The same notebook passes if run on a local Debian Linux OS. This seems to be cause by different round-off errors of the CPUs, which lead to differing optimized circuits.
The root cause appears to be that
cirq.optimize_for_target_gateset
does not ensure that for PasqalGateset the newcircuit has single-operation moments, they just happen to be so for getting_started.ipynb with a favorable round-off errors.
The optimization may also produce a moment with 2 operations, which fails validation as follows:
How to reproduce the issue
Create and run fresh colab at https://colab.research.google.com
(0, 0): ───@───Z───@───
│ │
(1, 0): ───@───────┼───
│
(2, 0): ───────────X───
OPTIMIZED
(0, 0): ───@───Z──────────────────@───Z─────────────────────
│ │
(1, 0): ───@──────────────────────┼─────────────────────────
│
(2, 0): ───────────PhX(0.5)^0.5───@───PhX(-0.5)^0.5───Z^0───
VALIDATION
ValueError Traceback (most recent call last)
in <cell line: 28>()
26
27 print("\nVALIDATION\n")
---> 28 p_device.validate_circuit(pasqal_circuit)
2 frames
/usr/local/lib/python3.10/dist-packages/cirq_pasqal/pasqal_device.py in validate_circuit(self, circuit)
137 ValueError: If the given circuit can't be run on this device
138 """
--> 139 super().validate_circuit(circuit)
140
141 # Measurements must be in the last non-empty moment
/usr/local/lib/python3.10/dist-packages/cirq/devices/device.py in validate_circuit(self, circuit)
84 """
85 for moment in circuit:
---> 86 self.validate_moment(moment)
87
88 def validate_moment(self, moment: 'cirq.Moment') -> None:
/usr/local/lib/python3.10/dist-packages/cirq_pasqal/pasqal_device.py in validate_moment(self, moment)
233 for operation in moment:
234 if not isinstance(operation.gate, cirq.MeasurementGate):
--> 235 raise ValueError("Cannot do simultaneous gates. Use cirq.InsertStrategy.NEW.")
236
237 def minimal_distance(self) -> float:
ValueError: Cannot do simultaneous gates. Use cirq.InsertStrategy.NEW.
Cirq version
1.4.1
The text was updated successfully, but these errors were encountered: