Releases: Qiskit/qiskit
Releases · Qiskit/qiskit
Qiskit Terra 0.8.0
0.8.0 - 2019-05-02
Added
- Added exact and approximate decomposition of SU(4) to arbitrary supercontrolled basis
- Introduced schedule lo configuration. (#2115)
- Introduced pulse schedule assembler. (#2115)
- Builtin library of continuous pulses and builtin library of discrete pulses which are obtained
by sampling continuous pulses with default sampling strategy. - Sampler decorator and standard sampler library for conversion of continuous pulses
to discreteSamplePulse
(#2042). - Core StochasticSwap routine implimented in Cython (#1789).
- Added QuantumChannel classes SuperOp, Choi, Kraus, Stinespring, PTM, Chi to
quantum_info for manipulating quantum channels and CPTP maps. - Added Operator object to quantum_info for representing matrix operators.
- Introduced the backend defaults model and endpoint for pulse backends (#2101).
meas_level
to result schema (#2085).- Core StochasticSwap routine implemented in Cython (#1789).
- New EnlargeWithAncilla pass for adding ancilla qubits after a Layout
selection pass (#1603). - New Unroll2Q pass for unrolling gates down to just 1q or 2q gates (#1614).
- Added support for register slicing when applying operations to a register (#1643).
- Added in new parameter
justify
to the text, mpl and latex circuit drawers to say how the
circuit should be aligned. (#1725, #1797, #1977) - Added function for purity of a mixed state in
qiskit.quantum_information
(#1733) - Added parameter to the TextProgressBar to allow the output to be sent to a
different output stream - Added a
__qiskit_version__
parameter to the qiskit namespace. This will
contain a dictionary of versions for all installed qiskit elements. (#1885). - Added a
RunConfig
object for configurations related to running an
experiment (e.g. shots, memory) (#1856) - Added a
TranspileConfig
object for configurations related to transforming
circuits (e.g. basis_gates, coupling_map, initial_layout) (#1856) - Added a
qiskit.compiler
namespace for all functions that transpile, schedule
and assemble circuits and pulses (#1856) - Added support for passing a list of
basis_gates
,coupling_map
etc. to the
qiskit.compiler.transpile()
function, each corresponding to one of the circuits (#2163) - Added a
qiskit.compiler.assemble_circuits()
function to generate qobj from some
circuits and a RunConfig (#1856) execute()
andassemble()
allow setting a qobj_header, of type
QobjHeader or dict, to add extra information to the qobj (and thus result).- Register indexing supports negative indices (#1875)
- Added new resource estimation passes:
Depth
,Width
,Size
,CountOps
, and
NumTensorFactors
, all grouped in theResourceEstimation
analysis pass. - Added
nodes_on_wire()
to DAGCircuit which returns an iterator over all the
operations on the given wire - Added new properties to an Instruction:
num_qubits
,num_clbits
(#1816). - Added a
QuantumCircuit.append
public method for appending arbitrary instructions
to some qubits and clbits in the circuit (#1816). - Added an
Instruction.definition
property that defines a composite instruction
in terms of other, simpler instructions (#1816). - Added an
Instruction.mirror()
method that mirrors a composite instruction
(reverses its sub-instructions) (#1816). - Added an
PassManager.passes()
method that returns a list of the passes that
have been added to the pass manager, including options and flow controllers. - Added a
PassManager.run()
that transforms aQuantumCircuit
according to its
pass schedule and returns aQuantumCircuit
. - Added a
qiskit.quantum_info.random
for generating random states, unitaries, etc (#2119). - Added a
qiskit.quantum_info.synthesis
for algorithms that synthesize circuits (#2119). - Added a
NoiseAdaptiveLayout
pass to compute a backend calibration-data aware initial
qubit layout. (#2089) - Gates and instructions in a circuit accept integers as parameters to refer to
wires instead of named bits. - Added a
OptimizeSwapBeforeMeasure
pass that removes the swap gates when they
are followed by a measurement instruction, moving the latter to the proper wire. (#1890) - Added a
RemoveDiagonalGatesBeforeMeasure
pass that removes the diagonal gates when they
are followed by a measurement instruction. (#2208) - Added a
CommutativeCancellation
pass that cancels self-inverse gates and combines
rotations about the Z axis, leveraging previously-found gate commutation relations. (#2012) - Add an option for using a user config file to enable changing default
settings for various functions in qiskit. Right now it only supports setting
the default circuit drawing backend. (#2122) - Added a
Collect2qBlocks
pass that analyzes the circuit for uninterrupted sequences
of gates (blocks) acting on 2 qubits. (#2134) - Added a
ConsolidateBlocks
that turns previously-collected blocks of any size
into equivalent Unitary operators in the circuit. (#2134) - Added support for parameterized circuits. (#2103)
- Added preset PassManagers that offer predetermined pipelines of transpiler passes. (#2163)
Changed
- require scipy>=1.0, use
scipy.stats.unitary_group.rvs
forrandom_unitary()
. - two_qubit_kak decomposition works with Operator or raw matrix input objects.
- process_fidelity works with QuantumChannel and Operator object inputs.
- Backend defaults values are no longer required (#2101).
- QuantumCircuit properties more self-consistent and no longer need DAG (#1993).
- The most connected subset in DenseLayout is now reduced bandwidth (#2021).
- plot_histogram now allows sorting by Hamming distance from target_string (#2064).
- FunctionalPulse is no longer a class and instead is a decorator,
functional_pulse
that returns aSamplePulse
when called. (#2043) - Changed
average_data
to accept observable input in matrix form (#1858) - Change random_state to take in dim over number of qubits (#1857)
- The
Exception
subclasses have been moved to an.exceptions
module
within each package (for example,qiskit.exceptions.QiskitError
) (#1600). - The
QiskitTestCase
and testing utilities are now included as part of
qiskit.test
and thus available for third-party implementations, with
convenience test cases for providers and backends. (#1616, #1844) - The snapshot instruction now takes
label
andsnap_type
instead of
slot
(#1615). - The test folders have been reorganized to match the python modules (#1625)
- The circuits_to_qobj no longers uses the unrollers (#1629)
- The previously deprecated default output of
circuit_drawer()
(using latex
and falling back to mpl) is no longer present. Instead the default output
is the ascii arttext
output backend. - Changed param to params in Instruction (#1665).
dag_drawer
andplot_gate_map
are available via importing
qiskit.tools.visualization
. They will raise at the point of use, if
dependencies are not installed (#1669).- The
qiskit.validation
schemas are now strict and raise a more specific
ModelValidationError
(#1695). - The default transpile pipeline will now add a barrier before the set of
final measurements when compiling for both simulators and devices (#1591). - Purity function in
qiskit.tools.qi.qi
calls new version in
qiskit.quantum_information
and issues deprecation warning (#1733) - Updated
dag.node_counter
to return the current number of nodes (#1763) - The argument
basis_gates
used incompile
,execute
, andtranspile
is not longer a comma-separated string but a list of strings. For example,
this basis['u1','u2','u3','cx']
should be used instead of'u1,u2,u3,cx'
(#1333) - Methods on the
DAGCircuit
which previously returned node_ids and/or dicts now
returnDAGNodes
- The
Qobj
classes have been reimplemented using models and schemas, as the
rest of spec-defined entities. (#1909). - The rzz gate is now represented as a line when printed in text (#1957).
- Text drawer has support for multi-q gates (#1939).
- Separate
Qobj
intoPulseQobj
andQasmQobj
(#1969). - It is possible to define a layout as a list of integers. This maps the ordered list
of virtual circuit qubits to physical qubits as defined by the list of integers (#1946). - Instructions no longer have context about where they are in a circuit. Instead,
the circuit keeps this context. So Instructions are now light-weight and only
have a name, num_qubits, num_clbits and params (#1816). - The old syntax for attaching a gate to the circuit then modifying it is no longer
supported (e.g.circuit.s(qr).inverse()
orcircuit.s(qr).c_if(cr, 4)
).
Instead, you must first modify the gate then attach it (#1816). QuantumCircuit.data
now contains a list of tuples, where each tuple is a
(instruction, qarg, carg) (#1816).- The visualization subpackage has moved from
qiskit.tools.visualization
to
qiskit.visualization
. The public API (which was declared stable in
the 0.7 release) is still accessible off ofqiskit.tools.visualization
.
(#1878) - Layout object can now only be constructed from a dictionary, and must be bijective (#2157).
transpile()
acceptsinitial_layout
in the form of dict, list or Layout (#2157).- Not specifying a basis in
execute()
ortranspile()
no longer defaults to unrolling
to the ['u1', 'u2', 'u3', 'cx'] basis. Instead the default behavior is to not unroll,
unless specifically requested (#2166). - Instruction.copy() is now a shallow copy instead of deep (#2214)
- Layout and CouplingMap classes are now accessible from qiskit.tran...
Qiskit Terra 0.7.2
Changelog
Fixed
- A potential issue where the backend configuration schema validation would
improperly reject valid responses from the API (#2258)
Qiskit Terra 0.7.1
Changelog
Fixed
- Fixed a bug with measurement sampling optimization in BasicAer
qasm_simulator (#1624).
Qiskit Terra 0.7.0
Changelog
Added
- Added DAG visualizer which requires
Graphivz <https://www.graphviz.org/>
_
(#1059) - Added an ASCII art circuit visualizer (#909)
- 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 theqiskit.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()
andfrom_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) - Added
backend_monitor
andbackend_overview
Jupyter magics,
as well asplot_coupling_map
(#1231) - Added a
Layout
object (#1313) - 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 settingmemory=True
incompile()
/execute()
,
and retrieve them fromresult.get_memory()
(#1385). - Added a
qiskit.converters
module for translation between commonly used
representations of a circuit:dag_to_circuits
,circuits_to_dag
,
qobj_to_circuits
,circuits_to_qobj
,ast_to_dag
. - PassManager can schedule passes at init time (#1510).
- Added a
.qobj()
method for IBMQ and local simulator Jobs (#1532). - New Decompose pass for decomposing a gate according to a rule (#1487).
- New Unroller pass in the transpiler for unrolling up to some basis (#1455).
- New BarrierBeforeFinalMeasurements pass for preventing final
measure reorder (#1538). - New CommutationAnalysis and CommutationTransformation transpiler
passes for modifying a DAG based on gate commutativity relations (#1500). - New transpiler mapper pass: BasicSwap (#1270).
- New transpiler mapper pass: LookaheadSwap (#1140).
- New transpiler mapper pass: StochasticSwap (#1520).
- New CXDirection pass for fixing the direction of cx gates (#1410).
- New CheckMap pass for checking if circuit meets mapping requirements (#1433).
- New Optimize1QGate pass for combining chains of 1q rotations (#1442).
Changed
- Evolved pass-based transpiler to support advanced functionality (#1060)
.retrieve_job()
and.jobs()
no longer returns results by default,
instead the result must be accessed by theresult()
method on the job
objects (#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 thempl
output is used and a
TextDrawer
object whentext
output is used. (#1224, #1181) - Speed up the Pauli class and extended its operators (#1271 #1166).
IBMQ.save_account()
now takes anoverwrite
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.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). transpile()
now takes QuantumCircuit(s) to QuantumCircuit(s), and DAG
processing is only done internally (#1397).- The different unrollers are deprecated. The only unrolling happens
from DAG to DAG (#1210). - 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 qiskit.backends
has been renamed toqiskit.providers
(#1531).qiskit.backends.aer
has been removed in favor of
qiskit.providers.builtinsimulators
(Python simulators) and
qiskit.providers.legacysimulators
(C++ simulators) (#1484)Aer
inqiskit
root module depends on having the
qiskit-aer package installed, by default it is not present. Instead there are
2 new provider instances in the root moduleBasicAer
which provides the
Python simulators andLegacySimulators
which provides the old C++
simulators in qiskit-terra. (#1484)
Deprecated
plot_circuit()
,latex_circuit_drawer()
,generate_latex_source()
,
andmatplotlib_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
qiskit.wrapper.load_qasm_string()
andqiskit.wrapper.load_qasm_file()
functions are deprecated and theQuantumCircuit.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 theqiskit.tools.visualization.circuit_drawer()
kwargsplot_barriers
andreverse_bits
should be used instead. (#1180) - The
transpile_dag()
functionformat
kwarg for emitting different
output formats is deprecated (#1319). - Several methods of
qiskit.Result
have been deprecated (#1360). - The functions
plot_state()
andiplot_state()
have been depreciated.
Instead the functionsplot_state_*()
andiplot_state_*()
should be
called. (#1359) - The
skip_transpiler
arg has been deprecated fromcompile()
and
execute()
in favor of using the PassManager directly.
Fixed
- 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 inplot_histgram()
now functions correctly
(#1359). - parallel_map no longer creates a progress bar for a single circuit (#1394).
- The
timeout
parameter is now passed into the inner_wait_for_submission
function inIBMQJob
from_wait_for_result
(#1542).
Removed
- 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
, and
qiskit.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 between
qiskit.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 the
backend_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()
...
Qiskit Terra 0.6.1
Changelog
- Re-package Linux wheel to fix a problem with the native simulator
Qiskit Terra 0.6.0
Changelog
Added
- 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 toIBMQ.load_accounts()
.
Changed
- 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: - 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)
Deprecated
- 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
- Removed the QuantumProgram class. (#724)
Fixed
- 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).
Qiskit Terra 0.5.7
Changed
- Add new backend names support, with aliasing for the old ones.
QISKit SDK 0.5.6
QISKit SDK 0.5.5
Changelog
Added
- 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).
Changed
- 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 nowstatus['operational']
(#609). - Added support for registering third-party providers in
register()
(#602).
Removed
- Remove OpenQuantumCompiler (#610).
- Remove Clifford simulator from default available_backends, until its stable
release (#555). - Remove ProjectQ simulators for moving to new repository (#553).
Fixed
QISKit SDK 0.5.4
Changelog
Added
Performance improvements:
remove deepcopies from dagcircuit, and extra check on qasm() (#523)
Changed
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).
Removed
Remove Sympy simulators for moving to new repository (#514)
Fixed
Fix erroneous density matrix and probabilities in C++ simulator (#518)
Fix hardcoded backend mapping tests (#521)
Removed _modifiers call from reapply (#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)