- Add mid-circuit state preparation operation tests. (#495)
-
Cast integral-valued arrays to the device's complex type on entry in
_preprocess_state_vector
to ensure the state is correctly represented with floating-point numbers. (#501) -
Update DefaultQubit to DefaultQubitLegacy on Lightning fallback. (#500)
-
Enums defined in
GateOperation.hpp
start at1
(previously0
).::BEGIN
is introduced in a few places where it was assumed0
accordingly. (#485) -
Enable pre-commit hooks to format all Python files and linting of all Python source files. (#485)
-
Update setup.py to allow for multi-package co-existence. The PennyLane_Lightning package now is the responsible for the core functionality, and will be depended upon by all other extensions. [(#504)] (#504)
-
Refactor LKokkos
StateVectorKokkos
class to use KokkosRangePolicy
together with special functors inapplyMultiQubitOp
to apply 1- to 4-wire generic unitary gates. For more than 4 wires, the general implementation using KokkosTeamPolicy
is employed to yield the best all-around performance. [(#490)] (#490) -
Refactor LKokkos
Measurements
class to use KokkosRangePolicy
together with special functors to obtain the expectation value of 1- to 4-wire generic unitary gates. For more than 4 wires, the general implementation using KokkosTeamPolicy
is employed to yield the best all-around performance. [(#489)] (#489) -
Add tests to increase LKokkos coverage. (#485)
-
Add memory locality tag reporting and adjoint diff dispatch for
lightning.qubit
statevector classes. (#492) -
Add support for dependent external packages to C++ core. (#482)
-
Add support for building multiple backend simulators. (#497)
- Fix RTD builds by removing unsupported
sytem_packages
configuration option. (#491)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Vincent Michaud-Rioux, Lee J. O'Riordan
-
The
lightning_kokkos
backend supports Nvidia GPU execution (with Kokkos v4 and CUDA v12). (#477) -
Complete overhaul of repository structure to facilitates integration of multiple backends. Refactoring efforts we directed to improve development performance, code reuse and decrease overall overhead to propagate changes through backends. New C++ modular build strategy allows for faster test builds restricted to a module. Update CI/CD actions concurrency strategy. Change minimal Python version to 3.9. [(#472)] (#472)
-
Wheels are built with native support for sparse Hamiltonians. [(#470)] (#470)
-
Add native support to sparse Hamiltonians in the absence of Kokkos & Kokkos-kernels. [(#465)] (#465)
-
Rename
QubitStateVector
toStatePrep
in theLightningQubit
andLightningKokkos
classes. (#486) -
Modify
adjointJacobian
methods to accept a (maybe unused) referenceStateVectorT
, allowing device-backed simulators to directly access state vector data for adjoint differentiation instead of copying it back-and-forth intoJacobianData
(host memory). (#477)
-
Refactor LKokkos
Measurements
class to use (fast) specialized functors whenever possible. [(#481)] (#481) -
Merge Lightning Qubit and Lightning Kokkos backends in the new repository. [(#472)] (#472)
-
Integrated new unified docs for Lightning Kokkos and Lightning Qubit packages. [(#473)] (#473)
-
Ensure PennyLane has an
active_return
attribute before calling it. [(#483)] (#483) -
Do no import
sqrt2_v
from<numbers>
inUtil.hpp
to resolve issue with Lightning-GPU builds. (#479) -
Update the CMake internal references to enable sub-project compilation with affecting the parent package. (#478)
-
apply
no longer mutates the inputted list of operations. (#474)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Christina Lee, Vincent Michaud-Rioux, Lee J. O'Riordan
- Update Kokkos support to 4.0.01. [(#439)] (#439)
- Update tests to be compliant with PennyLane v0.31.0 development changes and deprecations. (#448)
-
Remove logic from
setup.py
and transfer paths and env variable definitions into workflow files. (#450) -
Detect MKL or CBLAS if
ENABLE_BLAS=ON
making sure that BLAS is linked as expected. (#449)
- Fix LightningQubit class parameter documentation. (#456)
-
Ensure cross-platform wheels continue to build with updates in git safety checks. (#452)
-
Fixing Python version bug introduce in (#450) when
Python_EXECUTABLE
was removed fromsetup.py
. (#461) -
Ensure aligned allocator definition works with C++20 compilers. (#438)
-
Prevent multiple threads from calling
Kokkos::initialize
orKokkos::finalize
. (#439)
This release contains contributions from (in alphabetical order):
Vincent Michaud-Rioux, Lee J. O'Riordan, Chae-Yeun Park
-
Add MCMC sampler. [(#384)] (#384)
-
Serialize PennyLane's arithmetic operators when they are used as observables that are expressed in the Pauli basis. (#424)
- Lightning now works with the new return types specification that is now default in PennyLane.
See the PennyLane
qml.enable_return
documentation for more information on this change. (#427)
Instead of creating potentially ragged numpy array, devices and QNode
's now return an object of the same type as that
returned by the quantum function.
>>> dev = qml.device('lightning.qubit', wires=1)
>>> @qml.qnode(dev, diff_method="adjoint")
... def circuit(x):
... qml.RX(x, wires=0)
... return qml.expval(qml.PauliY(0)), qml.expval(qml.PauliZ(0))
>>> x = qml.numpy.array(0.5)
>>> circuit(qml.numpy.array(0.5))
(array(-0.47942554), array(0.87758256))
Interfaces like Jax or Torch handle tuple outputs without issues:
>>> jax.jacobian(circuit)(jax.numpy.array(0.5))
(Array(-0.87758255, dtype=float32, weak_type=True),
Array(-0.47942555, dtype=float32, weak_type=True))
Autograd cannot differentiate an output tuple, so results must be converted to an array before
use with qml.jacobian
:
>>> qml.jacobian(lambda y: qml.numpy.array(circuit(y)))(x)
array([-0.87758256, -0.47942554])
Alternatively, the quantum function itself can return a numpy array of measurements:
>>> dev = qml.device('lightning.qubit', wires=1)
>>> @qml.qnode(dev, diff_method="adjoint")
>>> def circuit2(x):
... qml.RX(x, wires=0)
... return np.array([qml.expval(qml.PauliY(0)), qml.expval(qml.PauliZ(0))])
>>> qml.jacobian(circuit2)(np.array(0.5))
array([-0.87758256, -0.47942554])
-
Remove deprecated
set-output
commands from workflow files. (#437) -
Lightning wheels are now checked with
twine check
post-creation for PyPI compatibility. (#430) -
Lightning has been made compatible with the change in return types specification. (#427)
-
Lightning is compatible with clang-tidy version 16. (#429)
This release contains contributions from (in alphabetical order):
Christina Lee, Vincent Michaud-Rioux, Lee James O'Riordan, Chae-Yeun Park, Matthew Silverman
-
Remove runtime dependency on ninja build system. (#414)
-
Allow better integration and installation support with CMake targeted binary builds. (#403)
-
Remove explicit Numpy and Scipy requirements. (#412)
-
Get
llvm
installation root from the environment variableLLVM_ROOT_DIR
(or fallback tobrew
). (#413) -
Update AVX2/512 kernel infrastructure for additional gate/generator operations. (#404)
-
Remove unnecessary lines for resolving CodeCov issue. (#415)
-
Add more AVX2/512 gate operations. (#393)
-
Ensure error raised when asking for out of order marginal probabilities. Prevents the return of incorrect results. (#416)
-
Fix Github shields in README. (#402)
Amintor Dusko, Vincent Michaud-Rioux, Lee James O'Riordan, Chae-Yeun Park
- Fix Python module versioning for Linux wheels. (#408)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Shuli Shu, Trevor Vincent
- Fix Pybind11 module versioning and locations for Windows wheels. (#400)
This release contains contributions from (in alphabetical order):
Lee J. O'Riordan
- Deprecate support for Python 3.7. (#391)
-
Improve Lightning package structure for external use as a C++ library. (#369)
-
Improve the stopping condition method. (#386)
- Pin CMake to 3.24.x in wheel-builder to avoid Python not found error in CMake 3.25, when building wheels for PennyLane-Lightning-GPU. (#387)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Lee J. O'Riordan
- Enable building of python 3.11 wheels and upgrade python on CI/CD workflows to 3.8. (#381)
-
Update clang-tools version in Github workflows. (#351)
-
Improve tests and checks CI/CD pipelines. (#353)
-
Implement 3 Qubits gates (CSWAP & Toffoli) & 4 Qubits gates (DoubleExcitation, DoubleExcitationMinus, DoubleExcitationPlus) in LM manner. (#362)
-
Upgrade Kokkos and Kokkos Kernels to 3.7.00, and improve sparse matrix-vector multiplication performance and memory usage. (#361)
-
Update Linux (ubuntu-latest) architecture x86_64 wheel-builder from GCC 10.x to GCC 11.x. (#373)
-
Update gcc and g++ 10.x to 11.x in CI tests. This update brings improved support for newer C++ features. (#370)
-
Change Lightning to inherit from QubitDevice instead of DefaultQubit. (#365)
- Use mutex when accessing cache in KernelMap. (#382)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Chae-Yeun Park, Monit Sharma, Shuli Shu
- Fixes the transposition method used in the probability calculation. (#377)
Amintor Dusko
-
Introduces requirements-dev.txt and improves dockerfile. (#330)
-
Support
expval
for a Hamiltonian. (#333) -
Implements caching for Kokkos installation. (#316)
-
Supports measurements of operator arithmetic classes such as
Sum
,Prod
, andSProd
by deferring handling of them toDefaultQubit
. (#349)
@qml.qnode(qml.device('lightning.qubit', wires=2))
def circuit():
obs = qml.s_prod(2.1, qml.PauliZ(0)) + qml.op_sum(qml.PauliX(0), qml.PauliZ(1))
return qml.expval(obs)
-
Test updates to reflect new measurement error messages. (#334)
-
Updates to the release tagger to fix incompatibilities with RTD. (#344)
-
Update cancel-workflow-action and bot credentials. (#345)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Christina Lee, Lee J. O'Riordan, Chae-Yeun Park
-
We explicitly disable support for PennyLane's parameter broadcasting. #317
-
We explicitly remove support for PennyLane's
Sum
,SProd
andProd
as observables. (#326)
-
CI builders use a reduced set of resources and redundant tests for PRs. (#319)
-
Parallelize wheel-builds where applicable. (#314)
-
AVX2/512 kernels are now available on Linux/MacOS with x86-64 architecture. (#313)
- Updated ReadTheDocs runner version from Ubuntu 20.04 to 22.04 (#327)
- Test updates to reflect new additions to PennyLane. (#318)
This release contains contributions from (in alphabetical order):
Amintor Dusko, Christina Lee, Rashid N H M, Lee J. O'Riordan, Chae-Yeun Park
-
Add
SingleExcitation
andDoubleExcitation
qchem gates and generators. (#289) -
Add a new dispatch mechanism for future kernels. (#291)
-
Add
IsingXY
gate operation. (#303) -
Support
qml.state()
in vjp and Hamiltonian in adjoint jacobian. (#294)
-
Codebase is now moving to C++20. The default compiler for Linux is now GCC10. (#295)
-
Minimum macOS version is changed to 10.15 (Catalina). (#295)
-
Split matrix operations, refactor dispatch mechanisms, and add a benchmark suits. (#274)
-
Add native support for the calculation of sparse Hamiltonians' expectation values. Sparse operations are offloaded to Kokkos and Kokkos-Kernels. (#283)
-
Device
lightning.qubit
now accepts a datatype for a statevector. (#290)
dev1 = qml.device('lightning.qubit', wires=4, c_dtype=np.complex64) # for single precision
dev2 = qml.device('lightning.qubit', wires=4, c_dtype=np.complex128) # for double precision
- Use the centralized Xanadu Sphinx Theme to style the Sphinx documentation. (#287)
-
Fix the issue with using available
clang-format
version in format. (#288) -
Fix a bug in the generator of
DoubleExcitationPlus
. (#298)
This release contains contributions from (in alphabetical order):
Mikhail Andrenkov, Ali Asadi, Amintor Dusko, Lee James O'Riordan, Chae-Yeun Park, and Shuli Shu
-
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
intest_measures.py
. (#280)
This release contains contributions from (in alphabetical order):
Ali Asadi, Chae-Yeun Park, Lee James O'Riordan, and Trevor Vincent
- Ensure
Identity
kernel is registered to C++ dispatcher. (#275)
- Add Docker support. (#234)
-
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)
- Use of batching with OpenMP threads is documented. (#221)
-
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
-
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)
-
Add bindings to C++ expval, var, probs. (#214)
-
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!
- Ensure debug info is built into dynamic libraries. (#201)
- New guidelines on adding and benchmarking C++ kernels. (#202)
-
Update clang-format version (#219)
-
Fix failed tests on Windows. (#218)
-
Update clang-format version (#219)
-
Add virtual destructor to C++ state-vector classes. (#200)
-
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
-
Fix missing header-files causing build errors in algorithms module. (#193)
-
Fix failed tests for the non-binary wheel. (#191)
- Introduce CY kernel to Lightning to avoid issues with decomposition. (#203)
This release contains contributions from (in alphabetical order):
Lee J. O'Riordan
-
Fix missing header-files causing build errors in algorithms module. (#193)
-
Fix failed tests for the non-binary wheel. (#191)
-
Add wheel-builder support for Python 3.10. (#186)
-
Add VJP support to PL-Lightning. (#181)
-
Add complex64 support in PL-Lightning. (#177)
-
Added examples folder containing aggregate gate performance test. (#165)
- Update PL-Lightning to support new features in PL. (#179)
- Lightning setup.py build process uses CMake. (#176)
This release contains contributions from (in alphabetical order):
Ali Asadi, Chae-Yeun Park, Isidor Schoch, Lee James O'Riordan
- Add Cache-Friendly DOTC, GEMV, GEMM along with BLAS Support. (#155)
-
The performance of parametric gates has been improved. (#157)
-
AVX support is enabled for Linux users on Intel/AMD platforms. (#157)
-
PennyLane-Lightning has been updated to conform with clang-tidy recommendations for modernization, offering performance improvements across all use-cases. (#153)
- Linux users on
x86_64
must have a CPU supporting AVX. (#157)
- OpenMP built with Intel MacOS CI runners causes failures on M1 Macs. OpenMP is currently disabled in the built wheels until this can be resolved with Github Actions runners. (#166)
This release contains contributions from (in alphabetical order):
Ali Asadi, Lee James O'Riordan
-
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)
-
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 theSKIP_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)
- Wheels for MacOS <= 10.13 will no longer be provided due to XCode SDK C++17 support requirements. (#149)
-
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
- C++ layer now supports float (32-bit) and double (64-bit) templated complex data. (#113)
-
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 and adds support for Python 3.9. (#127) (#128)
-
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)
- PowerPC wheel-builder now successfully compiles modules. (#120)
- Added community guidelines. (#109)
This release contains contributions from (in alphabetical order):
Ali Asadi, Christina Lee, Thomas Bromley, Lee James O'Riordan
- 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)
This release contains contributions from (in alphabetical order):
Josh Izaac, Antal Száva
-
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)
- Re-add dispatch table after fixing static initialisation order issue. (#68)
This release contains contributions from (in alphabetical order):
Thomas Bromley, Theodor Isacsson, Christina Lee, Thomas Loke, Antal Száva.
- Fixes a bug where the
QNode
would swapLightningQubit
toDefaultQubitAutograd
on device execution due to the inheritedpassthru_devices
entry of thecapabilities
dictionary. (#61)
This release contains contributions from (in alphabetical order):
Antal Száva
- Extends support from 16 qubits to 50 qubits. (#52)
- Updates applying basis state preparations to correspond to the
changes in
DefaultQubit
. (#55)
This release contains contributions from (in alphabetical order):
Thomas Loke, Tom Bromley, Josh Izaac, Antal Száva
-
Updates capabilities dictionary to be compatible with core PennyLane (#45)
-
Fix install of Eigen for CI wheel building (#44)
This release contains contributions from (in alphabetical order):
Tom Bromley, Josh Izaac, Antal Száva
Initial release.
This release contains contributions from (in alphabetical order):
Tom Bromley, Josh Izaac, Nathan Killoran, Antal Száva