The PennyLane-Lightning plugin provides a fast state-vector simulator written in C++ for use with PennyLane
APACHE-2.0 License
Published by chaeyeunpark over 2 years ago
Add generate_samples()
to lightning. (#247)
Add Lightning GBenchmark Suite. (#249)
Support runtime and compile information. (#253)
Add ENABLE_BLAS
build to CI checks. (#249)
Add more clang-tidy
checks and kernel tests. (#253)
Add C++ code coverage to CI. (#265)
Skip over identity operations in "lightning.qubit"
. (#268)
Update tests to remove JacobianTape
. (#260)
Fix tests for MSVC. (#264)
Fix #include <cpuid.h>
for PPC and AArch64 in Linux. (#266)
Remove deprecated tape execution methods. (#270)
Update qml.probs
in test_measures.py
. (#280)
This release contains contributions from (in alphabetical order):
Ali Asadi, Chae-Yeun Park, Lee James O'Riordan, and Trevor Vincent
Published by mlxd over 2 years ago
qml.Identity
kernel is registered to C++ dispatcher. (#275)
Published by mlxd over 2 years ago
Update quantum tapes serialization and Python tests. (#239)
Clang-tidy is now enabled for both tests and examples builds under Github Actions. (#237)
The return type of StateVectorBase
data is now derived-class defined. (#237)
Update adjointJacobian and VJP methods. (#222)
Set GitHub workflow to upload wheels to Test PyPI. (#220)
Finalize the new kernel implementation. (#212)
Fix for OOM errors when using adjoint with large numbers of observables. (#221)
Add virtual destructor to C++ state-vector classes. (#200)
Fix a bug in Python tests with operations' matrix
calls. (#238)
Refactor utility header and fix a bug in linear algebra function with CBLAS. (#228)
This release contains contributions from (in alphabetical order):
Ali Asadi, Chae-Yeun Park, Lee James O'Riordan
Published by mlxd over 2 years ago
Add C++ only benchmark for a given list of gates. (#199)
Wheel-build support for Python 3.10. (#186)
C++ support for probability, expectation value and variance calculations. (#185)
setup.py
adds debug only when --debug is given (#208)
Add new highly-performant C++ kernels for quantum gates. (#202)
The new kernels significantly improve the runtime performance of PennyLane-Lightning
for both differentiable and non-differentiable workflows. Here is an example workflow
using the adjoint differentiation method with a circuit of 5 strongly entangling layers:
import pennylane as qml
from pennylane import numpy as np
from pennylane.templates.layers import StronglyEntanglingLayers
from numpy.random import random
np.random.seed(42)
n_layers = 5
n_wires = 6
dev = qml.device("lightning.qubit", wires=n_wires)
@qml.qnode(dev, diff_method="adjoint")
def circuit(weights):
StronglyEntanglingLayers(weights, wires=list(range(n_wires)))
return [qml.expval(qml.PauliZ(i)) for i in range(n_wires)]
init_weights = np.random.random(StronglyEntanglingLayers.shape(n_layers=n_layers, n_wires=n_wires))
params = np.array(init_weights,requires_grad=True)
jac = qml.jacobian(circuit)(params)
The latest release shows improved performance on both single and multi-threaded evaluations!
Update clang-format version (#219)
Fix failed tests on Windows. (#218)
Fix failed tests for the non-binary wheel. (#213)
Add virtual destructor to C++ state-vector classes. (#200)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Chae-Yeun Park, Lee James O'Riordan
Published by mlxd almost 3 years ago
Published by mlxd almost 3 years ago
Published by mlxd almost 3 years ago
Published by mlxd almost 3 years ago
0.19.0
by @github-actions in https://github.com/PennyLaneAI/pennylane-lightning/pull/163
Full Changelog: https://github.com/PennyLaneAI/pennylane-lightning/compare/v0.18.0...v0.19.0
Published by mlxd about 3 years ago
PennyLane-Lightning now provides a high-performance
adjoint Jacobian method for differentiating quantum circuits.
(#136)
The adjoint method operates after a forward pass by iteratively applying inverse gates to scan
backwards through the circuit. The method is already available in PennyLane's
default.qubit
device, but the version provided by lightning.qubit
integrates with the C++
backend and is more performant, as shown in the plot below:
The plot compares the average runtime of lightning.qubit
and default.qubit
for calculating the
Jacobian of a circuit using the adjoint method for a range of qubit numbers. The circuit
consists of ten BasicEntanglerLayers
with a PauliZ
expectation value calculated on each wire,
repeated over ten runs. We see that lightning.qubit
provides a speedup of around two to eight
times, depending on the number of qubits.
The adjoint method can be accessed using the standard interface. Consider the following circuit:
import pennylane as qml
wires = 3
layers = 2
dev = qml.device("lightning.qubit", wires=wires)
@qml.qnode(dev, diff_method="adjoint")
def circuit(weights):
qml.templates.StronglyEntanglingLayers(weights, wires=range(wires))
return qml.expval(qml.PauliZ(0))
weights = qml.init.strong_ent_layers_normal(layers, wires, seed=1967)
The circuit can be executed and its gradient calculated using:
>>> print(f"Circuit evaluated: {circuit(weights)}")
Circuit evaluated: 0.9801286266677633
>>> print(f"Circuit gradient:\n{qml.grad(circuit)(weights)}")
Circuit gradient:
[[[-1.11022302e-16 -1.63051504e-01 -4.14810501e-04]
[ 1.11022302e-16 -1.50136528e-04 -1.77922957e-04]
[ 0.00000000e+00 -3.92874550e-02 8.14523075e-05]]
[[-1.14472273e-04 3.85963953e-02 0.00000000e+00]
[-5.76791765e-05 -9.78478343e-02 0.00000000e+00]
[-5.55111512e-17 0.00000000e+00 -1.11022302e-16]]]
PennyLane-Lightning now supports all of the operations and observables of default.qubit
.
(#124)
A new state-vector class StateVectorManaged
was added, enabling memory use to be bound to
statevector lifetime.
(#136)
The repository now has a well-defined component hierarchy, allowing each indepedent unit to be
compiled and linked separately.
(#136)
PennyLane-Lightning can now be installed without compiling its C++ binaries and will fall back
to using the default.qubit
implementation. Skipping compilation is achieved by setting the
SKIP_COMPILATION
environment variable, e.g., Linux/MacOS: export SKIP_COMPILATION=True
,
Windows: set SKIP_COMPILATION=True
. This feature is intended for building a pure-Python wheel of
PennyLane-Lightning as a backup for platforms without a dedicated wheel.
(#129)
The C++-backed Python bound methods can now be directly called with wires and supplied parameters.
(#125)
Lightning supports arbitrary unitary and non-unitary gate-calls from Python to C++ layer.
(#121)
Added preliminary architecture diagram for package.
(#131)
C++ API built as part of docs generation.
(#131)
An indexing error in the CRY gate is fixed. (#136)
Column-major data in numpy is now correctly converted to row-major upon pass to the C++ layer.
(#126)
This release contains contributions from (in alphabetical order):
Thomas Bromley, Lee James O'Riordan
Published by antalszava about 3 years ago
The PennyLane device test suite is now included in coverage reports. (#123)
Static versions of jQuery and Bootstrap are no longer included in the CSS theme. (#118)
C++ tests have been ported to use Catch2 framework. (#115)
Testing now exists for both float and double precision methods in C++ layer. (#113) (#115)
Compile-time utility methods with constexpr
have been added. (#113)
Wheel-build support for ARM64 (Linux and MacOS) and PowerPC (Linux) added. (#110)
Add support for Controlled Phase Gate (ControlledPhaseShift
). (#114)
Move changelog to .github
and add a changelog reminder. (#111)
Adds CMake build system support. (#104)
Removes support for Python 3.6. (#127)
Compilers with C++17 support are now required to build C++ module. (#113)
Gate classes have been removed with functionality added to StateVector class. (#113)
We are no longer building wheels for Python 3.6. (#106)
Column-major data in numpy is now correctly converted to row-major upon pass to the C++ layer. (#126)
PowerPC wheel-builder now successfully compiles modules. (#120)
This release contains contributions from (in alphabetical order):
Ali Asadi, Thomas Bromley, Lee James O'Riordan
Published by antalszava over 3 years ago
This release contains contributions from (in alphabetical order):
Josh Izaac, Antal Száva
Published by josh146 over 3 years ago
For compatibility with PennyLane v0.15, the analytic
keyword argument has been removed. Statistics can still be computed analytically by setting shots=None
. (#93)
Inverse gates are now supported. (#89)
Add new lightweight backend with performance improvements. (#57)
Remove the previous Eigen-based backend. (#67)
This release contains contributions from (in alphabetical order):
Thomas Bromley, Theodor Isacsson, Christina Lee, Thomas Loke, Antal Száva.
Published by antalszava over 3 years ago
QNode
would swap LightningQubit
to DefaultQubitAutograd
on device execution due to the inheritedpassthru_devices
entry of the capabilities
dictionary. (#61)
This release contains contributions from (in alphabetical order):
Antal Száva
Published by josh146 over 3 years ago
Published by josh146 about 4 years ago
Published by trbromley about 4 years ago
Initial release.
Tom Bromley, Josh Izaac, Nathan Killoran, Antal Száva