-
Add Exact Tensor Network C++ backend to
lightning.tensor
. (#977) -
Add native N-controlled generators and adjoint support to
lightning.gpu
's single-GPU backend. (#970) -
Add a Catalyst-specific wrapping class for Lightning-Qubit. (#960) (#999)
-
Add native N-controlled gate/matrix operations and adjoint support to
lightning.kokkos
. (#950) -
Add native N-controlled gates support to
lightning.gpu
's single-GPU backend. (#938)
-
Handling for the legacy operator arithmetic (the
Hamiltonian
andTensor
classes in PennyLane) is removed. (#994) (#997) -
Removed all instances of
qml.QubitStateVector
. (#985)
-
Add CUDA dependencies to Lightning GPU and Lightning Tensor Python wheels. (#1025)
-
Replace the
dummy_tensor_update
method with thecutensornetStateCaptureMPS
API to ensure that further gates apply is allowed after thecutensornetStateCompute
call. (#1028) -
Add unit test for measurement with shots for Lightning Tensor with
tn
method. (#1027) -
Update the python layer UI of Lightning Tensor. (#1022)
-
Catalyst device interfaces support dynamic shots, and no longer parses the device init op's attribute dictionary for a static shots literal. (#1017)
-
Update the logic for enabling
grad_on_execution
during device execution. (#1016) -
Reduce flaky test and increase test shots count. (#1015)
-
Add Exact Tensor Network cpp binding. (#1014)
-
Reverse Lightning Qubit generators vector insertion order. (#1009)
-
Update Kokkos version support to 4.5. (#1007)
-
Enable N-controlled gate and matrix support to
lightning.gpu
simulator for Catalyst. (#1005) -
Generalize seeding mechanism for all measurements. (#1003)
-
lightning.qubit
,lightning.gpu
, andlightning.kokkos
now define theeval_jaxpr
method for integration with the experimental capture project. (#1002) -
Update Kokkos version support to 4.4.1 and enable Lightning-Kokkos[CUDA] C++ tests on CI. (#1000)
-
Add C++ unit tests for Exact Tensor Network backends. (#998)
-
Add native BLAS support to the C++ layer via dynamic
scipy-openblas32
loading. (#995) -
Update installation instruction for Lightning-GPU-MPI to explicitly ask users to add
path/to/libmpi.so
to theLD_LIBRARY_PATH
. Update the runtime error message to ensure users know how to fix. (#993) -
The TOML files for the devices are updated to use the new schema for declaring device capabilities. (#988)
-
Optimize lightning.tensor by adding direct MPS sites data set with
qml.MPSPrep
. (#983) -
Unify excitation gates memory layout to row-major for both LGPU and LT. (#959)
-
Update the
lightning.kokkos
CUDA backend for compatibility with Catalyst. (#942)
-
Add the exact tensor network to the Lightning-Tensor docs. (#1021)
-
Update Lightning-Tensor installation docs and usage suggestions. (#979)
-
Add
RTLD_NODELETE
flag todlopen
in order to mitigate the segfault issues for arm64-macos Catalyst support. (#1030) -
Set rpath with
@loader_path
instead of$ORIGIN
for macOS. (#1029) -
Update CUDA version to 12.4 for GPU tests on CI. (#1023)
-
Fix Lightning Kokkos
[[maybe_unused]]
andexp2
errors with hipcc. (#1018) -
Pin
jax[cpu]==0.4.28
for compatibility with PennyLane and Catalyst. (#1019) -
Fix Lightning Kokkos editable mode path. (#1010)
-
Fix the missing
ninja
in Linux AARCH64 wheels recipe. (#1007) -
Fix version switch condition the GPU workflow tests for LGPU and LKokkos. (#1006)
-
Fix issue with
lightning.gpu
Rot operation with adjoint. (#1004) -
Fix the Lightning-Kokkos[CUDA] C++ API
cudaFree
segfaults inapplyMatrix
. (#1000) -
Fix issue with adjoint-jacobian of adjoint ops. (#996)
-
Fix the
upload-pypi
token issues for Linux and MacOS (x86_64 & AARCH64) wheels. (#989) -
Fix Pennylane dependency branch (
v0.39_rc0
tomaster
). (#984) -
Fix PTM stable latest. Removing FIXME patch for v0.39. (#982)
This release contains contributions from (in alphabetical order):
Ali Asadi, Astral Cai, Amintor Dusko, Christina Lee, Joseph Lee, Anton Naim Ibrahim, Luis Alfredo Nuñez Meneses, Andrija Paurevic, Shuli Shu, Raul Torres, Haochen Paul Wang
-
Add support for out-of-order
qml.probs
inlightning.gpu
. (#941) -
Add mid-circuit measurements support to
lightning.gpu
's single-GPU backend. (#931) -
Integrate Lightning-GPU with Catalyst so that hybrid programs can be seamlessly QJIT-compiled and executed on this device following
pip install pennylane-lightning-gpu
. (#928) -
Add
qml.Projector
observable support via diagonalization to Lightning-GPU. (#894) -
Add 1-target wire controlled gate support to
lightning.tensor
. Note thatcutensornet
only supports 1-target wire controlled gate as ofv24.08
. A controlled gate with more than 1 target wire should be converted to dense matrix. (#880) -
Build and upload Lightning-Tensor wheels (x86_64, AARCH64) to PyPI. (#862) (#905)
-
Add Matrix Product Operator (MPO) for all gates support to
lightning.tensor
. Note current C++ implementation only works for MPO sites data provided by users. (#859) -
Add shots measurement support to
lightning.tensor
. (#852) -
Lightning-GPU and Lightning-Kokkos migrated to the new device API. (#853) (#810)
-
Update MacOS wheel build to 13.0 for X86_64 and ARM due to the deprecation of MacOS-12 CI runners. (#969)
-
Deprecate
initSV()
and addresetStateVector()
from the C++ API Lightning-GPU. This is to remove thereset_state
additional call in the Python layer. (#933) -
Deprecate PI gates implementation in Lightning-Qubit. The PI gates were the first implementation of gate kernels in
lightning.qubit
using pre-computed indices, prior to the development of LM (less memory) and AVX kernels. This deprecation is in favour of reducing compilation time and ensuring that Lightning-Qubit only relies on LM kernels in the dynamic dispatcher across all platforms. (#925) -
Remove PowerPC wheel build recipe for Lightning-Qubit. (#902)
-
Update MacOS wheel builds to require Monterey (12.0) or greater for x86_64 and ARM. This was required to update Pybind11 to the latest release (2.13.5) for enabling Numpy 2.0 support in Lightning. (#901)
-
Remove support for Python 3.9 for all Lightning simulators. (#891)
-
Update the
lightning.tensor
Python layer unit tests, aslightning.tensor
cannot be cleaned up like other state-vector devices because the data is attached to the graph. It is recommended to use one device per circuit forlightning.tensor
. (#971) -
Add joint check for the N-controlled wires support in
lightning.qubit
. (#949) -
Optimize
GlobalPhase
andC(GlobalPhase)
gate implementation inlightning.gpu
. (#946) -
Add missing
liblightning_kokkos_catalyst.so
when building Lightning-Kokkos in editable installation. (#945) -
Optimize the cartesian product to reduce the amount of memory necessary to set the
StatePrep
in Lightning-Tensor. (#943) -
Update the
qml.probs
data-return in Lightning-GPU C++ API to align with other state-vector devices. (#941) -
Add zero-state initialization to both
StateVectorCudaManaged
andStateVectorCudaMPI
constructors to remove thereset_state
in the Python layer ctor and refactorsetBasisState(state, wires)
in the C++ API. (#933) -
Add
setStateVector(state, wire)
support to the Lightning-GPU C++ API. (#930) -
The
generate_samples
methods oflightning.qubit
andlightning.kokkos
can now take in a seed number to make the generated samples deterministic. This can be useful when, among other things, fixing flaky tests in CI. (#927) -
Remove dynamic decomposition rules for all Lightning devices. (#926)
-
Always decompose
qml.QFT
in all Lightning devices. (#924) -
Uniform Python format to adhere PennyLane style. (#924)
-
Add the
ci:use-gpu-runner
GitHub label tolightning.kokkos
GPU Testing CIs. (#916) -
Update the test suite to remove deprecated code. (#912)
-
Merge
lightning.gpu
andlightning.tensor
GPU tests in single Python and C++ CIs controlled by theci:use-gpu-runner
label. (#911) -
Skip the compilation of Lightning simulators and development requirements to boost the build of public docs up to 5x. (#904)
-
Build Lightning wheels in
Release
mode to reduce the binary sizes. (#903) -
Update Pybind11 to 2.13.5. (#901)
-
Migrate wheels artifacts to v4. (#893)
-
Update GitHub actions in response to a high-severity vulnerability. (#887)
-
Optimize and simplify controlled kernels in Lightning-Qubit. (#882)
-
Optimize gate cache recording for Lightning-Tensor C++ API. (#879)
-
Unify Lightning-Kokkos and Lightning-Qubit devices under a Lightning-Base abstracted class. (#876)
-
Smarter defaults for the
split_obs
argument in the serializer. The serializer splits linear combinations into chunks instead of all their terms. (#873) -
Prefer
tomlkit
overtoml
for building Lightning wheels, and choosetomli
andtomllib
overtoml
when installing the package. (#857) -
Lightning-Kokkos gains native support for the
PauliRot
gate. (#855)
-
Update Lightning-Tensor installation docs and usage suggestions. (#971) (#972)
-
Update
README.rst
installation instructions forlightning.gpu
andlightning.tensor
. (#957) -
Update
lightning.tensor
documentation to include all the new features added since pull request #756. The new features are: 1. Finite-shot measurements; 2. Expval-base quantities; 3. Support forqml.state()
andqml.stateprep()
; 4. Support for all gates support via Matrix Product Operator (MPO). (#909)
-
Fix Lightning Kokkos test_device for
kokkos_args
fail for MacOS due tonp.complex256
(#974) -
Fix PTM stable-latest related to
default.qubit.legacy
and thelatest
flag usage. (#961) (#966) -
Fix build failure for Lightning-Kokkos editable installation on MacOS due to
liblightning_kokkos_catalyst.so
copy andliblightning_kokkos_catalyst.so
not copied to correct build path for editable installation. (#947) (#968) -
Add concept restriction to ensure
ConstMult
inline function only hit with arithmetic-values times complex values. Fixes build failures with the test suite when enabling OpenMP, and disabling BLAS and Python under clang. (#936) -
Bug fix for
applyMatrix
in Lightning-Tensor. Matrix operator data is not stored in thecuGateCache
object to supportTensorProd
obs with multipleHermitian
obs. (#932) -
Bug fix for
_pauli_word
ofQuantumScriptSerializer
._pauli_word
can processPauliWord
object:I
. (#919) -
Bug fix for analytic
qml.probs
in the Lightning-Tensor C++ API. (#906)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Diego Guala, Joseph Lee, Luis Alfredo Nuñez Meneses, Vincent Michaud-Rioux, Lee J. O'Riordan, Mudit Pandey, Shuli Shu, Haochen Paul Wang
-
Add
qml.StatePrep()
andqml.QubitStateVector()
support tolightning.tensor
. (#849) -
Add analytic
qml.probs()
measurement support tolightning.tensor
. (#830) -
Add
qml.state()
measurement support tolightning.tensor
. (#827) -
Add Lightning-GPU Linux (AArch64 + GraceHopper) wheels to PyPI. (#815)
-
Add
var
support tolightning.tensor
. Note thatvar
support is added viaobs**2
and this implementation scales asO(num_obs**2)
. (#804)
-
Update python packaging to follow PEP 517/518/621/660 standards. (#832)
-
Add
getData()
in thelightning.tensor
C++ backend. Users are responsible for ensuring sufficient host memory is allocated for the full state vector. (#827) -
Remove
NDpermuter.hpp
which is no longer required. (#795) -
Remove temporary steps from the CI, such as downgrading Scipy to <1.14 and installing Kokkos v4.2 for
lightning-version == 'stable'
. (#792) -
Do not run GPU tests and Docker workflows on release. (#788)
-
Update python packaging to follow PEP 517/518/621/660 standards. (#832)
-
Updated calls of
size_t
tostd::size_t
everywhere. (#816) -
Update Lightning tests to support the generalization of basis state preparation. (#864)
-
Add
SetState
andSetBasisState
toLightning-KokkosSimulator
. (#861) -
Remove use of the deprecated
Operator.expand
in favour ofOperator.decomposition
. (#846) -
The
setBasisState
andsetStateVector
methods ofStateVectorLQubit
andStateVectorKokkos
are overloaded to support PennyLane-like parameters. (#843) -
Move
setBasisState
,setStateVector
andresetStateVector
fromStateVectorLQubitManaged
toStateVectorLQubit
. (#841) -
Update
generate_samples
in Lightning-Kokkos and Lightning-GPU to supportqml.measurements.Shots
type instances. (#839) -
Add a Catalyst-specific wrapping class for Lightning Kokkos. (#837) (#770)
-
Lightning-Qubit natively supports the
PauliRot
gate. (#834) -
Multiple calls to the
append_mps_final_state()
API is allowed inlightning.tensor
. (#830) -
Add
initial_state_prep
option to Catalyst TOML file. (#826) -
ENABLE_LAPACK
isOFF
by default for all Lightning backends. (#825) -
Update
ctrl_decomp_zyz
tests withlen(control_wires) > 1
. (#821) -
Update the Catalyst-specific wrapping class for Lightning Kokkos to track Catalyst's new support for MCM seeding. (#819)
-
Replace
size_t
bystd::size_t
everywhere. (#816) -
Shot batching is made more efficient by executing all the shots in one go on Lightning-Qubit. (#814)
-
Lightning-Qubit calls
generate_samples(wires)
on a minimal subset of wires when executing in finite-shot mode. (#813) -
Update
LightingQubit.preprocess
to work with changes to preprocessing for mid-circuit measurements. (#812) -
Avoid unnecessary memory reset in Lightning-Qubit's state vector class constructor. (#811)
-
Add
generate_samples(wires)
support in Lightning-Qubit, which samples faster for a subset of wires. (#809) -
Optimize the OpenMP parallelization of Lightning-Qubit's
probs
for all number of targets. (#807) -
Optimize
probs(wires)
of Lightning-Kokkos using various kernels. Which kernel is to be used depends on the device, number of qubits and number of target wires. (#802) -
Add GPU device compute capability check for Lightning-Tensor. (#803)
-
Refactor CUDA utils Python bindings to a separate module. (#801)
-
Parallelize Lightning-Qubit
probs
with OpenMP when using the-DLQ_ENABLE_KERNEL_OMP=1
CMake argument. (#800) -
Implement
probs(wires)
using a bit-shift implementation akin to the gate kernels in Lightning-Qubit. (#795) -
Enable setting the PennyLane version when invoking, for example,
make docker-build version=master pl_version=master
. (#791)
-
The installation instructions for all lightning plugins have been improved. (#858) (#851)
-
Updated the README and added citation format for Lightning arXiv preprint. (#818)
-
Point to the right Lightning root folder independently from the invocation location, when configuring the project. (#874)
-
Update dependencies and
build
command options following changes in the build system. (#863) -
Replace structured bindings by variables in
GateImplementationsLM.hpp
. (#856) -
Remove wrong
-m
when callingsetup.py
. (#854) -
Fix plugin-test-matrix CI/CD workflows. (#850)
-
Set the
immutable
parameter value asfalse
for thecutensornetStateApplyTensorOperator
to allow the followingcutensornetStateUpdateTensorOperator
call. (#845) -
Fix cuQuantum SDK path pass-though in CMake. (#831)
-
Fix CUDA sync issues on AArch64 + GraceHopper. (#823)
-
Check for the number of wires for Hermitian observables in Lightning-Tensor. Only 1-wire Hermitian observables are supported as of
cuTensorNet-v24.03.0
. (#806) -
Set
PL_BACKEND
for the entirebuild-wheel-lightning-gpu
Docker-build stage to properly build the Lightning-GPU wheel. (#791) -
Fix conditions for skipping build & push steps in the Docker build workflows. (#790)
-
Downgrade Scipy on Lightning stable version tests. (#783)
-
Fix checkout command in test workflows for rc branches. (#777)
-
Point to the right Lightning root folder independently from the invocation location, when configuring the project. (#874)
This release contains contributions from (in alphabetical order):
Ali Asadi, Astral Cai, Ahmed Darwish, Amintor Dusko, Vincent Michaud-Rioux, Luis Alfredo Nuñez Meneses, Erick Ochoa Lopez, Lee J. O'Riordan, Mudit Pandey, Shuli Shu, Raul Torres, Paul Haochen Wang
-
Implement Python interface to the
lightning.tensor
device. (#748) -
Add
inverse
support for gate operations inlightning.tensor
in the C++ layer. (#753) -
Add
observable
andexpval
support to thecutensornet
-backedlightning.tensor
C++ layer. (#728) -
Add gate support to
cutensornet
-backedlightning.tensor
C++ layer. (#718) -
Add
cutensornet
-backedMPS
C++ layer tolightning.tensor
. (#704) -
Add support for
C(BlockEncode)
to Lightning devices. (#743)
-
Removed the
QuimbMPS
class and the corresponding backend fromlightning.tensor
. (#737) -
Changed the name of
default.tensor
tolightning.tensor
with thequimb
backend. (#730) -
dynamic_one_shot
uses shot-vectors in the auxiliary tape to tell the device how many times to repeat the tape. Lightning-Qubit is updated accordingly. (#724) -
dynamic_one_shot
deals with post-selection during the post-processing phase, so Lightning-Qubit does not returnNone
-valued measurements for mismatching samples anymore. (#720)
-
Release candidate branches automatically use the new large GitHub runner pool. (#769)
-
Lightning-Kokkos dev wheels for MacOS (x86_64, ARM64) and Linux (AArch64) are uploaded to TestPyPI upon merging a pull request. (#765)
-
Lightning-Kokkos Linux (x86_64) dev wheels are pushed to Test PyPI upon merging a pull request. (#763)
-
Change the type of tensor network objects passed to
ObservablesTNCuda
andMeasurementsTNCuda
classes fromStateTensorT
toTensorNetT
. (#759) -
Silence
NDPermuter
linting warnings. (#750) -
Rationalize MCM tests, removing most end-to-end tests from the native MCM test file, but keeping one that validates multiple mid-circuit measurements with any allowed return. (#754)
-
Rename
lightning.tensor
C++ libraries. (#755) -
Set
state_tensor
asconst
for theMeasurementTNCuda
class. (#753) -
Updated Kokkos version and support to 4.3.01. (#725)
-
Lightning-Kokkos' functors are rewritten as functions wrapping around generic gate and generator functors templated over a coefficient interaction function. This reduces boilerplate while clarifying how the various kernels differ from one another. (#640)
-
Update C++ and Python GitHub actions names to include the matrix info. (#717)
-
Remove
CPhase
in favour ofCPhaseShift
in Lightning devices. (#717) -
The various OpenMP configurations of Lightning-Qubit are tested in parallel on different Github Actions runners. (#712)
-
Update Linux wheels to use
manylinux_2_28
images. (#667) -
Add support for
qml.expval
andqml.var
in thelightning.tensor
device for thequimb
interface and the MPS method. (#686) -
Changed the name of
lightning.tensor
todefault.tensor
with thequimb
backend. (#719) -
lightning.qubit
andlightning.kokkos
adhere to user-specified mid-circuit measurement configuration options. (#736) -
Patch the C++
Measurements.probs(wires)
method in Lightning-Qubit and Lightning-Kokkos toMeasurements.probs()
when called with all wires. This will trigger a more optimized implementation for calculating the probabilities of the entire system. (#744) -
Remove the daily schedule from the "Compat Check w/PL - release/release" GitHub action. (#746)
-
Remove the required
scipy
config file for Lightning-Qubit. The support is now maintained by passingSCIPY_LIBS_PATH
to the compiler. (#775)
- Add installation instructions and documentation for
lightning.tensor
. (#756)
-
Don't route
probs(wires=[])
toprobs(all_wires)
in Lightning-Kokkos. (#762) -
ControlledQubitUnitary
is present in the Python device but not the TOML files. It is added to the decomposition gates since it can be implemented in its alternate form ofC(QubitUnitary)
. (#767) -
Update the Lightning TOML files to indicate that non-commuting observables are supported. (#764)
-
Fix regex matching issue with auto on-boarding of release candidate branch to using the large runner queue. (#774)
-
Fix random CI failures for
lightning.tensor
Python unit tests and ignorelightning_tensor
paths. (#761) -
lightning.qubit
andlightning.kokkos
useqml.ops.Conditional.base
instead ofqml.ops.Conditional.then_op
. (#752) -
The preprocessing step in
lightning.qubit
now uses interface information to properly support the hardware-like postselection for mid-circuit measurements. (#760) -
Fix AVX streaming operation support with newer GCC. (#729)
-
Revert changes calling the templated
IMAG
,ONE
,ZERO
functions in Kokkos kernels since they are incompatible with device execution. (#733) -
The
tests_lkcpu_python.yml
workflow properly checks out the release or stable version of Lightning-Qubit during the test job. (#723) -
Fix PennyLane Lightning-Kokkos and Lightning-Qubit tests for stable/stable configuration. (#734)
-
Remove the Autoray dependency from requirement files. (#736)
-
Fix the
cuda-runtime-12-0
dependency issue on RHEL8. (#739) -
Fix the memory segmentation fault when initializing zero-wire Lightning-Kokkos. (#757)
-
Remove
pennylane.ops.op_math.controlled_decompositions.ctrl_decomp_zyz
tests withlen(control_wires) > 1
. (#757) -
Add support for Scipy v1.14. (#776)
-
Add pickle support for the
DevPool
object inlightning.gpu
. (#772)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Lillian Frederiksen, Pietropaolo Frisoni, David Ittah, Vincent Michaud-Rioux, Lee James O'Riordan, Mudit Pandey, Shuli Shu, Jay Soni
-
Add
cutensornet
-backedMPS
C++ layer tolightning.tensor
. (#704) -
Add Python class for the
lightning.tensor
device which uses the new device API and the interface forquimb
based on the MPS method. (#671) -
Add compile-time support for AVX2/512 streaming operations in
lightning.qubit
. (#664) -
lightning.kokkos
supports mid-circuit measurements. (#672) -
Add dynamic linking to LAPACK/OpenBlas shared objects in
scipy.libs
for both C++ and Python layer. (#653) -
lightning.qubit
supports mid-circuit measurements. (#650) -
Add finite shots support in
lightning.qubit2
. (#630) -
Add
collapse
andnormalize
methods to theStateVectorLQubit
classes, enabling "branching" of the wavefunction. Add methods to create and seed an RNG in theMeasurements
modules. (#645) -
Add two new Python classes (LightningStateVector and LightningMeasurements) to support
lightning.qubit2
. (#613) -
Add analytic-mode
qml.probs
andqml.var
support inlightning.qubit2
. (#627) -
Add
LightningAdjointJacobian
to supportlightning.qubit2
. (#631) -
Add
lightning.qubit2
device which uses the new device API. (#607) (#628) -
Add Vector-Jacobian Product calculation support to
lightning.qubit
. (#644) -
Add support for using new operator arithmetic as the default. (#649)
-
Split Lightning-Qubit and Lightning-Kokkos CPU Python tests with
pytest-split
. RemoveSERIAL
from Kokkos'exec_model
matrix. Removeall
from Lightning-Kokkos'pl_backend
matrix. Moveclang-tidy
checks totidy.yml
. Avoid editablepip
installations. (#696) -
Update
lightning.gpu
andlightning.kokkos
to raise an error instead of falling back todefault.qubit
. (#689) -
Add
paths
directives to test workflows to avoid running tests that cannot be impacted by changes. (#699) (#695) -
Move common components of
/src/simulator/lightning_gpu/utils/
to/src/utils/cuda_utils/
. (#676) -
Deprecate static LAPACK linking support. (#653)
-
Migrate
lightning.qubit
to the new device API. (#646) -
Introduce
ci:build_wheels
label, which controls wheel building onpull_request
and other triggers. (#648) -
Remove building wheels for Lightning Kokkos on Windows. (#693)
-
Add tests for Windows Wheels, fix ill-defined caching, and set the proper backend for
lightning.kokkos
wheels. (#693) -
Replace string comparisons by
isinstance
checks where possible. (#691) -
Refactor
cuda_utils
to remove its dependency oncustatevec.h
. (#681) -
Add
test_templates.py
module where Grover and QSVT are tested. (#684) -
Create
cuda_utils
for common usage of CUDA related backends. (#676) -
Refactor
lightning_gpu_utils
unit tests to remove the dependency on statevector class. (#675) -
Upgrade GitHub actions versions from v3 to v4. (#669)
-
Initialize the private attributes
gates_indices_
andgenerators_indices_
ofStateVectorKokkos
using the definitions of thePennylane::Gates::Constant
namespace. (#641) -
Add
isort
torequirements-dev.txt
and run beforeblack
uponmake format
to sort Python imports. (#623) -
Improve support for new operator arithmetic with
QuantumScriptSerializer.serialize_observables
. (#670) -
Add
workflow_dispatch
to wheels recipes; allowing developers to build wheels manually on a branch instead of temporarily changing the headers. (#679) -
Add the
ENABLE_LAPACK
compilation flag to toggle dynamic linking to LAPACK library. (#678)
-
Fix wire order permutations when using
qml.probs
with out-of-order wires in Lightning-Qubit. (#707) -
Lightning-Qubit once again respects the wire order specified on device instantiation. (#705)
-
dynamic_one_shot
was refactored to useSampleMP
measurements as a way to return the mid-circuit measurement samples.LightningQubit's
simulate` is modified accordingly. (#694) -
Lightning-Qubit correctly decomposes state prep operations when used in the middle of a circuit. (#687)
-
Lightning-Qubit correctly decomposes
qml.QFT
andqml.GroverOperator
iflen(wires)
is greater than 9 and 12 respectively. (#687) -
Specify
isort
--py
(Python version) and-l
(max line length) to stabilizeisort
across Python versions and environments. (#647) -
Fix random
coverage xml
CI issues. (#635) -
lightning.qubit
correctly decomposed state preparation operations with adjoint differentiation. (#661) -
Fix the failed observable serialization unit tests. (#683)
-
Update the Lightning-Qubit new device API to work with Catalyst. (#665)
-
Update the version of
codecov-action
to v4 and fix the CodeCov issue with the PL-Lightning check-compatibility actions. (#682) -
Refactor of dev prerelease auto-update-version workflow. (#685)
-
Remove gates unsupported by catalyst from TOML file. (#698)
-
Increase tolerance for a flaky test. (#703)
-
Remove
ControlledQubitUnitary
in favour ofC(QubitUnitary)
from the list of supported operations and the device TOML file. Thestopping_condition
method guarantees the consistency of decompositions. (#758) -
Raise a clear error message with initialization of
lightning.kokkos
with zero-qubit on Windows. (#758)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Pietropaolo Frisoni, Thomas Germain, Christina Lee, Erick Ochoa Lopez, Vincent Michaud-Rioux, Rashid N H M, Lee James O'Riordan, Mudit Pandey, Shuli Shu
- Use the
adjoint
gate parameter to applyqml.Adjoint
operations instead of matrix methods inlightning.qubit
. (#632)
-
Fix
qml.Adjoint
support inlightning.gpu
andlightning.kokkos
. (#632) -
Fix finite shots support in
lightning.qubit
,lightning.gpu
andlightning.kokkos
. The bug would impact calculations with measurements on observables with non-trivial diagonalizing gates and calculations with shot vectors. (#632)
This release contains contributions from (in alphabetical order):
Vincent Michaud-Rioux
-
All backends now support
GlobalPhase
andC(GlobalPhase)
in forward pass. (#579) -
Add Hermitian observable support for shot-noise measurement and Lapack support. (#569)
- Migrate
lightning.gpu
to CUDA 12. (#606)
-
Expand error values and strings returned from CUDA libraries. (#617)
-
C(MultiRZ)
andC(Rot)
gates are natively supported (withLM
kernels). (#614) -
Add adjoint support for
GlobalPhase
in Lightning-GPU and Lightning-Kokkos. (#615) -
Lower the overheads of Windows CI tests. (#610)
-
Decouple LightningQubit memory ownership from numpy and migrate it to Lightning-Qubit managed state-vector class. (#601)
-
Expand support for Projector observables on Lightning-Kokkos. (#601)
-
Split Docker build cron job into two jobs: master and latest. This is mainly for reporting in the
plugin-test-matrix
repo. (#600) -
The
BlockEncode
operation from PennyLane is now supported on all Lightning devices. (#599) -
OpenMP acceleration can now be enabled at compile time for all
lightning.qubit
gate kernels using the-DLQ_ENABLE_KERNEL_OMP=1
CMake argument. (#510) -
Enable building Docker images for any branch or tag. Set the Docker build cron job to build images for the latest release and
master
. (#598) -
Enable choosing the PennyLane-Lightning version and disabling push to Docker Hub in the Docker build workflow. Add a cron job calling the Docker build workflow. (#597)
-
Pull Kokkos v4.2.00 from the official Kokkos repository to test Lightning-Kokkos with the CUDA backend. (#596)
-
Remove deprecated MeasurementProcess.name. (#605)
- Update requirements to build the documentation. (#594)
-
Downgrade auditwheel due to changes with library exclusion list. (#620)
-
List
GlobalPhase
gate in each device's TOML file. (#615) -
Lightning-GPU's gate cache failed to distinguish between certain gates. For example,
MultiControlledX([0, 1, 2], "111")
andMultiControlledX([0, 2], "00")
were applied as the same operation. This could happen with (at least) the following gates:QubitUnitary
,ControlledQubitUnitary
,MultiControlledX
,DiagonalQubitUnitary
,PSWAP
,OrbitalRotation
. (#579) -
Ensure the stopping condition decompositions are respected for larger templated QFT and Grover operators. (#609)
-
Move concurrency group specifications from reusable Docker build workflow to the root workflows. (#604)
-
Fix
lightning-kokkos-cuda
Docker build and add CI workflow to build images and push to Docker Hub. (#593) -
Update jax.config imports. (#619)
-
Fix apply state vector when using a Lightning handle. (#622)
-
Pinning Pytest to a version compatible with Flaky. (#624)
This release contains contributions from (in alphabetical order):
Amintor Dusko, David Ittah, Vincent Michaud-Rioux, Lee J. O'Riordan, Shuli Shu, Matthew Silverman
-
Support added for Python 3.12 wheel builds. (#541)
-
Lightning-Qubit support arbitrary controlled gates (any wires and any control values). The kernels are implemented in the
LM
module. (#576) -
Shot-noise related methods now accommodate observable objects with arbitrary eigenvalues. Add a Kronecker product method for two diagonal matrices. (#570)
-
Add shot-noise support for probs in the C++ layer. Probabilities are calculated from generated samples. All Lightning backends support this feature. Please note that target wires should be sorted in ascending manner. (#568)
-
Add
LM
kernels to apply arbitrary controlled operations efficiently. (#516) -
Add shots support for variance value, probs, sample, counts calculation for given observables (
NamedObs
,TensorProd
andHamiltonian
) based on Pauli words,Identity
andHadamard
in the C++ layer. All Lightning backends support this support feature. (#561) -
Add shots support for expectation value calculation for given observables (
NamedObs
,TensorProd
andHamiltonian
) based on Pauli words,Identity
andHadamard
in the C++ layer by addingmeasure_with_samples
to the measurement interface. All Lightning backends support this support feature. (#556) -
qml.QubitUnitary
operators can be included in a circuit differentiated with the adjoint method. Lightning handles circuits with arbitrary non-differentiableqml.QubitUnitary
operators. 1,2-qubitqml.QubitUnitary
operators with differentiable parameters can be differentiated using decomposition. [(#540)] (#540)
-
Set the default version of Kokkos to 4.2.00 throughout the project (CMake, CI, etc.) [(#578)] (#578)
-
Overload
applyOperation
with a fifthmatrix
argument to all state vector classes to support arbitrary operations inAdjointJacobianBase
. [(#540)] (#540)
-
Ensure aligned memory used for numpy arrays with state-vector without reallocations. (#572)
-
Unify error messages of shot measurement related unsupported observables to better Catalyst. (#577)
-
Add configuration files to improve compatibility with Catalyst. (#566)
-
Refactor shot-noise related methods of MeasurementsBase class in the C++ layer and eigenvalues are not limited to
1
and-1
. AddgetObs()
method to Observables class. RefactorapplyInPlaceShots
to allow users to get eigenvalues of Observables object. Deprecated_preprocess_state
method inMeasurementsBase
class for safer use of theLightningQubitRaw
backend. (#570) -
Modify
setup.py
to use backend-specific build directory (f"build_{backend}"
) to accelerate rebuilding backends in alternance. [(#540)] (#540) -
Update Dockerfile and rewrite the
build-wheel-lightning-gpu
stage to build Lightning-GPU from thepennylane-lightning
monorepo. [(#539)] (#539) -
Add the MPI test CI workflows of Lightning-GPU in compatibility cron jobs. [(#536)] (#536)
-
Add MPI synchronization in places to safely handle communicated data. (#538)
-
Add release option in compatibility cron jobs to test the release candidates of PennyLane and the Lightning plugins against one another. [(#531)] (#531)
-
Add GPU workflows in compatibility cron jobs to test Lightning-GPU and Lightning-Kokkos with the Kokkos CUDA backend. [(#528)] (#528)
-
Fixed a small typo in the documentation page for the PennyLane-Lightning GPU device. (#563)
-
Add OpenGraph social preview for Lightning docs. (#574)
-
Fix CodeCov file contention issue when uploading data from many workloads. (#584)
-
Ensure the
lightning.gpu
intermediate wheel builds are uploaded to TestPyPI. (#575) -
Allow support for newer clang-tidy versions on non-x86_64 platforms. (#567)
-
Do not run C++ tests when testing for compatibility with PennyLane, hence fixing plugin-matrix failures. Fix Lightning-GPU workflow trigger. (#571)
-
Revert single-node multi-GPU batching behaviour to match PennyLaneAI/pennylane-lightning-gpu#27. (#564)
-
Move deprecated
stateprep
QuantumScript
argument into the operation list inmpitests/test_adjoint_jacobian.py
. [(#540)] (#540) -
Fix MPI Python unit tests for the adjoint method. (#538)
-
Fix the issue with assigning kernels to ops before registering kernels on macOS (#582)
-
Update
MANIFEST.in
to include device config files andCHANGELOG.md
(#585)
This release contains contributions from (in alphabetical order):
Ali Asadi, Isaac De Vlugt, Amintor Dusko, Vincent Michaud-Rioux, Erick Ochoa Lopez, Lee James O'Riordan, Shuli Shu
- pip-installed CUDA runtime libraries can now be accessed from a virtualenv. (#543)
- The pybind11 compiled module RPATH linkage has been restored to pre-0.33 behaviour. (#543)
This release contains contributions from (in alphabetical order):
Lee J. O'Riordan
-
Add documentation updates for the
lightning.gpu
backend. [(#525)] (#525) -
Add
SparseHamiltonian
support for Lightning-Qubit and Lightning-GPU. [(#526)] (#526) -
Add
SparseHamiltonian
support for Lightning-Kokkos. [(#527)] (#527) -
Integrate python/pybind layer of distributed Lightning-GPU into the Lightning monorepo with Python unit tests. [(#518)] (#518)
-
Integrate the distributed C++ backend of Lightning-GPU into the Lightning monorepo. [(#514)] (#514)
-
Integrate Lightning-GPU into the Lightning monorepo. The new backend is named
lightning.gpu
and includes all single-GPU features. [(#499)] (#499) -
Build Linux wheels for Lightning-GPU (CUDA-11). (#517)
-
Add
Dockerfile
indocker
andmake docker
workflow inMakefile
. The Docker images and documentation are available on DockerHub. (#496) -
Add mid-circuit state preparation operation tests. (#495)
-
Add
tests_gpu.yml
workflow to test the Lightning-Kokkos backend with CUDA-12. (#494) -
Implement
LM::GeneratorDoubleExcitation
,LM::GeneratorDoubleExcitationMinus
,LM::GeneratorDoubleExcitationPlus
kernels. Lightning-Qubit default kernels are now strictly from theLM
implementation, which requires less memory and is faster for large state vectors. (#512) -
Add workflows validating compatibility between PennyLane and Lightning's most recent stable releases and development (latest) versions. (#507) (#498)
-
Introduce
timeout-minutes
in various workflows, mainly to avoid Windows builds hanging for several hours. (#503) -
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
toDefaultQubitLegacy
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)
-
Improve Python testing for Lightning-GPU (+MPI) by adding jobs in Actions files and adding Python tests to increase code coverage. (#522)
-
Add support for
pip install pennylane-lightning[kokkos]
for the OpenMP backend. (#515) -
Update
setup.py
to allow for multi-package co-existence. ThePennyLane_Lightning
package now is the responsible for the core functionality, and will be depended upon by all other extensions. [(#504)] (#504) -
Redesign Lightning-Kokkos
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) -
Redesign Lightning-Kokkos
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 Lightning-Kokkos 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 CI issues running python-cov with MPI. (#535)
-
Re-add support for
pip install pennylane-lightning[gpu]
. (#515) -
Switch most Lightning-Qubit default kernels to
LM
. AddLM::multiQubitOp
tests, failing when targeting out-of-order wires clustered close tonum_qubits-1
. Fix theLM::multiQubitOp
kernel implementation by introducing a genericrevWireParity
routine and replacing thebitswap
-based implementation. Mimic the changes fixing the correspondingmultiQubitOp
andexpval
functors in Lightning-Kokkos. (#511) -
Fix RTD builds by removing unsupported
system_packages
configuration option. (#491)
This release contains contributions from (in alphabetical order):
Ali Asadi, Amintor Dusko, Vincent Michaud-Rioux, Lee J. O'Riordan, Shuli Shu
-
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 the Lightning-Qubit andLightning-Kokkos
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 swap Lightning-Qubit 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