```{eval-rst}
.. currentmodule:: pytket.extensions.qiskit
```

# Changelog

## 0.59.0 (November 2024)

- Updated pytket version requirement to 1.34.0.
- Fix handling of non-default registers when selecting bits in results.
- Update default compilation to use `Qiskit` `SabreLayoutPassManager` as a `CustomPass`.
- Fix handling of non-default registers when selecting bits in results.
- The {py:func}`tk_to_qiskit` converter gives a warning if the input {py:class}`~pytket.circuit.Circuit` contains [implicit qubit permutations](https://docs.quantinuum.com/tket/user-guide/manual/manual_circuit.html#implicit-qubit-permutations). 

## 0.58.0 (October 2024)

- Updated pytket version requirement to 1.33.1.
- Require qiskit >= 1.2.4.
- Require qiskit-ibm-runtime >= 0.30.0.
- Require qiskit-aer >= 0.15.1.

## 0.57.0 (October 2024)

- Updated pytket version requirement to 1.33.
- Added handling of generalised controlled gates to {py:func}`qiskit_to_tk` and {py:func}`tk_to_qiskit`. The `control_state` is handled directly instead of using additional `X` gates.
- A controlled {py:class}`UnitaryGate` will now be converted to a pytket controlled unitary box by {py:func}`qiskit_to_tk` instead of a controlled {py:class}`~pytket.circuit.CircBox` with a unitary box inside.

## 0.56.0 (September 2024)

- Added {py:class}`AerDensityMatrixBackend` simulator. This simulator has the option to support a {py:class}`NoiseModel`.
- Fix conversion of symbols into qiskit.
- Require qiskit >= 1.2.0.
- Add conversion of controlled unitary gates from qiskit to tket.
- Initialize `TketAutoPass` with a `BackendV2`.
- Update `TketBackend` to derive from `BackendV2`.
- Fix to allow `AerBackend` to work with multi-controlled Z gates.

## 0.55.0 (July 2024)

- Updated pytket version requirement to 1.30.

## 0.54.1 (June 2024)

- Relax version requirements on dependencies by removing upper bounds.
- Fix status reporting when running on hardware.

## 0.54.0 (June 2024)

- User can pass a `SamplerOptions` instance (from `qiskit-ibm-runtime`)
  via a keyword argument to both an `IBMQBackend` constructor and
  an instance method `IBMQBackend.process_circuits`.
- Remove dependency on deprecated qiskit-ibm-provider.
- Remove support for deprecated "ibmq_qasm_simulator" backend.
- Forbid circuits with incomplete classical registers in `tk_to_qiskit()`.
- Updated pytket version requirement to 1.29.
- Update qiskit-ibm-runtime version requirement to 0.24.1.
- Update qiskit version requirement to 1.1.
- Update qiskit-aer version requirement to 0.14.2.
- When constructing an Aer backend with a name for which more than one is
  available, emit a warning and pick the first in the list.

## 0.53.0 (April 2024)

- Updated pytket version requirement to 1.27.
- Update qiskit-ibm-runtime version requirement to 0.23.

## 0.52.0 (April 2024)

- Update pytket version requirement to 1.26.
- Update qiskit-aer version requirement to 0.14.
- Update conversion to qiskit to use symengine for symbolic circuits
- Add `IBMQBackend.default_compilation_pass_offline` for offline compilation given config and props objects.
- Add `DirectednessPredicate` to IBMQBackend
- Default compilation pass of IBMQBackend will keep ECR gates in the direction required by the backend.

## 0.51.0 (March 2024)

- Update qiskit-ibm-runtime version requirement to 0.22.
- remove all remote simulators
- rename `IBMQLocalEmulatorBackend` to `IBMQEmulatorBackend`
- `IBMQEmulatorBackend` will now run locally
- add support for contextual optimisation on local emulator

## 0.50.0 (March 2024)

- Update qiskit-algorithms version requirement to 0.3.

## 0.49.0 (March 2024)

- Update pytket version requirement to 1.25.
- Update qiskit version requirement to 1.0.
- Update qiskit-ibm-provider version requirement to 0.10.
- Update qiskit-ibm-runtime version requirement to 0.21.
- Add `IBMQLocalEmulatorBackend` for running local emulation of
  `IBMQBackend` using `AerBackend` with a noise model.

## 0.48.1rc1

- Fix: use correct `instance` with `IBMQEmulatorBackend`.

## 0.48.0 (January 2024)

- Updated pytket version requirement to 1.24.
- Python 3.12 support added, 3.9 dropped.
- fix conditional bit in pytket to qiskit conversion
- fix symbolic conversion of parameter in conversion

## 0.47.0 (January 2024)

- Update qiskit-ibm-runtime version to 0.17.0.
- Update qiskit-ibm-provider version to 0.8.0.
- Updated pytket version requirement to 1.23.

## 0.46.0 (November 2023)

- Updated pytket version requirement to 1.22.
- Add support for circuits with barriers in the Aer simulators.
- Update qiskit version to 0.45.0.
- Update qiskit-ibm-runtime version to 0.15.1.
- Update qiskit-aer version to 0.13.0.
- Update qiskit-ibm-provider version to 0.7.2.
- Introduce dependency on qiskit-algorithms.
- Seed given to `process_circuits()` will be automatically incremented
  for the different circuit batches submitted.
- Fix {py:class}`RuntimeError` caused by the use of custom gates in `qiskit_to_tk` [#200](https://github.com/CQCL/pytket-qiskit/issues/200).

## 0.45.0 (October 2023)

- Updated pytket version requirement to 1.21.
- Implement crosstalk noise model for AerBackend.
- Don't include `SimplifyInitial` in default passes; instead make it an option
  to `process_circuits()`.

## 0.44.0 (September 2023)

- Fix to add include Measure, Reset and Conditional operations to the supported operations of {py:class}`AerStateBackend`.
- Update qiskit-ibm-runtime version to 0.12.0.
- Update qiskit-ibm-provider version to 0.7.0.
- Update pytket version requirement to 1.19.

## 0.43.0 (August 2023)

- Update qiskit version to 0.44.
- Update qiskit-aer version to 0.12.2.
- Update qiskit-ibm-runtime version to 0.11.3.
- Update qiskit-ibm-provider version to 0.6.3.
- Add option to specify the maximum number of qubits supported by Aer backends
  (defaults to 40).

## 0.42.0 (August 2023)

- Update pytket version requirement to 1.18.

## 0.41.0 (July 2023)

- Update pytket version requirement to 1.17.
- Fix conversion of qiskit `UnitaryGate` to and from pytket (up to 3 qubits).
- Fix handling of qiskit controlled gates in the {py:meth}`qiskit_to_tk` converter.
- Handle CCZ and CSX gates in circuit converters.

## 0.40.0 (June 2023)

- IBM devices are now accessed using the [qiskit-ibm-provider](https://github.com/Qiskit/qiskit-ibm-provider) instead of the deprecated {py:class}`IBMQ`. This allows the newest IBM devices and simulators to be accessed through `pytket-qiskit`. See the updated documentation on [credentials](https://docs.quantinuum.com/tket/extensions/pytket-qiskit/index.html#access-and-credentials).
- The parameters `hub`, `group` and `project` are no longer handled as separate arguments in {py:class}`IBMQBackend` and {py:meth}`IBMQBackend.available_devices`. Use `"instance=f"{hub}/{group}/{project}"` instead.
- Added support for the {X, SX, Rz, ECR} in the default compilation pass for {py:class}`IBMQBackend` and {py:class}`IBMQEmulatorBackend`. This is the set of gates used by some of the new IBM devices.
- Fix to the {py:meth}`tk_to_qiskit` converter to prevent cancellation of redundant gates when converting to qiskit.
- Handle qiskit circuits with {py:class}`Initialize` and {py:class}`StatePreparation` instructions in the {py:meth}`qiskit_to_tk` converter. The {py:meth}`tk_to_qiskit` converter now handles {py:class}`StatePreparationBox`.
- Fix handling of control state in {py:meth}`qiskit_to_tk`.
- Update qiskit version to 0.43.1
- Update qiskit-ibm-runtime version to 0.11.1
- Update qiskit-ibm-provider version to 0.6.1
- Update pytket version to 1.16

## 0.39.0 (May 2023)

- Updated pytket version requirement to 1.15.
- The {py:meth}`IBMQBackend.get_compiled_circuit` method now allows for optional arguments to override the default settings in the {py:class}`NoiseAwarePlacement`.

## 0.38.0 (April 2023)

- Fix to ensure that the {py:class}`IBMBackend` and {py:class}`IBMQEmulatorBackend` both properly enforce {py:class}`MaxNQubitsPredicate`.
- Update qiskit version to 0.42.
- Updated pytket version requirement to 1.14.

## 0.37.1 (March 2023)

- Fix backend settings for AerStateBackend and AerUnitaryBackend

## 0.37.0 (March 2023)

- Fix faulty information in `AerBackend().backend_info`
- Updated pytket version requirement to 1.13.

## 0.36.0 (February 2023)

- Update qiskit version to 0.41.
- Fix order of Pauli terms when converting from `QubitPauliOperator`.

## 0.35.0 (February 2023)

- Automatically use IBMQ token if saved in pytket config and not saved in qiskit
  config.
- Update qiskit version to 0.40.
- Update code to remove some deprecation warnings.
- Work around <https://github.com/Qiskit/qiskit-terra/issues/7865>.

## 0.34.0 (January 2023)

- Handle more multi-controlled gates in `tk_to_qiskit` and `qiskit_to_tk` converters (including CnY and CnZ).
- Drop support for Python 3.8; add support for 3.11.
- Fix ordering of registers in statevector simulation results.
- Remove `reverse_index` argument in `tk_to_qiskit()`.
- Updated pytket version requirement to 1.11.

## 0.33.0 (December 2022)

- Fix handling of parameter when converting `PauliEvolutionGate` to
  `QubitPauliOperator`.
- Updated pytket version requirement to 1.10.

## 0.32.0 (December 2022)

- Use `qiskit_ibm_runtime` services for sampling on `IBMQBackend` and
  `IBMQEmulatorBackend`. Note that shots tables (ordered lists of results) are
  no longer available from these backends. (`BackendResult.get_shots()` will
  fail; use `get_counts()` instead.)
- Fix incorrect circuit permutation handling for `AerUnitaryBackend` and `AerStateBackend`.

## 0.31.0 (November 2022)

- Update `TketBackend` to support `FullyConnected` architecture.
- Fix the issue that some qiskit methods can't retrieve results from `TketJob`.
- Updated pytket version requirement to 1.9.
- Handle `OpType.Phase` when converting to qiskit.
- Change default optimization level in `default_compilation_pass()` to 2.

## 0.30.0 (November 2022)

- Update qiskit version to 0.39.
- `tk_to_qiskit` now performs a rebase pass prior to conversion. Previously an error was returned if a `Circuit` contained gates such as `OpType.ZZMax` which have no exact replacement in qiskit. Now the unsupported gate will be implemented in terms of gates supported in qiskit rather than returning an error.
- Updated pytket version requirement to 1.8.

## 0.29.0 (October 2022)

- Add post-routing `KAKDecomposition` to default pass with `optimisation_level` = 2.
- Add support for `ECRGate` in `tk_to_qiskit` conversion.
- Update qiskit version to 0.38.
- Updated pytket version requirement to 1.7.

## 0.28.0 (August 2022)

- Improve result retrieval speed of `AerUnitaryBackend` and `AerStateBackend`.
- Update qiskit version to 0.37.
- Updated pytket version requirement to 1.5.

## 0.27.0 (July 2022)

- Updated pytket version requirement to 1.4.

## 0.26.0 (June 2022)

- Updated pytket version requirement to 1.3.

## 0.25.0 (May 2022)

- Updated pytket version requirement to 1.2.

## 0.24.0 (April 2022)

- Fix two-qubit unitary conversions.
- Update qiskit version to 0.36.
- Updated pytket version requirement to 1.1.

## 0.23.0 (March 2022)

- Removed `characterisation` property of backends. (Use `backend_info`
  instead.)
- Updated pytket version requirement to 1.0.

## 0.22.2 (February 2022)

- Fixed {py:meth}`IBMQEmulatorBackend.rebase_pass`.

## 0.22.1 (February 2022)

- Added {py:meth}`IBMQEmulatorBackend.rebase_pass`.

## 0.22.0 (February 2022)

- Qiskit version updated to 0.34.
- Updated pytket version requirement to 0.19.
- Drop support for Python 3.7; add support for 3.10.

## 0.21.0 (January 2022)

- Qiskit version updated to 0.33.
- Updated pytket version requirement to 0.18.

## 0.20.0 (November 2021)

- Qiskit version updated to 0.32.
- Updated pytket version requirement to 0.17.

## 0.19.0 (October 2021)

- Qiskit version updated to 0.31.
- Removed deprecated {py:meth}`AerUnitaryBackend.get_unitary`. Use
  {py:meth}`AerUnitaryBackend.run_circuit` and
  {py:meth}`pytket.backends.backendresult.BackendResult.get_unitary` instead.
- Updated pytket version requirement to 0.16.

## 0.18.0 (September 2021)

- Qiskit version updated to 0.30.
- Updated pytket version requirement to 0.15.

## 0.17.0 (September 2021)

- Updated pytket version requirement to 0.14.

## 0.16.1 (July 2021)

- Fix slow/high memory use {py:meth}`AerBackend.get_operator_expectation_value`

## 0.16.0 (July 2021)

- Qiskit version updated to 0.28.
- Use provider API client to check job status without retrieving job in IBMQBackend.
- Updated pytket version requirement to 0.13.

## 0.15.1 (July 2021)

- Fixed bug in backends when n_shots argument was passed as list.

## 0.15.0 (June 2021)

- Updated pytket version requirement to 0.12.

## 0.14.0 (unreleased)

- Qiskit version updated to 0.27.

## 0.13.0 (May 2021)

- Updated pytket version requirement to 0.11.

## 0.12.0 (unreleased)

- Qiskit version updated to 0.26.
- Code rewrites to avoid use of deprecated qiskit methods.
- Restriction to hermitian operators for expectation values in `AerBackend`.

## 0.11.0 (May 2021)

- Contextual optimisation added to default compilation passes (except at optimisation level 0).
- Support for symbolic parameters in rebase pass.
- Correct phase when rebasing.
- Ability to preserve UUIDs of qiskit symbolic parameters when converting.
- Correction to error message.

## 0.10.0 (April 2021)

- Support for symbolic phase in converters.