Skip to content

Commit 5a143e0

Browse files
authored
Update pasqal getting started tutorial to 1.0 (#5798)
- Tutorial was using PasqalConverter which was removed. - Also added a section on how to insert so each operation is in its own moment.
1 parent 4453167 commit 5a143e0

File tree

1 file changed

+50
-27
lines changed

1 file changed

+50
-27
lines changed

docs/hardware/pasqal/getting_started.ipynb

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@
7676
" print(\"installing cirq...\")\n",
7777
" !pip install --quiet cirq\n",
7878
" print(\"installed cirq.\")\n",
79-
" import cirq"
79+
" import cirq\n",
80+
"import cirq_pasqal\n",
81+
"from cirq_pasqal import ThreeDQubit, TwoDQubit, PasqalVirtualDevice, PasqalNoiseModel"
8082
]
8183
},
8284
{
@@ -90,17 +92,6 @@
9092
"In this notebook, we show how to program a quantum circuit for Pasqal using cirq. The first step is to import cirq, and Pasqal custom classes. We use ``PasqalVirtualDevice`` to showcase how Cirq enforces Pasqal's devices' restrictions throughout the process."
9193
]
9294
},
93-
{
94-
"cell_type": "code",
95-
"execution_count": null,
96-
"metadata": {
97-
"id": "a43542246a0b"
98-
},
99-
"outputs": [],
100-
"source": [
101-
"from cirq_pasqal import ThreeDQubit, TwoDQubit, PasqalVirtualDevice, PasqalNoiseModel"
102-
]
103-
},
10495
{
10596
"cell_type": "markdown",
10697
"metadata": {
@@ -177,8 +168,6 @@
177168
},
178169
"outputs": [],
179170
"source": [
180-
"from cirq_pasqal.pasqal_device import PasqalConverter\n",
181-
"\n",
182171
"# Initialize and create a circuit\n",
183172
"initial_circuit = cirq.Circuit()\n",
184173
"initial_circuit.append(cirq.CZ(p_qubits[0], p_qubits[1]))\n",
@@ -202,9 +191,7 @@
202191
"id": "aa25f2e644ce"
203192
},
204193
"source": [
205-
"Notice that the `CX` gate, also called a `CNOT` gate is not valid on this device. We can use a `PasqalConverter` object to convert it.\n",
206-
"\n",
207-
"This will convert the logical gates into native hardware gates. When inserting into circuits designed for Pasqal devices, be sure to insert each operation into its own `Moment` (for example, using `cirq.InsertStrategy.NEW`)."
194+
"Notice that the `CX` gate, also called a `CNOT` gate is not valid on this device. We can use a `PasqalGateset` object with the built-in cirq method `cirq.optimize_for_target_gateset` to convert it. This will convert the logical gates into native hardware gates. "
208195
]
209196
},
210197
{
@@ -215,17 +202,51 @@
215202
},
216203
"outputs": [],
217204
"source": [
218-
"from cirq.circuits import insert_strategy\n",
219-
"converter = PasqalConverter()\n",
205+
"pasqal_gateset=cirq_pasqal.PasqalGateset(include_additional_controlled_ops=False)\n",
206+
"pasqal_circuit = cirq.optimize_for_target_gateset(initial_circuit,\n",
207+
" gateset=pasqal_gateset)\n",
208+
"print(pasqal_circuit)\n",
220209
"\n",
221-
"pasqal_circuit=cirq.Circuit(*[converter.pasqal_convert(op, keep=p_device.is_pasqal_device_op)\n",
222-
" for op in initial_circuit.all_operations()],\n",
223-
" strategy=cirq.InsertStrategy.NEW)\n",
210+
"# Now the circuit validates correctly!\n",
211+
"p_device.validate_circuit(pasqal_circuit)\n"
212+
]
213+
},
214+
{
215+
"cell_type": "markdown",
216+
"metadata": {
217+
"id": "DkHu3gfNpe2J"
218+
},
219+
"source": [
220+
"When inserting into circuits designed for Pasqal devices, be sure to insert each operation into its own `Moment` (for example, using `cirq.InsertStrategy.NEW`). You may need to do this in a seperate step, as in the below example that converts two simultaneous Hadamard gates."
221+
]
222+
},
223+
{
224+
"cell_type": "code",
225+
"execution_count": null,
226+
"metadata": {
227+
"id": "YtXUHkTfpraF"
228+
},
229+
"outputs": [],
230+
"source": [
231+
"initial_circuit = cirq.Circuit()\n",
232+
"initial_circuit.append(cirq.H(p_qubits[0]))\n",
233+
"initial_circuit.append(cirq.H(p_qubits[1]))\n",
234+
"print('Initial Circuit, does not pass validation:')\n",
235+
"print(initial_circuit)\n",
236+
"try:\n",
237+
" p_device.validate_circuit(initial_circuit)\n",
238+
"except ValueError as e:\n",
239+
" # Uh oh! This circuit does not pass validation.\n",
240+
" print(e)\n",
224241
"\n",
242+
"pasqal_circuit = cirq.Circuit(initial_circuit.all_operations(),\n",
243+
" strategy=cirq.InsertStrategy.NEW)\n",
244+
"print('')\n",
245+
"print('Converted Circuit, passes validation:')\n",
225246
"print(pasqal_circuit)\n",
226247
"\n",
227248
"# Now the circuit validates correctly!\n",
228-
"p_device.validate_circuit(pasqal_circuit)\n"
249+
"p_device.validate_circuit(pasqal_circuit)"
229250
]
230251
},
231252
{
@@ -320,10 +341,11 @@
320341
" yield grover_operator()\n",
321342
" \n",
322343
"def generate_pasqal_grover():\n",
323-
" return cirq.Circuit(\n",
324-
" *[converter.pasqal_convert(op, keep=p_device.is_pasqal_device_op)\n",
325-
" for op in generate_grover()],\n",
326-
" strategy=cirq.InsertStrategy.NEW)\n",
344+
" pasqal_gateset=cirq_pasqal.PasqalGateset(include_additional_controlled_ops=False)\n",
345+
" grover_cicruit = cirq.optimize_for_target_gateset(cirq.Circuit(generate_grover()),\n",
346+
" gateset=pasqal_gateset)\n",
347+
" return cirq.Circuit(grover_cicruit.all_operations(),\n",
348+
" strategy=cirq.InsertStrategy.NEW)\n",
327349
" \n",
328350
"device = PasqalVirtualDevice(control_radius=1.1, qubits=qs) \n",
329351
"grover_circuit = generate_pasqal_grover()\n",
@@ -481,6 +503,7 @@
481503
],
482504
"metadata": {
483505
"colab": {
506+
"collapsed_sections": [],
484507
"name": "getting_started.ipynb",
485508
"toc_visible": true
486509
},

0 commit comments

Comments
 (0)