---
title: Qiskit SDK 1.4 release notes
description: Changes made in Qiskit SDK 1.4
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/release-notes/1.4
---

# Qiskit SDK 1.4 release notes

## 1.4.6

### Prelude

Qiskit v1.4.6 is a security-only release, and the final release in the Qiskit v1.x series.

Qiskit v1.x is no longer maintained in any form.

### Security Issues

- The OpenQASM 2 parsers ([`qasm2.load()`](/docs/api/qiskit/1.4/qasm2#qiskit.qasm2.load "qiskit.qasm2.load") and [`qasm2.loads()`](/docs/api/qiskit/1.4/qasm2#qiskit.qasm2.loads "qiskit.qasm2.loads")) will now exit with a [`RecursionError`](https://docs.python.org/3/library/exceptions.html#RecursionError) when attempting to evaluate an excessively deep expression. The maximum allowed depth is taken from Python’s [`sys.getrecursionlimit()`](https://docs.python.org/3/library/sys.html#sys.getrecursionlimit) at the point of entry to the parsers.

  Previously, the parsers could recurse arbitrarily in Rust space, eventually exceeding the maximum stack space and segfaulting the process.

## 1.4.5

### Prelude

Qiskit v1.4.5 is the last bugfix release in the 1.4 series and marks the end-of-life of the series. Support for security fixes in the 1.4 series will be continued until March 31st, 2026.

### Bug Fixes

- Fixed the handling of anonymous bits in circuit visualization. Previously, bits that were not associated to a register would be displayed with the default Python representation, whereas now they show the index in a readable fashion. Fixed [#14031](https://github.com/Qiskit/qiskit/issues/14031).

- Fixed an issue in the [`Optimize1qGatesDecomposition`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.Optimize1qGatesDecomposition "qiskit.transpiler.passes.Optimize1qGatesDecomposition") when the pass was initialized with a [`Target`](/docs/api/qiskit/1.4/qiskit.transpiler.Target "qiskit.transpiler.Target") that contains 1q gates with fixed angle parameters. Previously, the pass would potentially output gates outside the target as it wasn’t checking that the gate in the target supported arbitrary parameter values. Fixed [#14743](https://github.com/Qiskit/qiskit/issues/14743).

- Fixed incorrect behavior in the [`BasisTranslator`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.BasisTranslator "qiskit.transpiler.passes.BasisTranslator") pass where a multi-qubit gate within a [`ControlFlowOp`](/docs/api/qiskit/1.4/qiskit.circuit.ControlFlowOp "qiskit.circuit.ControlFlowOp") block would track the supported operation with its local qubit indices instead of using the absolute indices of the outer circuit. Fixed [#13728](https://github.com/Qiskit/qiskit/issues/13728).

- Fixed a bug in [`HighLevelSynthesis`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.HighLevelSynthesis "qiskit.transpiler.passes.HighLevelSynthesis"), where custom gate calibrations were not recognized if the gate appeared nested inside other instruction objects. Partially fixed [#13728](https://github.com/Qiskit/qiskit/issues/13728).

- Fixed a failure in the circuit text drawer, which could occur when circuit blocks inside control flow operations were defined on different registers than the outer circuit. This situation could for example happen when appending [`ControlFlowOp`](/docs/api/qiskit/1.4/qiskit.circuit.ControlFlowOp "qiskit.circuit.ControlFlowOp") operations directly, or for circuits after transpilation.

## 1.4.4

### Prelude

Qiskit v1.4.4 is a minor bugfix release for the v1.4.x release series.

### Bug Fixes

- [`ApplyLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.ApplyLayout "qiskit.transpiler.passes.ApplyLayout") will now correctly handle the case of applying a zero-qubit [`Layout`](/docs/api/qiskit/1.4/qiskit.transpiler.Layout "qiskit.transpiler.Layout"). Previously, it would claim that no layout had been set, even if the `"layout"` field of the [`PropertySet`](/docs/api/qiskit/1.4/qiskit.passmanager.PropertySet "qiskit.passmanager.PropertySet") was equal to `Layout()`.

- Fixed a bug in method [`QuantumCircuit.assign_parameters()`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#assign_parameters "qiskit.circuit.QuantumCircuit.assign_parameters") that resulted in an error with string inputs and argument `strict=False`. Refer to [#13933](https://github.com/Qiskit/qiskit/issues/13933) for more details.

- Fixed the [`name`](/docs/api/qiskit/1.4/qiskit.circuit.Gate#name "qiskit.circuit.Gate.name") attribute of the [`OrGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.OrGate "qiskit.circuit.library.OrGate") class so that it now is set to `"or"` to uniquely identify this gate. It was previously incorrectly set to `"and"` which made it impossible to distinguish it from [`AndGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.AndGate "qiskit.circuit.library.AndGate") or have synthesis plugins to synthesize an [`OrGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.OrGate "qiskit.circuit.library.OrGate"). Fixed [#14434](https://github.com/Qiskit/qiskit/issues/14434)

- Fixed a bug in the [`ElidePermutations`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.ElidePermutations "qiskit.transpiler.passes.ElidePermutations") transpiler pass, where the qubit mapping was not updated correctly in the presence of [`PermutationGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.PermutationGate "qiskit.circuit.library.PermutationGate")s, leading to incorrect circuits and updates to the pass manager’s property set.

- Fixed a bug in the [`PauliEvolutionSynthesisDefault`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.synthesis.hls_plugins.PauliEvolutionSynthesisDefault "qiskit.transpiler.passes.synthesis.hls_plugins.PauliEvolutionSynthesisDefault") and [`PauliEvolutionSynthesisRustiq`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.synthesis.hls_plugins.PauliEvolutionSynthesisRustiq "qiskit.transpiler.passes.synthesis.hls_plugins.PauliEvolutionSynthesisRustiq") plugins that modified the `.synthesis` attribute of the original circuit when setting `preserve_order=False`. The behavior of the plugins has been restored and the original circuit is now preserved throughout the transpilation pipeline.

- Fixed a correctness bug when exporting circuits with delay instructions using `'ps'` units to QASM3.

- Fixed a compatibility issue with the minimum supported version of rustworkx, 0.15. With certain inputs the [`VF2Layout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2Layout "qiskit.transpiler.passes.VF2Layout") and [`VF2PostLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2PostLayout "qiskit.transpiler.passes.VF2PostLayout") were previously using a rustworkx method that was added in rustworkx 0.16.0 which would cause an error when using an older rustworkx release which is listed as supported.

- [`SabreLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SabreLayout "qiskit.transpiler.passes.SabreLayout") and [`SabreSwap`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SabreSwap "qiskit.transpiler.passes.SabreSwap") will no longer panic when applying the routing result to a circuit that uses [`expr.Var`](/docs/api/qiskit/1.4/circuit_classical#qiskit.circuit.classical.expr.Var "qiskit.circuit.classical.expr.Var") objects in a nested control-flow scope.

- The circuit library function [`quantum_volume()`](/docs/api/qiskit/1.4/qiskit.circuit.library.quantum_volume "qiskit.circuit.library.quantum_volume") was updated to handle a [`numpy.random.Generator`](https://numpy.org/doc/stable/reference/random/generator.html#numpy.random.Generator) as input for its `seed` argument. Previously, such a generator argument would result in a `TypeError`.

- Fixed a bug in circuit library functions [`evolved_operator_ansatz()`](/docs/api/qiskit/1.4/qiskit.circuit.library.evolved_operator_ansatz "qiskit.circuit.library.evolved_operator_ansatz"), [`qaoa_ansatz()`](/docs/api/qiskit/1.4/qiskit.circuit.library.qaoa_ansatz "qiskit.circuit.library.qaoa_ansatz") and [`hamiltonian_variational_ansatz()`](/docs/api/qiskit/1.4/qiskit.circuit.library.hamiltonian_variational_ansatz "qiskit.circuit.library.hamiltonian_variational_ansatz"), where the parameters had a zero complex component. This mostly was no issue, unless translated to SymPy using the [`ParameterExpression.sympify()`](/docs/api/qiskit/1.4/qiskit.circuit.ParameterExpression#sympify "qiskit.circuit.ParameterExpression.sympify") method, which would then raise an error.

## 1.4.3

### Prelude

Qiskit v1.4.3 is a minor bugfix release for the v1.4.x release series.

### Bug Fixes

- Fixed a bug in [`DAGCircuit`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGCircuit "qiskit.dagcircuit.DAGCircuit") that would cause output [`Var`](/docs/api/qiskit/1.4/circuit_classical#qiskit.circuit.classical.expr.Var "qiskit.circuit.classical.expr.Var") nodes to become input nodes during `deepcopy` and pickling.

- Fixed a problem in [`BasisTranslator`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.BasisTranslator "qiskit.transpiler.passes.BasisTranslator") transpiler pass, where the global phase of the DAG was not updated correctly. Fixed [#14074](https://github.com/Qiskit/qiskit/issues/14074).

- Fixed a bug in QPY ([`qiskit.qpy`](/docs/api/qiskit/1.4/qpy#module-qiskit.qpy "qiskit.qpy")) where circuits containing gates of class [`MCMTGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.MCMTGate "qiskit.circuit.library.MCMTGate") would fail to serialize. See [#13965](https://github.com/Qiskit/qiskit/issues/13965).

- [`SabreLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SabreLayout "qiskit.transpiler.passes.SabreLayout") will now correctly propagate a circuit’s [`name`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGCircuit#name "qiskit.dagcircuit.DAGCircuit.name") and [`metadata`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGCircuit#metadata "qiskit.dagcircuit.DAGCircuit.metadata") fields when performing as a joint layout and routing pass.

- Fixed a problem in the [`SolovayKitaevSynthesis`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.synthesis.solovay_kitaev_synthesis.SolovayKitaevSynthesis "qiskit.transpiler.passes.synthesis.solovay_kitaev_synthesis.SolovayKitaevSynthesis") unitary synthesis plugin, where repeatedly running the plugin with different basis gates incorrectly reused the basis gates from the first run only. The problem was due to ignoring the basis gates when caching basic approximations, and is now fixed.

- Fixed a problem in the [`SolovayKitaev`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SolovayKitaev "qiskit.transpiler.passes.SolovayKitaev") transpiler pass where the pass could crash due to encountering a 180 degree rotation in the internal recursion, which was not handled correctly.

- Fixed a problem in the [`SolovayKitaev`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SolovayKitaev "qiskit.transpiler.passes.SolovayKitaev") transpiler pass where the generated approximation could have a phase that differs by $\pi$ from the correct value. This resulted due to the internal $SO(3)$ representation, which requires additional handling to obtain the correct sign of the qubit gate matrix. Fixed [#9552](https://github.com/Qiskit/qiskit/issues/9552)

- The fallback error heuristic in [`VF2Layout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2Layout "qiskit.transpiler.passes.VF2Layout") and [`VF2PostLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2PostLayout "qiskit.transpiler.passes.VF2PostLayout"), used when there were no reported error rates, could previously assign errors greater than one, and have unpredictable effects on the resulting layout scores.

## 1.4.2

### Prelude

Qiskit 1.4.2 is a patch release that fixes bugs found in the 1.4 release series.

### New Features

- Added a new flag `trust_payload`, to the [`qpy.load()`](/docs/api/qiskit/1.4/qpy#qiskit.qpy.load "qiskit.qpy.load") function. This is used to force the function to load a payload that is potentially insecure. If the payload contains [`ScheduleBlock`](/docs/api/qiskit/1.4/qiskit.pulse.ScheduleBlock "qiskit.pulse.ScheduleBlock") objects (either standalone or as part of [`QuantumCircuit.calibrations`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#calibrations "qiskit.circuit.QuantumCircuit.calibrations")) and the symbolic encoding in the QPY file is set to `sympy` then the payload is potentially insecure and loading it could allow for arbitrary code execution. Since this flag is for controlling the deserialization of [`ScheduleBlock`](/docs/api/qiskit/1.4/qiskit.pulse.ScheduleBlock "qiskit.pulse.ScheduleBlock") instances which do not exist in Qiskit >= 2.0.0 this flag will only exist in Qiskit 1.4.x and will not exist in Qiskit >=2.0.0.

### Upgrade Notes

- By default, `qpy.load` will now raise a [`QpyError`](/docs/api/qiskit/1.4/qpy#qiskit.qpy.QpyError "qiskit.qpy.QpyError") when called with a QPY payload that contains a [`ScheduleBlock`](/docs/api/qiskit/1.4/qiskit.pulse.ScheduleBlock "qiskit.pulse.ScheduleBlock") object (either standalone or as part of [`QuantumCircuit.calibrations`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#calibrations "qiskit.circuit.QuantumCircuit.calibrations")) which is using `sympy` for encoding symbolic expressions. This is because the payload is potentially vulnerable and should only be loaded if you trust the contents. If you are certain that the payload is not malicious, you can set the new `trust_payload` argument of `qpy.load` to `True`, and this will enable loading the payload.

### Security Issues

- Fixed a security vulnerability in [`qpy.load()`](/docs/api/qiskit/1.4/qpy#qiskit.qpy.load "qiskit.qpy.load") when loading payloads that use `sympy` to serialize [`ParameterExpression`](/docs/api/qiskit/1.4/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression") objects and other symbolic expressions. This potentially includes any QPY payload using QPY version \< 10, and optionally 10, 11, and 12 depending on the symbolic encoding used in the serialization step ([`qpy.dump()`](/docs/api/qiskit/1.4/qpy#qiskit.qpy.dump "qiskit.qpy.dump")).

### Bug Fixes

- Fixed a bug in the basis approximation generation for [`SolovayKitaev`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.SolovayKitaev "qiskit.transpiler.passes.SolovayKitaev"). Previously, generating discrete basis approximations using `generate_basis_approximations` for a basis containing `"sx"` or `"sxdg"` gates would fail. This has now been fixed.

## 1.4.1

### Prelude

Qiskit 1.4.1 is a small patch release, fixing some bugs found in the 1.4 extended support series.

### Bug Fixes

- Circuits compiled using a preset passmanager constructed by [`generate_preset_pass_manager()`](/docs/api/qiskit/1.4/qiskit.transpiler.generate_preset_pass_manager "qiskit.transpiler.generate_preset_pass_manager") will now correctly retain their [`name`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#name "qiskit.circuit.QuantumCircuit.name") attribute, as they do with [`transpile()`](/docs/api/qiskit/1.4/compiler#qiskit.compiler.transpile "qiskit.compiler.transpile").

- Fixed an issue with QPY 13 when serializing or deserializing a `ParameterExpression` object that was defined by calling [`ParameterExpression.subs()`](/docs/api/qiskit/1.4/qiskit.circuit.ParameterExpression#subs "qiskit.circuit.ParameterExpression.subs") to substitute a `Parameter` with a [`ParameterExpression`](/docs/api/qiskit/1.4/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression"). For example:

  ```python
  from qiskit.circuit import Parameter

  a = Parameter("A")
  b = Parameter("B")
  expr = a + b
  c = Parameter("C")
  new_expr = c ** 3.14
  final_expr.subs({b: new_expr})
  ```

  In previous releases if you went to serialize a [`QuantumCircuit`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit") that contained an expression like this with [`qpy.dump()`](/docs/api/qiskit/1.4/qpy#qiskit.qpy.dump "qiskit.qpy.dump") it would have raised an `AttributeError` with an error message ‘ParameterExpression’ object has no attribute ‘name’ when using QPY 13 (the default). This has been fixed so that the exception is no longer raised and you can serialize and deserialize a payload containing these nested [`ParameterExpression`](/docs/api/qiskit/1.4/qiskit.circuit.ParameterExpression "qiskit.circuit.ParameterExpression") objects. See [#13879](https://github.com/Qiskit/qiskit/issues/13879).

## 1.4.0

### Prelude

The Qiskit v1.4 release is the final minor version release for the v1.x series. This release contains minimal features, and primarily adds new deprecation warnings for API changes coming in the future major version release v2.0. It is fully compatible with the Qiskit v1.3.x releases. It is strongly recommended that you upgrade from v1.3.x to v1.4 so that you’re able to see the warnings about which interfaces will change with Qiskit v2.0. The v1.4.x release series will continue to be supported and receive bugfixes for 6 months and security fixes for 1 year after this release. The fixes will take place via patch releases. For more details on the release schedule and support cycle see: [qiskit-sdk-version-strategy](/docs/guides/qiskit-sdk-version-strategy) which documents the release schedule in more detail.

### Circuits Features

- Added a new method, [`QuantumCircuit.estimate_duration()`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#estimate_duration "qiskit.circuit.QuantumCircuit.estimate_duration"), to compute the estimated duration of a scheduled circuit output from the [`transpiler`](/docs/api/qiskit/1.4/transpiler#module-qiskit.transpiler "qiskit.transpiler"). This should be used if you need an estimate of the full circuit duration instead of the deprecated [`QuantumCircuit.duration`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit#duration "qiskit.circuit.QuantumCircuit.duration") attribute.

### Circuits Deprecations

- Subclassing [`Register`](/docs/api/qiskit/1.4/circuit#qiskit.circuit.Register "qiskit.circuit.Register") or [`Bit`](/docs/api/qiskit/1.4/circuit#qiskit.circuit.Bit "qiskit.circuit.Bit"), or any subclass of them (for example, [`QuantumRegister`](/docs/api/qiskit/1.4/circuit#qiskit.circuit.QuantumRegister "qiskit.circuit.QuantumRegister") or [`Qubit`](/docs/api/qiskit/1.4/circuit#qiskit.circuit.Qubit "qiskit.circuit.Qubit")) is deprecated as of Qiskit v1.4. Subclassing these types was never explicitly supported by Qiskit, and its meaning was never defined. In Qiskit v2.0, the subclassing may become impossible due to technical limitations, and will certainly not be stored in a circuit. This is due to the move of the data model to the Rust space to improve performance.

- The `dag` optional parameter in the constructor of `DAGNode` subclasses (namely `DAGOpNode`), which has been unused and ignored since Qiskit v1.2, is now deprecated as of Qiskit v1.4 and will be removed in Qiskit v2.0.

- The Multiple-Control-Multiple-Target (MCMT) class in `MCMT` is now deprecated and replaced by [`MCMTGate`](/docs/api/qiskit/1.4/qiskit.circuit.library.MCMTGate "qiskit.circuit.library.MCMTGate"), which is a proper [`Gate`](/docs/api/qiskit/1.4/qiskit.circuit.Gate "qiskit.circuit.Gate") subclass. Using a gate instead of a circuit allows the compiler to reason about the object at a higher level of abstraction and unlocks the use of multiple synthesis plugins.

- The [`qiskit.circuit.classicalfunction`](/docs/api/qiskit/1.4/classicalfunction#module-qiskit.circuit.classicalfunction "qiskit.circuit.classicalfunction") module, and with it the [`ClassicalFunction`](/docs/api/qiskit/1.4/qiskit.circuit.classicalfunction.ClassicalFunction "qiskit.circuit.classicalfunction.ClassicalFunction") class and its related [`classical_function()`](/docs/api/qiskit/1.4/classicalfunction#qiskit.circuit.classicalfunction.classical_function "qiskit.circuit.classicalfunction.classical_function") and [`BooleanExpression`](/docs/api/qiskit/1.4/qiskit.circuit.classicalfunction.BooleanExpression "qiskit.circuit.classicalfunction.BooleanExpression") utilities, have been deprecated as of Qiskit v1.4 and will be removed in Qiskit v2.0.

  This change is performed to avoid a dependency on the external library `tweedledum`, which is no longer compatible with all of Qiskit’s supported platforms and Python versions. For a similar functionality please use the [`PhaseOracle`](/docs/api/qiskit/1.4/qiskit.circuit.library.PhaseOracle "qiskit.circuit.library.PhaseOracle") which is going to have an implementation that doesn’t use `tweedledum`, and the `BitFlipOracle` which will be added in Qiskit v2.0.

  Until `BitFlipOracle` is added, a phase-flip oracle can be converted to a bit-flip oracle by conditioning it on the result qubit, and applying Hadamard gates before and after the application of the oracle, as in the following example (where the oracle is on `qr_x` and the result is on `qr_y`):

  ```python
  from qiskit import QuantumRegister, QuantumCircuit
  from qiskit.circuit.library.phase_oracle import PhaseOracle

  bool_expr = "(x0 & x1 | ~x2) & x4"
  qr_x = QuantumRegister(4, "x")
  qr_y = QuantumRegister(1, "y")

  bit_flip_oracle = QuantumCircuit(qr_x, qr_y)
  phase_flip_oracle = PhaseOracle(bool_expr)
  controlled_phase_flip_oracle = phase_flip_oracle.control(1)
  bit_flip_oracle.h(qr_y)
  bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True)
  bit_flip_oracle.h(qr_y)

  print(bit_flip_oracle)
  ```

  Which results in

  ```text
            ┌───────────────┐     
  x_0: ─────┤0              ├─────
            │               │     
  x_1: ─────┤1              ├─────
            │  Phase Oracle │     
  x_2: ─────┤2              ├─────
            │               │     
  x_3: ─────┤3              ├─────
       ┌───┐└───────┬───────┘┌───┐
    y: ┤ H ├────────■────────┤ H ├
       └───┘                 └───┘
  ```

### Primitives Deprecations

- Providing inputs of type [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") to the `backend` argument of [`BackendSamplerV2`](/docs/api/qiskit/1.4/qiskit.primitives.BackendSamplerV2 "qiskit.primitives.BackendSamplerV2") and [`BackendEstimatorV2`](/docs/api/qiskit/1.4/qiskit.primitives.BackendEstimatorV2 "qiskit.primitives.BackendEstimatorV2") is deprecated as of Qiskit 1.4 and will be removed in Qiskit 2.0. Use an instance of [`BackendV2`](/docs/api/qiskit/1.4/qiskit.providers.BackendV2 "qiskit.providers.BackendV2") instead.

### Providers Deprecations

- The [`BackendV2Converter`](/docs/api/qiskit/1.4/qiskit.providers.BackendV2Converter "qiskit.providers.BackendV2Converter") class and [`convert_to_target()`](/docs/api/qiskit/1.4/qiskit.providers.convert_to_target "qiskit.providers.convert_to_target") functions have been deprecated in Qiskit v1.4 following the deprecation of [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1"). The [`convert_to_target()`](/docs/api/qiskit/1.4/qiskit.providers.convert_to_target "qiskit.providers.convert_to_target") function is used to build a [`Target`](/docs/api/qiskit/1.4/qiskit.transpiler.Target "qiskit.transpiler.Target") instance from a series of objects from the deprecated [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") workflow: [`BackendConfiguration`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendConfiguration "qiskit.providers.models.BackendConfiguration"), [`BackendProperties`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendProperties "qiskit.providers.models.BackendProperties") and [`PulseDefaults`](/docs/api/qiskit/1.4/qiskit.providers.models.PulseDefaults "qiskit.providers.models.PulseDefaults"). [`BackendV2Converter`](/docs/api/qiskit/1.4/qiskit.providers.BackendV2Converter "qiskit.providers.BackendV2Converter") is used for converting [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") to [`BackendV2`](/docs/api/qiskit/1.4/qiskit.providers.BackendV2 "qiskit.providers.BackendV2"), and cannot be maintained once [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") is removed.

- The [`BasicSimulator.run_experiment()`](/docs/api/qiskit/1.4/qiskit.providers.basic_provider.BasicSimulator#run_experiment "qiskit.providers.basic_provider.BasicSimulator.run_experiment") method has been deprecated and will be removed in Qiskit v2.0. The method takes a [`QasmQobjExperiment`](/docs/api/qiskit/1.4/qiskit.qobj.QasmQobjExperiment "qiskit.qobj.QasmQobjExperiment") as input argument, which has been deprecated together with the `Qobj` class and other related functionality. You can call [`BasicSimulator.run()`](/docs/api/qiskit/1.4/qiskit.providers.basic_provider.BasicSimulator#run "qiskit.providers.basic_provider.BasicSimulator.run") with a [`QuantumCircuit`](/docs/api/qiskit/1.4/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit") input instead.

- The error types [`BackendPropertyError`](/docs/api/qiskit/1.4/providers#qiskit.providers.BackendPropertyError "qiskit.providers.BackendPropertyError") and [`BackendConfigurationError`](/docs/api/qiskit/1.4/providers#qiskit.providers.BackendConfigurationError "qiskit.providers.BackendConfigurationError") have been deprecated in Qiskit 1.4 and will be removed in Qiskit 2.0. These errors are only used when retrieving items from the deprecated [`BackendProperties`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendProperties "qiskit.providers.models.BackendProperties") and [`BackendConfiguration`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendConfiguration "qiskit.providers.models.BackendConfiguration") objects.

- The classes [`GateProperties`](/docs/api/qiskit/1.4/qiskit.providers.models.GateProperties "qiskit.providers.models.GateProperties"), [`BackendStatus`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendStatus "qiskit.providers.models.BackendStatus"), and [`qiskit.providers.models.JobStatus`](/docs/api/qiskit/1.4/qiskit.providers.models.JobStatus "qiskit.providers.models.JobStatus"), which are part of the legacy [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") workflow, are now deprecated. These should have been deprecated in Qiskit 1.2 together with the related elements in [`qiskit.providers.models`](/docs/api/qiskit/1.4/providers_models#module-qiskit.providers.models "qiskit.providers.models").

### Synthesis Deprecations

- The signature of the argument `atomic_evolution` in the constructor of the classes [`LieTrotter`](/docs/api/qiskit/1.4/qiskit.synthesis.LieTrotter "qiskit.synthesis.LieTrotter"), [`ProductFormula`](/docs/api/qiskit/1.4/qiskit.synthesis.ProductFormula "qiskit.synthesis.ProductFormula"), and [`SuzukiTrotter`](/docs/api/qiskit/1.4/qiskit.synthesis.SuzukiTrotter "qiskit.synthesis.SuzukiTrotter") was modified in Qiskit v1.2 to improve the visualization of the output circuit. The older signature has now been deprecated in favor of the new alternative. From Qiskit v2.0, only the new alternative will be valid.

  To migrate, please modify the callable from `Callable[[Pauli | SparsePauliOp, float], QuantumCircuit]` to `Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None]`.

### Transpiler Deprecations

- The [`DAGOpNode.sort_key`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGOpNode#sort_key "qiskit.dagcircuit.DAGOpNode.sort_key"), [`DAGOutNode.sort_key`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGOutNode#sort_key "qiskit.dagcircuit.DAGOutNode.sort_key"), and [`DAGInNode.sort_key`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGInNode#sort_key "qiskit.dagcircuit.DAGInNode.sort_key") attributes have been deprecated and will be removed in the Qiskit v2.0 release. These attributes were originally used as a lexicographical key for topological sorting nodes in a [`DAGCircuit`](/docs/api/qiskit/1.4/qiskit.dagcircuit.DAGCircuit "qiskit.dagcircuit.DAGCircuit"). However, the key is no longer used for this as the sorting is done internally in Rust code now. If you’re using this attribute, you can recreate the key from the other attributes of a node. For example, you can use a function like:

  ```python
  def get_sort_key(node: DAGNode):
      if isinstance(node, (DAGInNode, DAGOutNode)):
          return str(node.wire)
      return ",".join(
          f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
      )
  ```

  which will generate a string like the sort key does.

- The following uses of the [`BackendProperties`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendProperties "qiskit.providers.models.BackendProperties") object in the transpilation pipeline have been deprecated as of Qiskit v1.4 and will be removed in Qiskit v2.0:

  - `backend_prop` input argument in [`DenseLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.DenseLayout "qiskit.transpiler.passes.DenseLayout")
  - `properties` input argument in [`VF2Layout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2Layout "qiskit.transpiler.passes.VF2Layout")
  - `properties` and `coupling_map` input arguments in [`VF2PostLayout`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.VF2PostLayout "qiskit.transpiler.passes.VF2PostLayout"). Note that `coupling_map` was only used in the presence of `properties`.
  - `backend_props` input argument in [`UnitarySynthesis`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.UnitarySynthesis "qiskit.transpiler.passes.UnitarySynthesis")
  - `backend_properties` input argument in [`PassManagerConfig`](/docs/api/qiskit/1.4/qiskit.transpiler.PassManagerConfig "qiskit.transpiler.PassManagerConfig")
  - `backend_properties` in [`Target.from_configuration()`](/docs/api/qiskit/1.4/qiskit.transpiler.Target#from_configuration "qiskit.transpiler.Target.from_configuration")
  - `backend_properties` in [`generate_routing_passmanager()`](/docs/api/qiskit/1.4/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_routing_passmanager "qiskit.transpiler.preset_passmanagers.generate_routing_passmanager")
  - `backend_properties` in [`generate_translation_passmanager()`](/docs/api/qiskit/1.4/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_translation_passmanager "qiskit.transpiler.preset_passmanagers.generate_translation_passmanager")

  The [`BackendProperties`](/docs/api/qiskit/1.4/qiskit.providers.models.BackendProperties "qiskit.providers.models.BackendProperties") class has been deprecated since Qiskit v1.2, together with other elements from the [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") workflow, and will be removed in Qiskit v2.0. The alternative path for communicating hardware information to the transpilation argument is the [`Target`](/docs/api/qiskit/1.4/qiskit.transpiler.Target "qiskit.transpiler.Target") class, which can be set using the `target` input argument. Specific instruction properties such as gate errors or durations can be added to a [`Target`](/docs/api/qiskit/1.4/qiskit.transpiler.Target "qiskit.transpiler.Target") upon construction through the [`Target.add_instruction()`](/docs/api/qiskit/1.4/qiskit.transpiler.Target#add_instruction "qiskit.transpiler.Target.add_instruction") method.

  In the case of [`generate_routing_passmanager()`](/docs/api/qiskit/1.4/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_routing_passmanager "qiskit.transpiler.preset_passmanagers.generate_routing_passmanager") and [`generate_translation_passmanager()`](/docs/api/qiskit/1.4/transpiler_preset#qiskit.transpiler.preset_passmanagers.generate_translation_passmanager "qiskit.transpiler.preset_passmanagers.generate_translation_passmanager"), the `backend_properties` argument is optional and is superseded when the required `target` argument is populated. Usage of the argument can safely be removed in 1.x as long as you were passing in a target, which was the recommended use.

- The Pulse deprecation in Qiskit v1.3, included calibration builder passes such as [`RXCalibrationBuilder`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.RXCalibrationBuilder "qiskit.transpiler.passes.RXCalibrationBuilder"). The [`NormalizeRXAngle`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.NormalizeRXAngle "qiskit.transpiler.passes.NormalizeRXAngle") pass is a requirement of [`RXCalibrationBuilder`](/docs/api/qiskit/1.4/qiskit.transpiler.passes.RXCalibrationBuilder "qiskit.transpiler.passes.RXCalibrationBuilder"); hence, it is being deprecated in Qiskit v1.4. The [`rzx_templates()`](/docs/api/qiskit/1.4/transpiler_passes#qiskit.transpiler.passes.rzx_templates "qiskit.transpiler.passes.rzx_templates") function in the calibration module is also being deprecated as it is not used in our codebase.

### Visualization Deprecations

- The parameters `show_idle` and `show_barrier` in the timeline drawers are deprecated as of Qiskit v1.4. The alternatives are, respectively, the `idle_wires` and `plot_barriers` parameters, introduced in Qiskit v1.1, which are fully equivalent. The legacy parameter names will be removed in Qiskit v2.0.

- In Qiskit v1.4, the timeline drawer [`timeline_drawer()`](/docs/api/qiskit/1.4/qiskit.visualization.timeline_drawer "qiskit.visualization.timeline_drawer") function will issue a deprecation warning if a `target` is not specified to get the duration of instructions. From Qiskit v2.0 on, `target` will be required and [`timeline_drawer()`](/docs/api/qiskit/1.4/qiskit.visualization.timeline_drawer "qiskit.visualization.timeline_drawer") will fail if it is not specified.

- Providing inputs of type [`BackendV1`](/docs/api/qiskit/1.4/qiskit.providers.BackendV1 "qiskit.providers.BackendV1") to the `backend` argument of [`plot_gate_map()`](/docs/api/qiskit/1.4/qiskit.visualization.plot_gate_map "qiskit.visualization.plot_gate_map"), [`plot_circuit_layout()`](/docs/api/qiskit/1.4/qiskit.visualization.plot_circuit_layout "qiskit.visualization.plot_circuit_layout"), and [`plot_error_map()`](/docs/api/qiskit/1.4/qiskit.visualization.plot_error_map "qiskit.visualization.plot_error_map") are deprecated as of Qiskit 1.4 and will be removed in Qiskit 2.0. Use an instance of [`BackendV2`](/docs/api/qiskit/1.4/qiskit.providers.BackendV2 "qiskit.providers.BackendV2") instead.

### Misc. Deprecations

- The use of positional arguments in the constructor of [`Result`](/docs/api/qiskit/1.4/qiskit.result.Result "qiskit.result.Result") is deprecated as of Qiskit 1.4, and will be disabled in Qiskit 2.0. Please set all arguments using kwarg syntax, i.e: `Result(backend_name="name", ....)`. In addition to this, the `qobj_id` argument is deprecated and will no longer be used in Qiskit 2.0. It will, however, still be possible to set `qobj_id` as a generic kwarg, which will land in the metadata field with the other generic kwargs.

### Bug Fixes

- Fixed an issue in [`Target.has_calibration()`](/docs/api/qiskit/1.4/qiskit.transpiler.Target#has_calibration "qiskit.transpiler.Target.has_calibration") and [`Target.get_calibration()`](/docs/api/qiskit/1.4/qiskit.transpiler.Target#get_calibration "qiskit.transpiler.Target.get_calibration") where passing a parameterized Gate didn’t work as expected. Refer to [qiskit/#11657](https://github.com/Qiskit/qiskit/issues/11657) and [qiskit/#11658](https://github.com/Qiskit/qiskit/issues/11658) for more information.

### Other Notes

- Passing `property_set` as an arbitrary keyword argument to the [`run()`](/docs/api/qiskit/1.4/qiskit.passmanager.BasePassManager#run "qiskit.passmanager.BasePassManager.run") method of a subclass of [`BasePassManager`](/docs/api/qiskit/1.4/qiskit.passmanager.BasePassManager "qiskit.passmanager.BasePassManager") will change behavior in Qiskit v2.0. It is currently forwarded to the internal representation converting functions of the pass manager, as is any arbitrary keyword argument to that method. Starting from Qiskit v2.0, the option will instead be used to set the seed of the [`PropertySet`](/docs/api/qiskit/1.4/qiskit.passmanager.PropertySet "qiskit.passmanager.PropertySet") for the pipeline run, and the argument will not be passed to the conversion functions.

  This note only concerns implementers of subclasses of [`BasePassManager`](/docs/api/qiskit/1.4/qiskit.passmanager.BasePassManager "qiskit.passmanager.BasePassManager") who have chosen their `_passmanager_frontend` and `_passmanager_backend` implementations to accept a keyword argument called `property_set`.
