Releases: PennyLaneAI/pennylane-lightning
Release 0.19.0
What's Changed
- Update to development version 0.19 by @trbromley in #150
- Fix C++ compiler warnings by @maliasadi in #147
- Ensure Lightning adheres to C++17 modernization standard with clang-tidy by @mlxd in #153
- Add check-tidy to Makefile by @maliasadi in #156
- Optimise x86_64 builds with AVX friendly opts by @mlxd in #157
- Version Bump
0.19.0
by @github-actions in #163 - Fix OpenMP library issues on M1 Macs by @mlxd in #166
- Fix CI builder release issues by @mlxd in #168
New Contributors
- @github-actions made their first contribution in #163
Full Changelog: v0.18.0...v0.19.0
Release 0.18.0
New features since last release
-
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 bylightning.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
anddefault.qubit
for calculating the
Jacobian of a circuit using the adjoint method for a range of qubit numbers. The circuit
consists of tenBasicEntanglerLayers
with aPauliZ
expectation value calculated on each wire,
repeated over ten runs. We see thatlightning.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)
Improvements
-
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 thedefault.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)
Documentation
-
Added preliminary architecture diagram for package.
(#131) -
C++ API built as part of docs generation.
(#131)
Breaking changes
- Wheels for MacOS <= 10.13 will no longer be provided due to XCode SDK C++17 support requirements.
(#149)
Bug fixes
-
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)
Contributors
This release contains contributions from (in alphabetical order):
Thomas Bromley, Lee James O'Riordan
Release 0.17.0
New features
- C++ layer now supports float (32-bit) and double (64-bit) templated complex data. (#113)
Improvements
-
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)
Breaking changes
-
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)
Bug fixes
-
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)
Documentation
- Added community guidelines. (#109)
Contributors
This release contains contributions from (in alphabetical order):
Ali Asadi, Thomas Bromley, Lee James O'Riordan
Release 0.15.1
Bug fixes
- The PennyLane-Lightning binaries are now built with NumPy 1.19.5, to avoid ABI compatibility issues with the latest NumPy 1.20 release. See the NumPy release notes for more details. (#97)
Contributors
This release contains contributions from (in alphabetical order):
Josh Izaac, Antal Száva
Release 0.15.0
Improvements
-
For compatibility with PennyLane v0.15, the
analytic
keyword argument has been removed. Statistics can still be computed analytically by settingshots=None
. (#93) -
Inverse gates are now supported. (#89)
-
Add new lightweight backend with performance improvements. (#57)
-
Remove the previous Eigen-based backend. (#67)
Bug fixes
- Re-add dispatch table after fixing static initialization order issue. (#68)
Contributors
This release contains contributions from (in alphabetical order):
Thomas Bromley, Theodor Isacsson, Christina Lee, Thomas Loke, Antal Száva.
Release 0.14.1
Bug fixes
- Fixes a bug where the
QNode
would swapLightningQubit
toDefaultQubitAutograd
on device execution due to the inherited
passthru_devices
entry of thecapabilities
dictionary. (#61)
Contributors
This release contains contributions from (in alphabetical order):
Antal Száva
Release 0.14.0
Release 0.12.0
Release 0.11.0
Initial release.
Contributors:
Tom Bromley, Josh Izaac, Nathan Killoran, Antal Száva