All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Types of changes:
- Added: for new features.
- Changed: for changes in existing functionality.
- Deprecated: for soon-to-be removed features.
- Removed: for now removed features.
- Fixed: for any bug fixes.
- Security: in case of vulnerabilities.
- Added DAG visualizer which requires Graphivz (#1059)
- Added an ASCII art circuit visualizer (#909)
- Added a new kwarg filename to qiskit.tools.visualization.plot_bloch_vector() to optionally write the rendered bloch sphere to a file instead of displaying it (#1096)
- Added a new kwarg filename to plot_state() to optionally write the rendered plot to a file instead of displaying it (#1096)
- The QuantumCircuit class now returns an ASCII art visualization when treated as a string (#911)
- The QuantumCircuit class now has a draw() method which behaves the same as the qiskit.tools.visualization.circuit_drawer() function for visualizing the quantum circuit (#911)
- A new method hinton can be used on qiskit.tools.visualization.plot_state() to draw a hinton diagram (#1246)
- Two new constructor methods, from_qasm_str() and from_qasm_file(), to create a QuantumCircuit object from OpenQASM were added to the QuantumCircuit class. (#1172)
- New methods in QuantumCircuit for common circuit metrics: size(), depth(), width(), count_ops(), num_tensor_factors() (#1285)
- New plot_bloch_multivector() to plot Bloch vectors from a tensored state vector or density matrix. (#1359)
- Per-shot measurement results are available in simulators and select devices.
Request them by setting
memory=True
incompile()
/execute()
, and retrieve them fromresult.get_memory()
(#1385).
Evolved pass-based transpiler to support advanced functionality (#1060)
Avoid consuming results during .retrieve_job() and .jobs() (#1082).
Make backend.status() dictionary conform with schema.
The different output backends for the circuit_drawer() visualizations have been moved into separate private modules in qiskit.tools.visualizations. (#1105, #1111)
DAG nodes contain pointers to Register and Instruction objects, rather than their string names (#1189).
- Upgraded some external dependencies to:
- networkx>=2.2 (#1267).
The qiskit.tools.visualization.circuit_drawer() method now returns a matplotlib.Figure object when the mpl output is used and a TextDrawer object when text output is used. (#1224, #1181)
Speed up the Pauli class and extended its operators (#1271 #1166).
IBMQ.save_account() now takes an overwrite option to replace an existing account on disk. Default is False (#1295).
Backend and Provider methods defined in the specification use model objects rather than dicts, along with validation against schemas (#1249, #1277, #1350). The updated methods include:
- ``backend.status()``(#1301).
backend.configuration()
(and__init__
) (#1323).backend.properties()
, returningNone
for sims (#1331, #1401).qiskit.Result
(#1360).
backend.provider()
is now a method instead of a property (#1312).Remove local backend (Aer) fallback (#1303)
The signatures for the plotting functions in qiskit.tools.visualization._counts_visualization.py, qiskit.tools.visualization._state_visualization.py, and qiskit.tools.visualization.interactive have been modified to make them in-line with standard Matplotlib calling conventions (#1359).
Remove local backend (Aer) fallback (#1303).
DAGCircuits store Instruction and Register objects, instead of name references. The DAGCircuit class methods are updated accordingly (#1210).
Different unrollers are deprecated. The only unrolling happens from DAG to DAG (#1210).
transpile()
now takes QuantumCircuit(s) to QuantumCircuit(s), and DAG processing is only done internally (#1397).Moved all the circuit modules into a circuit module but for most users it is still imported in the top level for QuantumCircuit, QuantumRegister, ClassicalRegister
plot_circuit()
,latex_circuit_drawer()
,generate_latex_source()
,- and
matplotlib_circuit_drawer()
from qiskit.tools.visualization are deprecated. Instead thecircuit_drawer()
function from the same module should be used. (#1055)
- The current default output of
circuit_drawer()
(using latex and falling - back on python) is deprecated and will be changed in the future. (#1055)
- The current default output of
- The qiskit.wrapper.load_qasm_string() and qiskit.wrapper.load_qasm_file() functions are deprecated and the QuantumCircuit.from_qasm_str() and QuantumCircuit.from_qasm_file() contstructor methods should be used instead (#1172)
- The
plot_barriers
andreverse_bits
keys in thestyle
kwarg dict are deprecated, instead the qiskit.tools.visualization.circuit_drawer() kwargsplot_barriers
andreverse_bits
should be used instead. (#1180) - The transpiler methods do not support emitting multiple output format anymore (#1319).
- Several methods of
qiskit.Result
have been deprecated (#1360). - The functions plot_state() and iplot_state() have been depreciated. Instead the functions plot_state_*() and iplot_state_*() should be called. (#1359)
- The
skip_transpiler
arg has been deprecated fromtools.compile()
andtools.execute()
in favor of using the PassManager directly.
- Fixed a variety of typos throughout sources (#1139)
- Fixed horizontal spacing when drawing barriers before CCNOT gates in latex circuit plots (#1051)
- Use case insensitive matching when comparing premium account URLs. (#1102)
- Fixed AerJob status when the submitted Job is in a PENDING state. (#1215)
- Add fallback for when CPU count can't be determined (#1214)
- Fix random_state from returning nan (#1258)
- The Clifford simulator run() method now works correctly with the updated AerJob usage (#1125)
- Fixed an edge case when connection checks would raise an unhandled exception (#1226)
- Fixed a bug where the transpiler moved middle-of-circuit measurements to the end (#1334)
- The`number_to_keep` kwarg in
plot_histgram()
now functions correctly (#1359). - parallel_map no longer creates a progress bar for a single circuit (#1394).
- Remove register, available_backends (#1131).
- Remove tools/apps (#1184).
- Removed the dependency on
IBMQuantumExperience
, as it is now included inqiskit.backends.IBMQ
(#1198). matplotlib
is no longer in the package requirements and is now an optional dependency. In order to use any matplotlib based visualizations (which includes theqiskit.tools.visualization.circuit_drawer()
mpl
output,qiskit.tools.visualization.plot_state
,qiskit.tools.visualization.plot_histogram
, andqiskit.tools.visualization.plot_bloch_vector
you will now need to ensure you manually install and configure matplotlib independently.- The
basis
kwarg for thecircuit_drawer()
function to provide an alternative list of basis gates has been removed. Instead users should adjust the basis gates prior to visualizing the circuit. (#1151) backend.parameters()
andbackend.calibration()
have been fully deprecated, in favour ofbackend.properties()
(#1305).- The
qiskit.tools.file_io
module has been removed. Conversion betweenqiskit.Result
and json can be achieved using.to_dict()
and.from_dict()
directly (#1360). - The
qiskit.Result
class method forlen()
and indexing have been removed, along with the functions that perform post-processing (#1351). - The
get_snapshot()
andget_snapshots()
method from theResult
class has been removed. Instead you can access the snapshots in a Result usingResult.data()['snapshots']
. - Completed the deprecation of
job.backend_name()
,job.id()
, and thebackend_name
parameter in its constructor. - The
qiskit.Result
class now does post-processing of results returned from backends if they are called via theResult.get_xxx()
methods (i.e.get_counts()
,get_memory()
,get_statevector()
,get_unitary()
). The raw data is accessible throughResult.data()
(#1404).
0.6.0 - 2018-10-04
- Added SchemaValidationError to be thrown when schema validation fails (#881)
- Generalized Qobj schema validation functions for all qiskit schemas (#882).
- Added decorator to check for C++ simulator availability (#662)
- It is possible to cancel jobs in non comercial backends (#687)
- Introduced new qiskit.IBMQ provider, with centralized handling of IBMQ credentials (qiskitrc file, environment variables). (#547, #948, #1000)
- Add OpenMP parallelization for Apple builds of the cpp simulator (#698).
- Add parallelization utilities (#701)
- Parallelize transpilation (#701)
- New interactive visualizations (#765).
- Added option to reverse the qubit order when plotting a circuit. (#762, #786)
- Jupyter notebook magic function qiskit_job_status, qiskit_progress_bar (#701, #734)
- Add a new function
qobj_to_circuits
to convert a Qobj object to a list of QuantumCircuit objects (#877) - Allow selective loading of accounts from disk via hub/group/project filters to IBMQ.load_accounts().
- Add new job_monitor function to automaically check the status of a job (#975).
- Schema tests in tests/schemas/test_schemas.py replaced with proper unit test (#834).
- Renamed
QISKit
toQiskit
in the documentation. (#634) - Use
Qobj
as the formally defined schema for sending information to the devices: - introduce theqiskit.qobj
module. (#589, #655) - update theQobj
JSON schema. (#668, #677, #703, #709) - update the local simulators for acceptingQobj
as input. (#667) - update theResult
class. (#773) - Use
get_status_job()
for checking IBMQJob status. (#641) - Q network hub/group/project credentials replaced by new url format. (#740)
- Breaking change:
Jobs
API simplification. (#686) - Breaking change: altered tomography APIs to not use QuantumProgram. (#818)
- Breaking change:
BaseBackend
API changed, properties are now methods (#858) - When
plot_histogram()
orplot_state()
are called from a jupyter notebook if there is network connectivity the interactive plots will be used by default (#862, #866) - Breaking change:
BaseJob
API changed, any job constructor must be passed the backend used to run them and a unique job id (#936). - Add support for drawing circuit barriers to the latex circuit drawer. This requires having the LaTeX qcircuit package version >=2.6.0 installed (#764)
- The
number_to_keep
kwarg on theplot_histogram()
function is now deprecated. A field of the same name should be used in theoption
dictionary kwarg instead. (#866) - Breaking change:
backend.properties()
instead ofbackend.calibration()
andbackend.parameters()
(#870)
- Removed the QuantumProgram class. (#724)
- Fixed
get_ran_qasm
methods onResult
instances (#688). - Fixed
probabilities_ket
computation in C++ simulator (#580). - Fixed bug in the definition of
cswap
gate and its test (#685). - Fixed the examples to be compatible with version 0.5+ (#672).
- Fixed swap mapper using qubits after measurement (#691).
- Fixed error in cpp simulator for 3+ qubit operations (#698).
- Fixed issue with combining or extending circuits that contain CompositeGate (#710).
- Fixed the random unitary generation from the Haar measure (#760).
- Fixed the issue with control lines spanning through several classical registers (#762).
- Fixed visualizations crashing when using simulator extensions (#885).
- Fixed check for network connection when loading interactive visualizations (#892).
- Fixed bug in checking that a circuit already matches a coupling map (#1024).
0.5.7 - 2018-07-19
- Add new backend names support, with aliasing for the old ones.
0.5.6 - 2018-07-06
- Rename repository to
qiskit-terra
(#606). - Update Bloch sphere to QuTiP version (#618).
- Adjust margin of matplotlib_circuit_drawer (#632)
- Remove OpenQuantumCompiler (#610).
- Fixed broken process error and simulator slowdown on Windows (#613).
- Fixed yzy_to_zyz bugs (#520, #607) by moving to quaternions (#626).
0.5.5 - 2018-07-02
- Retrieve IBM Q jobs from server (#563, #585).
- Add German introductory documentation (
doc/de
) (#592). - Add
unregister()
for removing previously registered providers (#584). - Add matplotlib-based circuit drawer (#579).
- Adding backend filtering by least busy (#575).
- Allow running with new display names for IBMQ devices,
and return those from
available_backends()
(#566) - Introduce Qiskit Transpiler and refactor compilation flow (#578)
- Add CXCancellation pass (#578)
- Remove backend filtering in individual providers, keep only in wrapper (#575).
- Single source of version information (#581)
- Bumped IBMQuantumExperience dependency to 1.9.6 (#600).
- For backend status, status['available'] is now status['operational'] (#609).
- Added support for registering third-party providers in register() (#602).
- Order strings in the output of
available_backends()
(#566)
- Remove Clifford simulator from default available_backends, until its stable release (#555).
- Remove ProjectQ simulators for moving to new repository (#553).
- Remove QuantumJob class (#616)
- Fix issue with unintended inversion of initializer gates (#573).
- Fix issue with skip_transpiler causing some gates to be ignored silently (#562).
0.5.4 - 2018-06-11
- Performance improvements:
- remove deepcopies from dagcircuit, and extra check on qasm() (#523).
- Rename repository to
qiskit-core
(#530). - Repository improvements: new changelog format (#535), updated issue templates (#531).
- Renamed the specification schemas (#464).
- Convert
LocalJob
tests into unit-tests. (#526) - Move wrapper
load_qasm_*
methods to a submodule (#533).
- Remove Sympy simulators for moving to new repository (#514)
- Fix erroneous density matrix and probabilities in C++ simulator (#518)
- Fix hardcoded backend mapping tests (#521)
- Removed
_modifiers call
fromreapply
(#534) - Fix circuit drawer issue with filename location on windows (#543)
- Change initial qubit layout only if the backend coupling map is not satisfied (#527)
- Fix incorrect unrolling of t to tdg in CircuitBackend (#557)
- Fix issue with simulator extension commands not reapplying correctly (#556)
0.5.3 - 2018-05-29
- load_qasm_file / load_qasm_string methods
- Dependencies version bumped
- Crash in the cpp simulator for some linux platforms
- Fixed some minor bugs
0.5.2 - 2018-05-21
- Adding Result.get_unitary()
- Deprecating
ibmqx_hpc_qasm_simulator
andibmqx_qasm_simulator
in favor ofibmq_qasm_simulator
.
- Fixing a Mapper issue.
- Fixing Windows 7 builds.
0.5.1 - 2018-05-15
There are no code changes.
MacOS simulator has been rebuilt with external user libraries compiled statically, so there’s no need for users to have a preinstalled gcc environment.
Pypi forces us to bump up the version number if we want to upload a new package, so this is basically what have changed.
0.5.0 - 2018-05-11
- Introduce providers and rework backends (#376).
- Split backends into
local
andibmq
. - Each provider derives from the following classes for its specific
requirements (
BaseProvider
,BaseBackend
,BaseJob
). - Allow querying result by both circuit name and QuantumCircuit instance.
- Split backends into
- Introduce the Qiskit
wrapper
(#376). - Introduce convenience wrapper functions around commonly used Qiskit
components (e.g.
compile
andexecute
functions). - Introduce the DefaultQISKitProvider, which acts as a context manager for
the current session (e.g. providing easy access to all
available_backends
). - Avoid relying on QuantumProgram (eventual deprecation).
- The functions are also available as top-level functions (for example,
qiskit.get_backend()
).
- Introduce convenience wrapper functions around commonly used Qiskit
components (e.g.
- Introduce the Qiskit
- Introduce
BaseJob
class and asynchronous jobs (#403). - Return
BaseJob
afterrun()
. - Mechanisms for querying
status
andresults
, or tocancel
a job.
- Return
- Introduce
- Introduce a
skip_transpiler
flag forcompile()
(#411). - Introduce schemas for validating interfaces between qiskit and backends (#434)
- qobj_schema
- result_schema
- job_status_schema
- default_pulse_config_schema
- backend_config_schema
- backend_props_schema
- backend_status_schema
- Improve C++ simulator (#386)
- Add
tensor_index.hpp
for multi-partite qubit vector indexing. - Add
qubit_vector.hpp
for multi-partite qubit vector algebra. - Rework C++ simulator backends to use QubitVector class instead of
std::vector
.
- Add
- Improve interface to simulator backends (#435)
- Introduce
local_statevector_simulator_py
andlocal_statevector_simulator_cpp
. - Introduce aliased and deprecated backend names and mechanisms for resolving them.
- Introduce optional
compact
flag to query backend names only by unique function. - Introduce result convenience functions
get_statevector
,get_unitary
- Add
snapshot
command for caching a copy of the current simulator state.
- Introduce
- Introduce circuit drawing via
circuit_drawer()
andplot_circuit()
(#295, #414) - Introduce benchmark suite for performance testing
(
test/performance
) (#277) - Introduce more robust probability testing via assertDictAlmostEqual (#390)
- Allow combining circuits across both depth and width (#389)
- Enforce string token names (#395)
- Fix coherent error bug in
local_qasm_simulator_cpp
(#318) - Fix the order and format of result bits obtained from device backends (#430)
- Fix support for noises in the idle gate of
local_clifford_simulator_cpp
(#440) - Fix JobProcessor modifying input qobj (#392) (and removed JobProcessor during #403)
- Fix ability to apply all gates on register (#369)
- Some methods of
QuantumProgram
are soon to be deprecated. Please use the top-level functions instead. - The
Register
instantiation now expectssize, name
. Usingname, size
is still supported but will be deprecated in the future. - Simulators no longer return wavefunction by setting shots=1. Instead,
use the
local_statevector_simulator
, or explicitly ask forsnapshot
. - Return
job
instance afterrun()
, rather thanresult
. - Rename simulators according to
PROVIDERNAME_SIMPLEALIAS_simulator_LANGUAGEORPROJECT
- Move simulator extensions to
qiskit/extensions/simulator
- Move Rzz and CSwap to standard extension library
0.4.15 - 2018-05-07
- Fixed an issue with legacy code that was affecting Developers Challenge.
0.4.14 - 2018-04-18
- Fixed an issue about handling Basis Gates parameters on backend configurations.
0.4.13 - 2018-04-16
- OpenQuantumCompiler.dag2json() restored for backward compatibility.
- Fixes an issue regarding barrier gate misuse in some circumstances.
0.4.12 - 2018-03-11
- Improved circuit visualization.
- Improvements in infrastructure code, mostly tests and build system.
- Better documentation regarding contributors.
- A bunch of minor bugs have been fixed.
0.4.11 - 2018-03-13
- More testing :)
- Stabilizing code related to external dependencies.
- Fixed bug in circuit drawing where some gates in the standard library were not plotting correctly.
0.4.10 - 2018-03-06
- Chinese translation of README.
- Changes related with infrastructure (linter, tests, automation) enhancement.
- Fix installation issue when simulator cannot be built.
- Fix bug with auto-generated CNOT coherent error matrix in C++ simulator.
- Fix a bug in the async code.
0.4.9 - 2018-02-12
- CMake integration.
- QASM improvements.
- Mapper optimizer improvements.
- Some minor C++ Simulator bug-fixes.
0.4.8 - 2018-01-29
- Fix parsing U_error matrix in C++ Simulator python helper class.
- Fix display of code-blocks on
.rst
pages.
0.4.7 - 2018-01-26
- Changes some naming conventions for
amp_error
noise parameters tocalibration_error
.
- Fixes several bugs with noise implementations in the simulator.
- Fixes many spelling mistakes in simulator README.
0.4.6 - 2018-01-22
We have upgraded some of out external dependencies to:
- matplotlib >=2.1,<2.2
- networkx>=1.11,<2.1
- numpy>=1.13,<1.15
- ply==3.10
- scipy>=0.19,<1.1
- Sphinx>=1.6,<1.7
- sympy>=1.0
0.4.4 - 2018-01-09
- Update dependencies to more recent versions.
- Fix bug with process tomography reversing qubit preparation order.
0.4.3 - 2018-01-08
- Static compilation has been removed because it seems to be failing while installing Qiskit via pip on Mac.
0.4.2 - 2018-01-08
- Minor bug fixing related to pip installation process.
0.4.0 - 2018-01-08
- Job handling improvements.
- Allow asynchronous job submission.
- New JobProcessor class: utilizes concurrent.futures.
- New QuantumJob class: job description.
- Modularize circuit "compilation".
- Takes quantum circuit and information about backend to transform circuit into one which can run on the backend.
- Standardize job description.
- All backends take QuantumJob objects which wraps
qobj
program description.
- Simplify addition of backends, where circuits are run/simulated.
qiskit.backends
package added.- Real devices and simulators are considered "backends" which inherent from
BaseBackend
.
- Reorganize and improve Sphinx documentation.
- Improve unittest framework.
- Add tools for generating random circuits.
- New utilities for fermionic Hamiltonians (
qiskit/tools/apps/fermion
). - New utilities for classical optimization and chemistry
(
qiskit/tools/apps/optimization
). - Randomized benchmarking data handling.
- Quantum tomography (
qiskit/tools/qcvv
). - Added functions for generating, running and fitting process tomography experiments.
- Quantum tomography (
- Quantum information functions (
qiskit/tools/qi
). - Partial trace over subsystems of multi-partite vector.
- Partial trace over subsystems of multi-partite matrix.
- Flatten an operator to a vector in a specified basis.
- Generate random unitary matrix.
- Generate random density matrix.
- Generate normally distributed complex matrix.
- Generate random density matrix from Hilbert-Schmidt metric.
- Generate random density matrix from the Bures metric.
- Compute Shannon entropy of probability vector.
- Compute von Neumann entropy of quantum state.
- Compute mutual information of a bipartite state.
- Compute the entanglement of formation of quantum state.
- Quantum information functions (
- Visualization improvements (
qiskit/tools
). - Wigner function representation.
- Latex figure of circuit.
- Visualization improvements (
- Use python logging facility for info, warnings, etc.
- Auto-deployment of sphinx docs to github pages.
- Check IBMQuantumExperience version at runtime.
- Add QuantumProgram method to reconfigure already generated qobj.
- Add Japanese introductory documentation (
doc/ja
). - Add Korean translation of readme (
doc/ko
). - Add appveyor for continuous integration on Windows.
- Enable new IBM Q parameters for hub/group/project.
- Add QuantumProgram methods for destroying registers and circuits.
- Use Sympy for evaluating expressions.
- Add support for ibmqx_hpc_qasm_simulator backend.
- Add backend interface to Project Q C++ simulator.
- Requires installation of Project Q.
- Introduce
InitializeGate
class. - Generates circuit which initializes qubits in arbitrary state.
- Introduce
- Introduce
local_qiskit_simulator
a C++ simulator with realistic noise. - Requires C++ build environment for
make
-based build.
- Introduce
- Introduce
local_clifford_simulator
a C++ Clifford simulator. - Requires C++ build environment for
make
-based build.
- Introduce
- The standard extension for creating U base gates has been modified to be consistent with the rest of the gate APIs (see #203).
- The
silent
parameter has been removed from a number ofQuantumProgram
methods. The same behaviour can be achieved now by using theenable_logs()
anddisable_logs()
methods, which use the standard Python logging.
- Fix basis gates (#76).
- Enable QASM parser to work in multiuser environments.
- Correct operator precedence when parsing expressions (#190).
- Fix "math domain error" in mapping (#111, #151).