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:

\[H = \sum_v \frac{\Omega_v}{2}\sigma_v^x - \sum_v \Delta_v n_v + \sum_{v, w}U_{vw}n_v n_w\]

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:

  • A generic method to embed Maximum Weighted Independent Set (MWIS) problems into the Rydberg atom platform (see MWIS)

  • A generic method to embed Quadratic Unconstrained Binary Optimization (QUBO) problems into the Rydberg atom platform (see QUBO)

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 uses FusionPlugin 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 parameter fusion=False.

  • NoisyQProc now raises an exception when trying to emulate a circuit containing intermediate measurements if nbshots=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 option qbits_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 attribute meta_data of type dict[str, str].

  • HardwareSpecs has a new optional attribute meta_data of type dict[str, str].

  • In QutipQPU and AnalogQPU, rename argument nsteps to n_steps for harmonization between QPUs.

Removed features

  • In MPS and MPO, the truncation method DMT has been removed.

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 of CliffordNormalizer 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 a ALL_TO_ALL topology with unspecified number of qubits [BRQ-1563].

  • LinAlg and Feynman 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].

  • Improved resource estimation for MPS and MPO [BRQ-1642].

  • Diagonalization backends 0 and 2 of codiagonalize_with_architecture have been fixed [BRQ-1655].

  • QutipQPU and AnalogQPU can measure qubits in any order, in respect to the attribute qubits of Job.

  • 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 and MPO, the DMRG method is now properly relying on initial guess based on SVD.

  • The algorithm to produce samples in MPS and MPO 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 exception Internal 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:

  • MPS for noiseless simulations, which replaces the old MPS QPU (renamed to MPSLegacy),

  • MPO for noisy simulations.

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 store Term is a more efficient way. Manipulating an Observable 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 and Term can be caster into a matrix by using the new method to_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 GPU

  • Noisy 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() of AbstractGenerator can now return a tuple (job, meta_data), instead of returning a batch having meta-data

  • Result object now has a display() 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 module qlmaas).

  • 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.