Skip to content

Commit 857dd2c

Browse files
Update neutral atom documentation (#2734)
* Update neutral atom docs Signed-off-by: Dobri Y <[email protected]> * Proper whitespace for docs Signed-off-by: Bettina Heim <[email protected]> --------- Signed-off-by: Dobri Y <[email protected]> Signed-off-by: Bettina Heim <[email protected]> Co-authored-by: Bettina Heim <[email protected]>
1 parent 13c708e commit 857dd2c

File tree

2 files changed

+158
-62
lines changed

2 files changed

+158
-62
lines changed

docs/sphinx/using/backends/hardware/neutralatom.rst

+148-62
Original file line numberDiff line numberDiff line change
@@ -177,56 +177,108 @@ Alternatively, users can set the following environment variables directly.
177177
export PASQAL_PROJECT_ID=<>
178178
179179
180-
Submission from Python
180+
Submitting
181181
`````````````````````````
182+
.. tab:: Python
182183

183-
The target to which quantum kernels are submitted
184-
can be controlled with the ``cudaq::set_target()`` function.
184+
The target to which quantum kernels are submitted
185+
can be controlled with the ``cudaq::set_target()`` function.
185186

186-
.. code:: python
187+
.. code:: python
187188
188-
cudaq.set_target('pasqal')
189+
cudaq.set_target('pasqal')
189190
190191
191-
This accepts an optional argument, ``machine``, which is used in the cloud platform to
192-
select the corresponding Pasqal QPU or emulator to execute on.
193-
See the `Pasqal cloud portal <https://portal.pasqal.cloud/>`__ for an up to date list.
194-
The default value is ``EMU_MPS`` which is an open-source tensor network emulator based on the
195-
Matrix Product State formalism running in Pasqal's cloud platform. You can see the
196-
documentation for the publicly accessible emulator `here <https://pasqal-io.github.io/emulators/latest/emu_mps/>`__.
192+
This accepts an optional argument, ``machine``, which is used in the cloud platform to
193+
select the corresponding Pasqal QPU or emulator to execute on.
194+
See the `Pasqal cloud portal <https://portal.pasqal.cloud/>`__ for an up to date list.
195+
The default value is ``EMU_MPS`` which is an open-source tensor network emulator based on the
196+
Matrix Product State formalism running in Pasqal's cloud platform. You can see the
197+
documentation for the publicly accessible emulator `here <https://pasqal-io.github.io/emulators/latest/emu_mps/>`__.
197198

198-
To target the QPU use the FRESNEL machine name. Note that there are restrictions
199-
regarding the values of the pulses as well as the register layout. We invite you to
200-
consult our `documentation <https://docs.pasqal.com/cloud/fresnel-job>`__. Note that
201-
the CUDA-Q integration currently only works with `arbitrary layouts <https://docs.pasqal.com/cloud/fresnel-job/#arbitrary-layouts>`__
202-
which are implemented with automatic calibration for less than 30 qubits. For jobs
203-
larger than 30 qubits please use the `atom_sites` to define the layout, and use the
204-
`atom_filling` to select sites as filled or not filled in order to define the register.
199+
To target the QPU use the FRESNEL machine name. Note that there are restrictions
200+
regarding the values of the pulses as well as the register layout. We invite you to
201+
consult our `documentation <https://docs.pasqal.com/cloud/fresnel-job>`__. Note that
202+
the CUDA-Q integration currently only works with `arbitrary layouts <https://docs.pasqal.com/cloud/fresnel-job/#arbitrary-layouts>`__
203+
which are implemented with automatic calibration for less than 30 qubits. For jobs
204+
larger than 30 qubits please use the `atom_sites` to define the layout, and use the
205+
`atom_filling` to select sites as filled or not filled in order to define the register.
205206

206-
Due to the nature of the underlying hardware, this target only supports the
207-
``evolve`` and ``evolve_async`` APIs.
208-
The `hamiltonian` must be an `Operator` of the type `RydbergHamiltonian`. The only
209-
other supported parameters are `schedule` (mandatory) and `shots_count` (optional).
207+
Due to the nature of the underlying hardware, this target only supports the
208+
``evolve`` and ``evolve_async`` APIs.
209+
The `hamiltonian` must be an `Operator` of the type `RydbergHamiltonian`. The only
210+
other supported parameters are `schedule` (mandatory) and `shots_count` (optional).
210211

211-
For example,
212+
For example,
212213

213-
.. code:: python
214+
.. code:: python
215+
216+
evolution_result = evolve(RydbergHamiltonian(atom_sites=register,
217+
amplitude=omega,
218+
phase=phi,
219+
delta_global=delta),
220+
schedule=schedule)
221+
222+
The number of shots for a kernel execution can be set through the ``shots_count``
223+
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
224+
set to 100.
225+
226+
.. code:: python
227+
228+
cudaq.evolve(RydbergHamiltonian(...), schedule=s, shots_count=1000)
229+
230+
To see a complete example for using Pasqal's backend, take a look at our :doc:`Python examples <../../examples/hardware_providers>`.
231+
232+
.. tab:: C++
214233

215-
evolution_result = evolve(RydbergHamiltonian(atom_sites=register,
216-
amplitude=omega,
217-
phase=phi,
218-
delta_global=delta),
219-
schedule=schedule)
234+
To target quantum kernel code for execution on Pasqal QPU or simulators,
235+
pass the flag ``--target pasqal`` to the ``nvq++`` compiler.
220236

221-
The number of shots for a kernel execution can be set through the ``shots_count``
222-
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
223-
set to 100.
237+
.. code:: bash
238+
239+
nvq++ --target pasqal src.cpp
240+
241+
You can also pass the flag ``--pasqal-machine`` to select the corresponding Pasqal QPU or emulator to execute on.
242+
See the `Pasqal cloud portal <https://portal.pasqal.cloud/>`__ for an up to date list.
243+
The default value is ``EMU_MPS`` which is an open-source tensor network emulator based on the
244+
Matrix Product State formalism running in Pasqal's cloud platform. You can see the
245+
documentation for the publicly accessible emulator `here <https://pasqal-io.github.io/emulators/latest/emu_mps/>`__.
246+
247+
.. code:: bash
248+
249+
nvq++ --target pasqal --pasqal-machine EMU_FREE src.cpp
250+
251+
To target the QPU use the FRESNEL machine name. Note that there are restrictions
252+
regarding the values of the pulses as well as the register layout. We invite you to
253+
consult our `documentation <https://docs.pasqal.com/cloud/fresnel-job>`__. Note that
254+
the CUDA-Q integration currently only works with `arbitrary layouts <https://docs.pasqal.com/cloud/fresnel-job/#arbitrary-layouts>`__
255+
which are implemented with automatic calibration for less than 30 qubits. For jobs
256+
larger than 30 qubits please use the `atom_sites` to define the layout, and use the
257+
`atom_filling` to select sites as filled or not filled in order to define the register.
258+
259+
Due to the nature of the underlying hardware, this target only supports the
260+
``evolve`` and ``evolve_async`` APIs.
261+
The `hamiltonian` must be of the type `rydberg_hamiltonian`. Only
262+
other parameters supported are `schedule` (mandatory) and `shots_count` (optional).
263+
264+
For example,
224265

225-
.. code:: python
266+
.. code:: cpp
226267
227-
cudaq.evolve(RydbergHamiltonian(...), schedule=s, shots_count=1000)
268+
auto evolution_result = cudaq::evolve(
269+
cudaq::rydberg_hamiltonian(register_sites, omega, phi, delta),
270+
schedule);
271+
272+
The number of shots for a kernel execution can be set through the ``shots_count``
273+
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
274+
set to 100.
275+
276+
.. code:: cpp
277+
278+
auto evolution_result = cudaq::evolve(cudaq::rydberg_hamiltonian(...), schedule, 1000);
279+
280+
To see a complete example for using Pasqal's backend, take a look at our :doc:`C++ examples <../../examples/hardware_providers>`.
228281

229-
To see a complete example for using Pasqal's backend, take a look at our :doc:`Python examples <../../examples/hardware_providers>`.
230282

231283
.. note::
232284

@@ -261,47 +313,81 @@ Alternatively, users can set the following environment variables.
261313
export AWS_SECRET_ACCESS_KEY="<access_key>"
262314
export AWS_SESSION_TOKEN="<token>"
263315
264-
Submission from Python
316+
About Aquila
265317
`````````````````````````
266318

267-
The target to which quantum kernels are submitted
268-
can be controlled with the ``cudaq::set_target()`` function.
269-
270-
.. code:: python
271-
272-
cudaq.set_target('quera')
273-
274-
By default, analog Hamiltonian will be submitted to the Aquila system.
275-
276319
Aquila is a "field programmable qubit array" operated as an analog
277320
Hamiltonian simulator on a user-configurable architecture, executing
278321
programmable coherent quantum dynamics on up to 256 neutral-atom qubits.
279322
Refer to QuEra's `whitepaper <https://cdn.prod.website-files.com/643b94c382e84463a9e52264/648f5bf4d19795aaf36204f7_Whitepaper%20June%2023.pdf>`__ for details.
280323

281-
Due to the nature of the underlying hardware, this target only supports the
282-
``evolve`` and ``evolve_async`` APIs.
283-
The `hamiltonian` must be an `Operator` of the type `RydbergHamiltonian`. Only
284-
other parameters supported are `schedule` (mandatory) and `shots_count` (optional).
324+
Submitting
325+
`````````````````````````
326+
.. tab:: Python
327+
328+
The target to which quantum kernels are submitted
329+
can be controlled with the ``cudaq::set_target()`` function.
330+
331+
.. code:: python
285332
286-
For example,
333+
cudaq.set_target('quera')
287334
288-
.. code:: python
335+
Due to the nature of the underlying hardware, this target only supports the
336+
``evolve`` and ``evolve_async`` APIs.
337+
The `hamiltonian` must be an `Operator` of the type `RydbergHamiltonian`. Only
338+
other parameters supported are `schedule` (mandatory) and `shots_count` (optional).
339+
340+
For example,
341+
342+
.. code:: python
343+
344+
evolution_result = evolve(RydbergHamiltonian(atom_sites=register,
345+
amplitude=omega,
346+
phase=phi,
347+
delta_global=delta),
348+
schedule=schedule)
349+
350+
The number of shots for a kernel execution can be set through the ``shots_count``
351+
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
352+
set to 100.
353+
354+
.. code:: python
355+
356+
cudaq.evolve(RydbergHamiltonian(...), schedule=s, shots_count=1000)
357+
358+
To see a complete example for using QuEra's backend, take a look at our :doc:`Python examples <../../examples/hardware_providers>`.
359+
360+
.. tab:: C++
361+
362+
To target quantum kernel code for execution on QuEra's Aquila,
363+
pass the flag ``--target quera`` to the ``nvq++`` compiler.
364+
365+
.. code:: bash
366+
367+
nvq++ --target quera src.cpp
368+
369+
Due to the nature of the underlying hardware, this target only supports the
370+
``evolve`` and ``evolve_async`` APIs.
371+
The `hamiltonian` must be of the type `rydberg_hamiltonian`. Only
372+
other parameters supported are `schedule` (mandatory) and `shots_count` (optional).
373+
374+
For example,
375+
376+
.. code:: cpp
289377
290-
evolution_result = evolve(RydbergHamiltonian(atom_sites=register,
291-
amplitude=omega,
292-
phase=phi,
293-
delta_global=delta),
294-
schedule=schedule)
378+
auto evolution_result = cudaq::evolve(
379+
cudaq::rydberg_hamiltonian(register_sites, omega, phi, delta),
380+
schedule);
295381
296-
The number of shots for a kernel execution can be set through the ``shots_count``
297-
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
298-
set to 100.
382+
The number of shots for a kernel execution can be set through the ``shots_count``
383+
argument to ``evolve`` or ``evolve_async``. By default, the ``shots_count`` is
384+
set to 100.
299385

300-
.. code:: python
386+
.. code:: cpp
301387
302-
cudaq.evolve(RydbergHamiltonian(...), schedule=s, shots_count=1000)
388+
auto evolution_result = cudaq::evolve(cudaq::rydberg_hamiltonian(...), schedule, 1000);
303389
304-
To see a complete example for using QuEra's backend, take a look at our :doc:`Python examples <../../examples/hardware_providers>`.
390+
To see a complete example for using QuEra's backend, take a look at our :doc:`C++ examples <../../examples/hardware_providers>`.
305391

306392
.. note::
307393

docs/sphinx/using/examples/hardware_providers.rst

+10
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ The following code illustrates how to run kernels on Pasqal's backends.
125125
.. literalinclude:: ../../targets/python/pasqal.py
126126
:language: python
127127

128+
.. tab:: C++
129+
130+
.. literalinclude:: ../../targets/cpp/pasqal.cpp
131+
:language: cpp
132+
128133

129134
Quantinuum
130135
==================================
@@ -151,3 +156,8 @@ The following code illustrates how to run kernels on QuEra's backends.
151156
.. literalinclude:: ../../targets/python/quera_basic.py
152157
:language: python
153158

159+
.. tab:: C++
160+
161+
.. literalinclude:: ../../targets/cpp/quera_basic.cpp
162+
:language: cpp
163+

0 commit comments

Comments
 (0)