Qadence

Latest version: v1.5.2

Safety actively analyzes 634660 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 6

1.2.3

What's Changed
* [BugFix] failing GPSR fix by jpmoutinho in https://github.com/pasqal-io/qadence/pull/270
* [Feature] Added param_prefix to IIA by smitchaudhary in https://github.com/pasqal-io/qadence/pull/273
* [Bugfix] Fix projector matrices by Roland-djee in https://github.com/pasqal-io/qadence/pull/276
* [Docs] Add projector docs by Roland-djee in https://github.com/pasqal-io/qadence/pull/269
* Bump actions/upload-artifact from 3 to 4 by dependabot in https://github.com/pasqal-io/qadence/pull/271
* [Feature] ZNE for pulse stretching by Roland-djee in https://github.com/pasqal-io/qadence/pull/225
* [Docs] Add mitigation docs by Roland-djee in https://github.com/pasqal-io/qadence/pull/265
* [Docs] Add docs measurements by Roland-djee in https://github.com/pasqal-io/qadence/pull/277
* [Feature] Add trainable frequency feature maps by jpmoutinho in https://github.com/pasqal-io/qadence/pull/274

**Full Changelog**: https://github.com/pasqal-io/qadence/compare/v1.2.2...v1.2.3

1.2.2

What's Changed
* [Bugfix] Fix cron syntax for nightly tests. by Roland-djee in https://github.com/pasqal-io/qadence/pull/260
* [Fix] Export available engines for qd+ by nmheim in https://github.com/pasqal-io/qadence/pull/262


**Full Changelog**: https://github.com/pasqal-io/qadence/compare/v1.2.1...v1.2.2

1.2.1

What's Changed
* [Engines, Backends] Add JAX Engine and Horqrux Backend by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/111
* Bump actions/setup-python from 4 to 5 by dependabot in https://github.com/pasqal-io/qadence/pull/248
* [Fix] Add mitigation tolerance by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/251
* [Fix] Handling transformation of multi-dimensional input in Transform… by smitchaudhary in https://github.com/pasqal-io/qadence/pull/254
* Include observable feature params in `model.inputs` by nmheim in https://github.com/pasqal-io/qadence/pull/258

New Contributors
* smitchaudhary made their first contribution in https://github.com/pasqal-io/qadence/pull/254

**Full Changelog**: https://github.com/pasqal-io/qadence/compare/v1.2.0...v1.2.1

---------- IMPORTANT--------------

