Skip to content

Qiskit Terra 0.8.0

Compare
Choose a tag to compare
@mtreinish mtreinish released this 02 May 21:01
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 discrete SamplePulse (#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() and assemble() 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 the ResourceEstimation 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 a QuantumCircuit according to its
    pass schedule and returns a QuantumCircuit.
  • 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 for random_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 a SamplePulse 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 and snap_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 art text output backend.
  • Changed param to params in Instruction (#1665).
  • dag_drawer and plot_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 in compile, execute, and transpile
    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
    return DAGNodes
  • 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 into PulseQobj and QasmQobj (#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() or circuit.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 of qiskit.tools.visualization.
    (#1878)
  • Layout object can now only be constructed from a dictionary, and must be bijective (#2157).
  • transpile() accepts initial_layout in the form of dict, list or Layout (#2157).
  • Not specifying a basis in execute() or transpile() 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.transpiler (#2222).

Deprecated

  • The methods prefixed by _get in the DAGCircuit object are being renamed
    without that prefix (see #1346)
  • Changed elements in couplinglist of CouplingMap from tuples to lists
    (#1666).
  • Unroller bases must now be explicit, and violation raises an informative
    QiskitError (#1802).
  • The qiskit.tools.qcvv package is deprecated in favor of Qiskit Ignis (#1884).
  • The qiskit.compile() function is now deprecated in favor of explicitly
    using the qiskit.compiler.transpile() function to transform a circuit followed
    by qiskit.compiler.assemble() to make a qobj out of it.
  • qiskit.converters.qobj_to_circuits() has been deprecated and will be
    removed in a future release. Instead
    qiskit.compiler.disassemble_circuits() should be used to extract
    QuantumCircuit objects from a compiled qobj. (#2137)
  • The qiskit.transpiler.transpile() function is deprecated in favor of
    qiskit.compiler.transpile() (#2166).
  • The seed_mapper argument in transpile() and execute() is deprecated in favor of
    seed_transpile(), which sets the seed for all stochastic stages of the transpiler (#2166).
  • The seed argument is execute() is deprecated in favor of seed_simulator (#2166).
  • The pass_manager argument in transpile() is deprecated. Instead, the
    pass_manager.run() methdod can be used directly to transform the circuit (#2166).
  • The qiskit._util module is deprecated and replaced by qiskit.util.
    qiskit._util will be removed in the 0.9 release. (#2154)

Fixed

  • Fixed #1892, whereby inheriting from QuantumRegister or ClassicalRegister would
    cause a QiskitError in instruction.py (#1908).
  • Fixed #829 by removing dependence on scipy unitary_group (#1857).
  • Fixed a bug with measurement sampling optimization in BasicAer
    qasm_simulator (#1624).
  • Fixed a bug where barriers didn't plot over all qubits when using matplotlib (#1718).
  • Fixed a minor conda env bug in Makefile (#1691).
  • Fixed a bug in BasicMapper pass operating over multiple registers (#1611).
  • Fixed a bug in BarrierBeforeFinalMeasurements which incorrectly moved measurements
    used in conditional operations (#1705).
  • Fixed a bug that with transpile ignoring initial layout when
    coupling map is provided (#1711).
  • Fixed a bug in the definition of the rzz gate (#1940).
  • Fixed a bug in DAGCircuit.collect_runs() that did not exclude conditional gates (#1943).
  • Fixed a mapping issue with layouts on non-adjacent qubits, by adding ancillas (#2023).
  • Fixed a bug in which an initial_layout could be changed even if it made the circuit
    compatible with the device coupling_map (#2036).
  • Fixed qobj_to_circuits for circuits that contain initialize instructions
    (#2138)

Removed

  • The previously deprecated functions plot_circuit(),
    latex_circuit_drawer(), generate_latex_source(), and
    matplotlib_circuit_drawer() from qiskit.tools.visualization have
    been removed. The circuit_drawer() function from the same module should
    be used instead.
  • The previously deprecated keys plot_barriers and reverse_bits keys in
    the style kwarg dict are deprecated, instead the
    qiskit.tools.visualization.circuit_drawer() kwargs plot_barriers and
    reverse_bits should be used instead.
  • Removed the wrapper folder as part of the post 0.7 cleanup (#1613).
  • Removed the python wrappers of the legacy simualtors now that
    Qiskit Aer is out (#1615).
  • Removed simulator instructions save, load, wait, noise
    as unsupported in Aer (#1615).
  • Removed circuit.add as deprecated (#1627)
  • Removed the unroller (#1629)
  • Removed deprecated result methods (#1659)
  • Removed deprecated couplingdict kwarg from CouplingMap (#1666)
  • Removed deprecated transpile_dag() format kwarg (#1664)
  • Removed deprecated Pauli v, w, and pauli_group case arg as int (#1680)
  • Removed deprecated state_fidelity() function from tools.qi (#1681)
  • Removed QISKitError in favor of QiskitError. (#1684)
  • The IBMQ provider (qiskit.providers.ibmq) has been moved to its own
    package (pip install qiskit-ibmq-provider). (#1700)
  • compiled_circuit_qasm has been removed from the Qobj header, since it
    was part of the pre-qobj specification (#1715).
  • Removed the wigner plotting functions plot_wigner_function,
    plot_wigner_curve, plot_wigner_plaquette, and plot_wigner_data
    (#1860).
  • Removed Instruction.reapply() method (#1816).