We’re excited to announce the next major Qiskit release, Qiskit 0.20.0 (and 0.20.1)! Take a look — this release includes new features, classes, as well as gotchas and bug fixes, only some of which we’re highlighting here. You can find the entire release note, and all previous release notes, in the Qiskit documentation linked here.
Qiskit is traditionally divided into four “elements:” Terra, which deals in circuits and pulses; Aer, which is in charge of the simulators; Ignis, which handles error mitigation and noise, and Aqua, for algorithms. However, since most Qiskit users seamlessly incorporate each of the elements into their code, we’ve chosen to organize relevant updates by what the elements do, rather than by the element names themselves.
Circuits and Pulses
This new release introduces an arbitrary basis translation — meaning that we can decompose a quantum circuit into a set of basis gates other than just the U1, U2, U3 and CX gates. This update will allow you to run Qiskit circuits on any hardware, regardless of the basis gate set.
The QuantumCircuit class now tracks global phase. This means controlling a circuit which has a global phase now correctly adds a relative phase, and the gate matrix definitions are now exact rather than equal up to a global phase. This is mostly important for tracking purposes, as well as for those looking at the statevector or density matrices — any time you need to see what’s going on with the state of your qubits before you measure them.
This Qiskit update has added a new class that handles counts result data, called qiskit.result.Counts, which is returned by result.get_counts(). The result counts from all of the circuit’s shots were previously stored as a dictionary. This new class can still be interacted with like a dictionary just as in prior releases, but it also can be acted on with methods in order to deal with experimental results and handle post processing.
The release introduces several new methods to the QuantumCircuit class: reverse_bits(), control(), and repeat(). The reverse_bits() method can reverse the order of both the quantum and classical bits in the circuit, useful for switching from a little-endian to big-endian — whether the most or least significant (qu)bit is stored at the smallest address. The control() method returns a controlled version of the circuit with a specified number of qubits acting as the control. The repeat() method returns a new circuit object containing the specified number of repetitions of the original circuit.
This release also comes with an important deprecation: The interactive plotting functions from qiskit.visualization including iplot_bloch_multivector, iplot_state_city, iplot_state_qsphere, iplot_state_hinton, iplot_histogram, iplot_state_paulivec now are just deprecated aliases for the matplotlib-based equivalents, and are no longer interactive. The website that hosted the javascript code that these functions relied on has been shut down, so they stopped working; a normal deprecation wasn’t possible because the site they depended on no longer exists.
Finally, we released Qiskit 0.20.1; this update features mainly bug fixes that you can review in the release note documentation.
Simulators
The newest Qiskit release includes performance improvements for all of the simulators. This was accomplished by adding support for SIMD vectorization, approximation in the matrix product state (MPS) method via bond-dimension truncation, more efficient Pauli expectation value computation, and greatly improved efficiency in Python conversion of C++ result objects.
The build system was upgraded to use the Conan C/C++ package manager to manage common C++ dependencies when compiling on your own system. This is important to those running a 32bit x86 or non-x86 systems. This update should make Aer easier to install on these systems — but please keep your eyes open as there have been bug reports from people trying to build Aer from source since this changes how dependencies are managed. If you encounter any issues when building Aer from source, please open an issue ticket about it here.
Error Mitigation and Noise Handling
The Qiskit team restructured the code behind Randomized Benchmarking in order to use the recently-updated Clifford class. This should allow more efficient randomized benchmarking on sequences of Clifford gate with more than two qubits. Additionally, the qiskit.ignis.verification.qv_circuits() function now uses the circuit library class QuantumVolume to construct its output, rather than building Quantum Volume circuits from scratch, which may lead to slight changes in the output versus previous versions of the function.
Algorithms
The most important recent algorithm upgrade was the Qiskit Optimization Module, which you can read more about here. There will be exciting new features released in Qiskit 0.21.0; in the mean time, check out the release notes for other recent changes.
IBM Q Provider
For our premium IBM Quantum Experience users, the newest IBM Q Provider release provides a reservations() method to return reservation information from the backend. Additionally, using Qconfig.py to save IBM Quantum Experience credentials is now deprecated and will be removed in the next release. You should use qiskitrc (the default) instead — those who have been using the Q Experience for more than two years should check to ensure that they’ve upgraded.
These are just the most notable upgrades as called out by the Qiskit team, but there are plenty of other new features, updates, bug fixes, and deprecations called out in the release note here. Take a look!