This release adds a `DIfferentiableBackend` in `JAX` (https://jax.readthedocs.io/en/latest/) along with the 'horqrux' backend (https://github.com/pasqal-io/horqrux), a differentiable state vector simulator in JAX. It supports the differentiation modes `AD` and `GPSR`. The `horqrux` backend can be used via the `low-level API` only at the moment, which means there is no support for QuantumModels and ml_tools yet.

You can however easily train qadence QuantumCircuits using horqrux/JAX.

See an example how to, below:

(taken from https://github.com/pasqal-io/qadence/blob/main/examples/backends/low_level/horqrux_backend.py.)

python
from __future__ import annotations

from typing import Callable

import jax.numpy as jnp
import optax
from jax import Array, jit, value_and_grad
from numpy.typing import ArrayLike

from qadence.backends import backend_factory
from qadence.blocks.utils import chain
from qadence.circuit import QuantumCircuit
from qadence.constructors import feature_map, hea, total_magnetization
from qadence.types import BackendName, DiffMode

backend = BackendName.HORQRUX

num_epochs = 10
n_qubits = 4
depth = 1

fm = feature_map(n_qubits)
circ = QuantumCircuit(n_qubits, chain(fm, hea(n_qubits, depth=depth)))
obs = total_magnetization(n_qubits)

for diff_mode in [DiffMode.AD, DiffMode.GPSR]:
bknd = backend_factory(backend, diff_mode)
conv_circ, conv_obs, embedding_fn, vparams = bknd.convert(circ, obs)
init_params = vparams.copy()
optimizer = optax.adam(learning_rate=0.001)
opt_state = optimizer.init(vparams)

loss: Array
grads: dict[str, Array] 'grads' is the same datatype as 'params'
inputs: dict[str, Array] = {"phi": jnp.array(1.0)}

def optimize_step(params: dict[str, Array], opt_state: Array, grads: dict[str, Array]) -> tuple:
updates, opt_state = optimizer.update(grads, opt_state, params)
params = optax.apply_updates(params, updates)
return params, opt_state

def exp_fn(params: dict[str, Array], inputs: dict[str, Array] = inputs) -> ArrayLike:
return bknd.expectation(conv_circ, conv_obs, embedding_fn(params, inputs))

init_pred = exp_fn(vparams)

def mse_loss(params: dict[str, Array], y_true: Array) -> Array:
expval = exp_fn(params)
return (expval - y_true) ** 2

jit
def train_step(
params: dict,
opt_state: Array,
y_true: Array = jnp.array(1.0, dtype=jnp.float64),
loss_fn: Callable = mse_loss,
) -> tuple:
loss, grads = value_and_grad(loss_fn)(params, y_true)
params, opt_state = optimize_step(params, opt_state, grads)
return loss, params, opt_state

for epoch in range(num_epochs):
loss, vparams, opt_state = train_step(vparams, opt_state)
print(f"epoch {epoch} loss:{loss}")

final_pred = exp_fn(vparams)

print(
f"diff_mode '{diff_mode}: Initial prediction: {init_pred}, initial vparams: {init_params}"
)
print(f"Final prediction: {final_pred}, final vparams: {vparams}")
print("----------")

1.2.0

What's Changed
* [Tests] Extra test for local analog rotations by jpmoutinho in https://github.com/pasqal-io/qadence/pull/223
* [Feature] Projector blocks by Roland-djee in https://github.com/pasqal-io/qadence/pull/208
* [Feature] Add semi-local addressing by vytautas-a in https://github.com/pasqal-io/qadence/pull/184
* [Infra] Run pipeline on windows and mac by awennersteen in https://github.com/pasqal-io/qadence/pull/222
* [Refac] Undeprecate total_magnetization by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/232
* [Docs] Unpin mkdocs by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/235
* [Testing] Fix addressing flaky test and speed up other by jpmoutinho in https://github.com/pasqal-io/qadence/pull/237
* [Fix] Validate state and parameter batch sizes by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/212
* [Refactoring, Feature] More modular add interaction and qubit device prototype by jpmoutinho in https://github.com/pasqal-io/qadence/pull/176
* [Fix] Dagger Methods in ControlBlocks and Scaleblock by vincentelfving in https://github.com/pasqal-io/qadence/pull/219
* [BugFix] Fix parameters arithmetic. by Roland-djee in https://github.com/pasqal-io/qadence/pull/243
* [Feature] Allow turning off the semi-local addressing pattern in pyqtorch backend by jpmoutinho in https://github.com/pasqal-io/qadence/pull/244
* [Feature] Adding MLE implementation by rajaiitp in https://github.com/pasqal-io/qadence/pull/233
* [Feature] Analog feature maps by madagra in https://github.com/pasqal-io/qadence/pull/234

Breaking
* [Bugfix, Feature] Consistent variable ordering in QNNs & `finitediff` function by nmheim in https://github.com/pasqal-io/qadence/pull/206

The QNN constructor now requires an `inputs` argument if the number of feature parameters in the given circuit is >1:
python
fm = qd.kron(
qd.feature_map(2, support=(0,1), param="x"),
qd.feature_map(2, support=(2,3), param="y")
)

ufa = QNN(
qd.QuantumCircuit(4, fm, qd.hea(4,2)),
observable=qd.total_magnetization(4),
inputs = ["x", "y"], if this is not provided, the constructor will error
)

xs = torch.rand(5,2)
ufa(xs)

If the QNN has <=1 parameter, things work as before.
The `inputs` argument is necessary to guarantee the order of variables of the tensors that are passed to the model. Given input tensors `xs = torch.rand(batch_size, input_size:=2)` a QNN with `inputs=("t", "x")` will assign `t, x = xs[:,0], xs[:,1]`.

Features

Analog feature maps

Constructors for creating feature maps with analog blocks or semi-local addressing patterns.

python
import qadence as qd

analog feature map with RX rotation and Chebyshev basis
number of qubits is not specified since the qubit support is global
fm_analog = qd.analog_feature_map(fm_type=qd.BasisSet.CHEBYSHEV, op=qd.AnalogRX)

feature map with semi-local addressing and custom weights on each qubit
n_qubits = 4

1.1.1

What's Changed
* [Fix] `fill_identities` which caused drawing issues by nmheim in https://github.com/pasqal-io/qadence/pull/210


**Full Changelog**: https://github.com/pasqal-io/qadence/compare/v1.1.0...v1.1.1

1.1.0

What's Changed
* [Feature] Error mitigation structure + ZNE for Pulser backend by Roland-djee in https://github.com/pasqal-io/qadence/pull/105
* [Feature] Add coords scaling and distance calculation directly to Register by jpmoutinho in https://github.com/pasqal-io/qadence/pull/186
* [Fix] Control breaking changes in pulser backend spacing config by jpmoutinho in https://github.com/pasqal-io/qadence/pull/191
* [Feature] Identity-initialized QNN by n-toscano in https://github.com/pasqal-io/qadence/pull/157
* [Feature] Pyqtorch - First Order Adjoint Differentiation by dominikandreasseitz in https://github.com/pasqal-io/qadence/pull/155
* [Fix] Export Toffoli gate in operations.py by madagra in https://github.com/pasqal-io/qadence/pull/195
* [Refactoring] Improve mitigation protocol by Roland-djee in https://github.com/pasqal-io/qadence/pull/189

New Contributors
* n-toscano made their first contribution in https://github.com/pasqal-io/qadence/pull/157

**Full Changelog**: https://github.com/pasqal-io/qadence/compare/v1.0.6...v1.0.7

Page 3 of 6

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.