Platform-dependent engines and model to execute compiled expressions with common set of methods.
Project description
Qadence 2 Platforms
!!! node Qadence 2 Platforms is currently a work in progress and is under active development.
Please be aware that the software is in an early stage, and frequent updates, including breaking changes, are to be expected. This means that:
* Features and functionalities may change without prior notice.
* The codebase is still evolving, and parts of the software may not function as intended.
* Documentation and user guides may be incomplete or subject to significant changes.
Qadence 2 Platforms is a collection of functionalities that transforms Qadence IR into backend-specific data and constructors, to be executed by backend methods. It is not intended to be used directly by Qadence 2 users, but rather those who need to implement or extend backends, quantum instruction primitives, compiler or backend directives, etc.
Installation
Note: it is advised to set up a python environment before installing the package.
To install the current version, there is currently one option:
Installation from Source
Clone this repository by typing on the terminal
git clone https://github.com/pasqal-io/qadence2-platforms.git
Go to qadence2-platforms
folder and install it using hatch:
python -m pip install hatch
and run hatch
to create or reuse the project environment:
hatch -v shell
Description
Platforms
This package should not be used directly by the user. It is used to convert Qadence IR into backend-compatible data, and to execute it with extra options (provided by the compilation process, either on Qadence 2 expressions or Qadence 2 core).
Qadence Intermediate Representation (IR)
Qadence 2 expressions is being compiled into an IR comprised of both quantum and classical operations.
Platforms API
The backend
module exposes a single compile_to_backend
function which accepts a Model
and a string denoting the backend
.
Platforms Backend
Each submodule under backend
is expected (1) to translate the IR
data into backend-compatible data, (2) to provide instruction conversions from IR
to backend, (3) to handle the storage and embedding of parameters, and (4) to implement execution process for run
, sample
and expectation
.
Usage
Example
from qadence2_ir.types import (
Model,
Alloc,
AllocQubits,
Call,
Assign,
QuInstruct,
Support,
Load
)
Model(
register = AllocQubits(
num_qubits = 3,
qubit_positions = [(-2,1), (0,1), (1,3)],
grid_type = "triangular",
grid_scale = 1.0,
options = {"initial_state": "010"}
),
inputs = {
"x": Alloc(1, trainable=False),
"t": Alloc(1, trainable=False), # time
"Omega": Alloc(4, trainable=True), # 4-points amp. modulation
"delta": Alloc(1, trainable=False), # detuning
},
instructions = [
# -- Feature map
Assign("%0", Call("mul", 1.57, Load("x"))),
Assign("%1", Call("sin", Load("%0"))),
QuInstruct("rx", Support(target=(0,)), Load("%1")),
# --
QuInstruct("h", Support.target_all()),
QuInstruct("not", Support(target=(1,), control=(0,))),
QuInstruct(
"qubit_dyn",
Support(control=(0,), target=(2,)),
Load("t"),
Load("Omega"),
Load("delta"),
)
],
directives = {"digital-analog": True},
)
Compiling a pyqtorch
circuit and computing gradients using torch.autograd
import torch
import pyqtorch as pyq
from qadence2_ir.types import (
Model, Alloc, AllocQubits, Load, Call, Support, QuInstruct, Assign
)
from qadence2_platforms.compiler import compile_to_backend
model = Model(
register=AllocQubits(num_qubits=2),
inputs={
"x": Alloc(size=1, trainable=False),
},
instructions=[
Assign("%0", Call("mul", 1.57, Load("x"))),
Assign("%1", Call("sin", Load("%0"))),
QuInstruct("rx", Support(target=(0,)), Load("%1")),
QuInstruct("not", Support(target=(1,), control=(0,))),
],
directives={"digital": True},
)
api = compile_to_backend(model, "pyqtorch")
f_params = {"x": torch.rand(1, requires_grad=True)}
wf = api.run(state=pyq.zero_state(2), values=f_params)
dfdx = torch.autograd.grad(wf, f_params["x"], torch.ones_like(wf))[0]
Documentation
Notice: Documentation in progress.
Contribute
Before making a contribution, please review our code of conduct.
- Submitting Issues: To submit bug reports or feature requests, please use our issue tracker.
- Developing in qadence 2 platforms: To learn more about how to develop within
qadence 2 platforms
, please refer to contributing guidelines.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file qadence2_platforms-0.1.1.tar.gz
.
File metadata
- Download URL: qadence2_platforms-0.1.1.tar.gz
- Upload date:
- Size: 18.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6fb836b51d542f952abf54fbcfaf46e961b0e999a0103fe0c6598838565286b |
|
MD5 | a77920126f7f3766ceccceebd982e136 |
|
BLAKE2b-256 | 68c96dd8c2721e7f7e29acb82ba1fe7c7f8b63d5042280e2d1ec39d95d9af1f7 |
File details
Details for the file qadence2_platforms-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: qadence2_platforms-0.1.1-py3-none-any.whl
- Upload date:
- Size: 22.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d962ed128168ec6d73ba6726b55714367cc86269cb8bb7127e05480c1993be75 |
|
MD5 | 79995480bc7444bc11e5cfe3fbaf3a84 |
|
BLAKE2b-256 | a673bdce15ceb3af9e3b54a36356c3c1bf82c831a1bca16f36cbe02e52c49abf |