Skip to main content

Run Quil programs on Microsoft Azure Quantum using pyQuil

Project description

pyquil-for-azure-quantum

This library allows you to use pyQuil to run programs on Azure Quantum against Rigetti targets. Internally, it leverages the azure-quantum package.

Usage

Generally, you use pyQuil normally, with a few differences:

  1. Instead of pyquil.get_qc(), you will use either pyquil_azure_quantum.get_qvm() or pyquil_azure_quantum.get_qpu().
  2. You do not need to have qvm or quilc running in order to run programs through pyquil_azure_quantum. You may still run them if you wish to run QVM locally instead of passing through Azure or if you wish to precompile your programs (e.g., to inspect the exact Quil that will run).
  3. You do not need a QCS account or credentials unless you wish to manually inspect the details of the QPU (e.g., list all qubits).
  4. You must have these environment variables set:
    1. AZURE_QUANTUM_SUBSCRIPTION_ID: The Azure subscription ID where the Quantum Workspace is located.
    2. AZURE_QUANTUM_WORKSPACE_RG: The Azure resource group where the Quantum Workspace is located.
    3. AZURE_QUANTUM_WORKSPACE_NAME: The name of the Quantum Workspace.
    4. AZURE_QUANTUM_WORKSPACE_LOCATION: The region where the Quantum Workspace is located.
  5. You may set environment variables to authenticate with Azure. If you do not, a browser will open to the Azure portal to authenticate.
  6. Whenever possible, you should prefer using AzureQuantumComputer.run_batch() over Program.write_memory(); AzureQuantumComputer.run() to run programs which have multiple parameters. Calling write_memory() followed by run() will still work but will be much slower than running a batch of parameters all at once.

Examples

1. Leveraging Hosted QVM and quilc

With this program, you do not need to run qvm nor quilc locally in order to leverage them, as they can run through Azure Quantum.

from pyquil_for_azure_quantum import get_qpu, get_qvm
from pyquil.gates import CNOT, MEASURE, H
from pyquil.quil import Program
from pyquil.quilbase import Declare

program = Program(
    Declare("ro", "BIT", 2),
    H(0),
    CNOT(0, 1),
    MEASURE(0, ("ro", 0)),
    MEASURE(1, ("ro", 1)),
).wrap_in_numshots_loop(1000)

qpu = get_qpu("Aspen-11")
qvm = get_qvm()

exe = qpu.compile(program)  # This does not run quilc yet.
results = qpu.run(exe)  # Quilc will run in the cloud before executing the program.
qvm_results = qvm.run(exe)  # This runs the program on QVM in the cloud, not locally.

2. Running quilc Locally

You can optionally run quilc yourself and disable the use of quilc in the cloud.

from pyquil_for_azure_quantum import get_qpu
from pyquil.gates import CNOT, MEASURE, H
from pyquil.quil import Program
from pyquil.quilbase import Declare


program = Program(
    Declare("ro", "BIT", 2),
    H(0),
    CNOT(0, 1),
    MEASURE(0, ("ro", 0)),
    MEASURE(1, ("ro", 1)),
).wrap_in_numshots_loop(1000)
qpu = get_qpu("Aspen-11")
native_quil = qpu.compiler.quil_to_native_quil(program)  # quilc must be running locally to compile
exe = qpu.compile(native_quil, to_native_gates=False)  # Skip quilc in the cloud
results = qpu.run(exe)

3. Running Parametrized Circuits in a Batch

When you have a program which should be run across multiple parameters, you can submit all the parameters at once to significantly improve performance.

import numpy as np
from pyquil_for_azure_quantum import get_qpu
from pyquil.gates import MEASURE, RX
from pyquil.quil import Program
from pyquil.quilbase import Declare
from pyquil.quilatom import MemoryReference


program = Program(
    Declare("ro", "BIT", 1),
    Declare("theta", "REAL", 1),
    RX(MemoryReference("theta"), 0),
    MEASURE(0, ("ro", 0)),
).wrap_in_numshots_loop(1000)

qpu = get_qpu("Aspen-11")
compiled = qpu.compile(program)

memory_map = {"theta": [[0.0], [np.pi], [2 * np.pi]]}
results = qpu.run_batch(compiled, memory_map)  # This is a list of results, one for each parameter set.

results_0 = results[0].get_register_map().get("ro")
results_pi = results[1].get_register_map().get("ro")
results_2pi = results[2].get_register_map().get("ro")

Microsoft, Microsoft Azure, and Azure Quantum are trademarks of the Microsoft group of companies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyquil_for_azure_quantum-0.0.3.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

pyquil_for_azure_quantum-0.0.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file pyquil_for_azure_quantum-0.0.3.tar.gz.

File metadata

  • Download URL: pyquil_for_azure_quantum-0.0.3.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.1 CPython/3.10.12 Linux/6.5.0-1015-azure

File hashes

Hashes for pyquil_for_azure_quantum-0.0.3.tar.gz
Algorithm Hash digest
SHA256 7d4c78a993b468b05f64439801f1cffc93cbeaf7a820c2f9c0a2d7c64309d87e
MD5 6e8c40c4ec51b7164c6bb01f8df4fa79
BLAKE2b-256 c3cf24ec73529c69b08e19b4a9c4c95dc4146930906d3cd5a4de0a0394c9a0e4

See more details on using hashes here.

File details

Details for the file pyquil_for_azure_quantum-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for pyquil_for_azure_quantum-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ff4c3fe4705f36f6980dc1e700e8b15b5c08e901b14df8712f0cacfc05109a4b
MD5 d54fae10111cfb9225073e7b62bbb35c
BLAKE2b-256 5a935693e24adfcb79c7aad584cc99543d0c9d2075200889a0a2370f01c96b2d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page