Release notes
What’s new in Qaptiva 1.10.2
Released on July 2024
Qaptiva requires:
RHEL 9.4 for the Qaptiva 800 Appliances
RHEL 9.4 or Rocky OS 9.4 for the Qaptiva Access Front-Ends.
Virtual environment in Qaptiva v1.10
Since Qaptiva version 1.10, Qaptiva software is delivered to support multiple versions of Python (3.9, 3.10, 3.11, 3.12). Users can choose which Python version they want to use. To do so, the use of virtual environment is highly recommended to ensure the software functions properly.
The “workon” command is useful for creating and managing these environments, providing isolation and manageability of project dependencies. For detailed instructions, please refer to the workon section of the documentation.
Qaptiva delivers Qaptiva-ready kernels (ipkernels) for the supported Python versions (3.9, 3.10, 3.11, 3.12). When choosing the kernel to use, a corresponding virtual environment is automatically created and activated.
New approximate QPU
A new QPU is available for analog quantum computing: MPSTraj
.
This is a Matrix Product State (MPS) based method, implementing Time-Evolution Block Decimation (TEBD) to compute the time evolution of qubits under a time-dependent schedule.
It also allows to emulate the effect of noise through jump operators with several variants of the trajectory algorithm.
This QPU is able to go beyond AnalogQPU
or QutipQPU
in terms of number of qubits, as it is limited by the entanglement entropy only.
Solving combinatorial problem on Rydberg atom quantum devices
The qat.opt
module has been enhanced to address combinatorial problems on Rydberg atom quantum devices.
These devices are quantum processors that can execute jobs matching the following schedule:
where \(\Omega_v\) is the rabi frequency, \(\Delta_v\) the detuning and \(U_{vw}\) the elements of the coupling matrix between atoms.
Qaptiva 800s provides:
import networkx as nx
from qat.opt import MaxCut
# This graph is not unit disc so it can not be embedded
# directly in a rydber atom device
graph = nx.circular_ladder_graph(5)
# Generate Rydberg Schedule
pbm = MaxCut(graph)
schedule = pbm.to_job(job_type="ryd")
Qaptiva access new Slurm scheduler
Changing the scheduler does not change anything from a user point of view.
A new Qaptiva Access scheduler can now easily be configured (see the admin documentation). This scheduler uses Slurm for managing Qaptiva resources through Generic RESources. Configured in this way, Qaptiva Access jobs are logged both in Slurm’s and Qaptiva Access’ databases. Jobs ran through this scheduler are still managed by the Qaptiva Resource Manager once executed on the Qaptiva machine.
Such Qaptiva Access server can either be introduced in an already existing Slurm cluster, or setup in a new one.
Projective Quantum Eigensolver Plugin (alpha)
Plugins SPQEPlugin
and PQEOptimizationPlugin
implement the projective quantum eigensolver
method, an improvement over the variational quantum eigensolver (VQE) method that converges better and is more robust to noise.
Qaptiva provides an adaptive (SPQEPlugin) as well as fixed-ansatz implementation (PQEOptimizationPlugin).
Updated features
LinAlg
usesFusionPlugin
to optimize circuits before a CPU emulation of at least 20 qubits, leading to better performances. This plugin is also used for GPU emulation of at least 23 qubits. This can be disabled by using the parameterfusion=False
.
NoisyQProc
now raises an exception when trying to emulate a circuit containing intermediate measurements ifnbshots=0
.
FusionPlugin
now ignores non-compatible circuits, instead of raising an exception.
FusionPlugin
is now compatible with non-inlined circuits (but will inline them).
FusionPlugin
has a new optionqbits_compilation_threshold
to specify a minimal number for compilation. Jobs having less qubits are not compiled.
CliffordNormalizer
now retrieves the stabilizer tableau used in post processing from the batch’s meta_data instead of storing it in attribute.
Job
has a new optional attributemeta_data
of typedict[str, str]
.
HardwareSpecs
has a new optional attributemeta_data
of typedict[str, str]
.In
QutipQPU
andAnalogQPU
, rename argumentnsteps
ton_steps
for harmonization between QPUs.
Removed features
Fixes
Jump operators were mistranslated into Qutip when emulating a noisy schedule with
QutipQPU
. This issue is fixed [BRQ-1639].
NISQCompiler
can now compile batches composed of multiple jobs [BRQ-1569].The option
optimize_initial
ofCliffordNormalizer
has been fixed [BRQ-1594].The order of the Clifford gates added to the stabilizer tableau when merging a Pauli Y rotation was inverted in
CliffordNormalizer
. This has now been fixed [BRQ-1619].
Nnizer
can now compile a job for a hardware having aALL_TO_ALL
topology with unspecified number of qubits [BRQ-1563].
LinAlg
andFeynman
can aggregate results having intermediate measurements.
NoisyQProc
was raising an exception when a circuit with intermediate measurements is submitted, even when a number of shots is given. This is now fixed [BRQ-1505].Diagonalization backends 0 and 2 of
codiagonalize_with_architecture
have been fixed [BRQ-1655].
QutipQPU
andAnalogQPU
can measure qubits in any order, in respect to the attributequbits
ofJob
.An exception was raised when submitting a
Batch
having no meta_data to a QPU. This is now fixed [BRQ-1654].The “eager” merge strategy of
FusionPlugin
has been fixed (if the gate qubits count is higher thant the qubits fusion limit).In
MPS
andMPO
, the DMRG method is now properly relying on initial guess based on SVD.The algorithm to produce samples in
MPS
andMPO
has been changed to the method of ArXiv:2401.10330, fixing some inconsistencies.
Result
objects can store states composed of a larger number of qubits. Downloading a result via Qaptiva Access will no longer raise the exceptionInternal Error: "int too big to convert"
[BRQ-1571].Various fixes and improvements for
NoisyQProc
.
What’s new in Qaptiva 1.9.1
Released on July 2023
Qaptiva 800s requires:
RHEL 9.2 for the QLM Appliances
RHEL 9.2 or Rocky OS 9.2 on the QLMaaS proxy systems.
What is Qaptiva 800s
The Quantum Learning Machine (QLM) has been renamed Qaptiva 800s. Any code written on the QLM should remain valid on Qaptiva 800s. The renaming also comes with:
improvement of the qat library
refactoring of the documentation
bug fixes
The documentation has been restructured to better highlight the main features of the Qaptiva Appliance. This new documentation is designed to better explain the architecture of this software and better highlights tools available in this software
Defining quantum circuits / jobs using a Python function
Quantum circuits and quantum jobs can be defined using the Python function (using qfunc()
and qrout()
decorators). This new syntax can be used to define variational algorithm. For instance:
from qat.lang import qrout, RX, H, CNOT
@qrout
def circuit(theta):
" Dummy example "
RX(theta)(0)
H(1)
CNOT(1, 0)
circuit.display(batchmode=True)
┌─────────┐┌─┐
─┤RX[theta]├┤X├
└─────────┘└┬┘
│
┌─┐ │
─┤H├─────────●─
└─┘
Quantum jobs have new methods run()
(to execute a job on a QPU - if no QPU is specified,
get_default_qpu()
is used) and compile()
(to compile a job). QPUs and Plugins
are selected using the scope syntax of Python:
with ScipyMinimizePlugin(...):
my_job.run() # Execute "my_job" on "ScipyMinimizePlugin(...) | get_default_qpu()"
with NISQCompiler(...):
my_job.compile(specs) # Compile "my_job" using "NISQCompile"
This feature is detailed in the ticket [BRQ-1487]
New approximate QPUs
Qaptiva 800s provides two new QPUs:
Each of them features the standard maximum bond dimension truncation scheme, as well as a new adaptative truncation method, which adapts bond dimensions based on a fidelity lower-bound given as input. The final quantum state fidelity will be close to or higher than given input fidelity.
from qat.qpus import MPS, MPO
noiseless_qpu = MPS(bond_dimension=64)
noisy_qpu = MPO(hardware_model=..., bond_dimension=64)
from qat.qpus import MPS, MPO
noiseless_qpu = MPS(fidelity=0.99)
noisy_qpu = MPO(hardware_model=..., fidelity=0.99)
This feature is detailed in the ticket [BRQ-1486]
Updated features
Observable
has been internally redesigned to storeTerm
is a more efficient way. Manipulating anObservable
and performing Observables arithmetic is much faster than before. The API remains unchanged.The static constructors for Pauli operators in the Observable class have been slightly changed to automatically infer the total number of qubits
Observable
andTerm
can be caster into a matrix by using the new methodto_matrix()
, in a dense or sparse form. This feature is detailed in the ticket [BRQ-1482]Enabling computating the density matrix from a simulation (also with jump ops) for
AnalogQPU
with GPUNoisy simulations and noisy circuits handling have been optimized
Add a new option to the constructor to check if the quantum channel is trace preserving or trace decreasing at construction. This check relies on a brand new function is_trace_reducing to check whether a quantum channel (in the Kraus form) reduces the trace of density matrices
Method
generate()
ofAbstractGenerator
can now return a tuple (job, meta_data), instead of returning a batch having meta-data
Result
object now has adisplay()
method to get a more convenient HTML view of the object. This feature is detailed in the ticket [BRQ-1485]Batch generators of combinatorial optimization problems will now automatically set the best parameters of the
SQAQPU
when an annealing job is generated. This feature is detailed in the ticket [BRQ-1460]The subprocess manager of PowerAccess has been re-designed, to improve the latency of a request. This feature is detailed in the ticket [BRQ-1468]
Added RemoteQPU in qat.qpus module [BRQ-1490]
Added RemotePlugin in qat.plugins module [BRQ-1492]
Fixes
Fix an error in the evaluation of the gradient in
AdaptVQEPlugin
.Parameters containing symengine number types such as Rational or Half are now correctly translated to ArithExpression (issue #6).
Fix the resource estimation for
AnalogQPU
with deterministic jobs.CLASSICCTRL and RESET are now supported by
LinAlg
on GPU. Circuits composed of this kind of gate are now executable on this QPU.Fixed a bug where the intermediate measurements will always be 0 starting from the second shot in GPU simulation [BRQ - 1504].
Fixed LinAlg GPU sampling where same samples are returned at independent execution [BRQ - 1488].
Update the documentation of
ParametricPureDephasing
to display the right Kraus operators.Change definition of heaviside to exclude end point.
Fixed an issue in a QLMaaS script that deletes older jobs and results. This issue is detailled in [BRQ-1450].
Fixed bugged quantum channels (generalized amplitude damping and PureDephasingQuasiprobs). This issue is detailled in [BRQ-1494].
Fixed inconsistent results in LinAlg QPU with intermediate measurements and nbshots > 1. Disallow nbshots=0 for it cannot be computed easily with intermediate measurements [BRQ - 1502].
Known limitations
User defined applications located under module
qat
are not importable remotely (even from moduleqlmaas
).User defined applications should be moved under another module and imported using
get_importable()
.Even so cirq is provided, it is not fully operational and therefore not supported by default in the Appliance. cirq can be installed using –user if needed.