Base Qiskit device class

This module contains a base class for constructing Qiskit devices for PennyLane.

Classes

QiskitDevice(wires, provider, backend[, shots])

Abstract Qiskit device for PennyLane.

Code details

pennylane_qiskit.qiskit_device.pauli_eigs(n)[source]

Returns the eigenvalues for \(A^{\otimes n}\), where \(A\) is any operator that shares eigenvalues with the Pauli matrices.

Parameters

n (int) – number of wires

Returns

eigenvalues of \(Z^{\otimes n}\)

Return type

array[int]

class pennylane_qiskit.qiskit_device.QiskitDevice(wires, provider, backend, shots=1024, **kwargs)[source]

Abstract Qiskit device for PennyLane.

Parameters
  • wires (int) – The number of qubits of the device

  • provider (Provider) – The Qiskit simulation provider

  • backend (str) – the desired backend

  • shots (int) – Number of circuit evaluations/random samples used to estimate expectation values of observables.

Keyword Arguments
  • name (str) – The name of the circuit. Default 'circuit'.

  • compile_backend (BaseBackend) – The backend used for compilation. If you wish to simulate a device compliant circuit, you can specify a backend here.

  • analytic (bool) – For statevector backends, determines if the expectation values and variances are to be computed analytically. Default value is False.

_state_backends = {'statevector_simulator', 'unitary_simulator'}

Set of backend names that define the backends that support returning the underlying quantum statevector

Type

set[str]

__init__(wires, provider, backend, shots=1024, **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

property backend

The Qiskit simulation backend object

apply(operation, wires, par)[source]

Apply a quantum operation.

For plugin developers: this function should apply the operation on the device.

Parameters
  • operation (str) – name of the operation

  • wires (Sequence[int]) – subsystems the operation is applied on

  • par (tuple) – parameters for the operation

compile()[source]

Compile the quantum circuit to target the provided compile_backend. If compile_backend is None, then the target is simply the backend.

run(qobj)[source]

Run the compiled circuit, and query the result.

_get_state(result)[source]

Returns the statevector for state simulator backends.

Parameters

result (qiskit.Result) – result object

Returns

size (2**num_wires,) statevector

Return type

array[float]

rotate_basis(obs, wires, par)[source]

Rotates the specified wires such that they are in the eigenbasis of the provided observable.

Parameters
  • observable (str) – the name of an observable

  • wires (List[int]) – wires the observable is measured on

  • par (List[Any]) – parameters of the observable

pre_measure()[source]

Called during execute() before the individual observables are measured.

expval(observable, wires, par)[source]

Returns the expectation value of observable on specified wires.

Note: all arguments accept _lists_, which indicate a tensor product of observables.

Parameters
  • observable (str or list[str]) – name of the observable(s)

  • wires (List[int] or List[List[int]]) – subsystems the observable(s) is to be measured on

  • par (tuple or list[tuple]]) – parameters for the observable(s)

Returns

expectation value \(\expect{A} = \bra{\psi}A\ket{\psi}\)

Return type

float

var(observable, wires, par)[source]

Returns the variance of observable on specified wires.

Note: all arguments support _lists_, which indicate a tensor product of observables.

Parameters
  • observable (str or list[str]) – name of the observable(s)

  • wires (List[int] or List[List[int]]) – subsystems the observable(s) is to be measured on

  • par (tuple or list[tuple]]) – parameters for the observable(s)

Raises

NotImplementedError – if the device does not support variance computation

Returns

variance \(\mathrm{var}(A) = \bra{\psi}A^2\ket{\psi} - \bra{\psi}A\ket{\psi}^2\)

Return type

float

sample(observable, wires, par)[source]

Return a sample of an observable.

The number of samples is determined by the value of Device.shots, which can be directly modified.

Note: all arguments support _lists_, which indicate a tensor product of observables.

Parameters
  • observable (str or list[str]) – name of the observable(s)

  • wires (List[int] or List[List[int]]) – subsystems the observable(s) is to be measured on

  • par (tuple or list[tuple]]) – parameters for the observable(s)

Raises

NotImplementedError – if the device does not support sampling

Returns

samples in an array of dimension (n, num_wires)

Return type

array[float]

probabilities(wires=None)[source]

Return the (marginal) probability of each computational basis state from the last run of the device.

Parameters

wires (Sequence[int]) – Sequence of wires to return marginal probabilities for. Wires not provided are traced out of the system.

Returns

Dictionary mapping a tuple representing the state to the resulting probability. The dictionary should be sorted such that the state tuples are in lexicographical order.

Return type

OrderedDict[tuple, float]

eigvals(observable, wires, par)[source]

Determine the eigenvalues of observable(s).

Parameters
  • observable (str, List[str]) – the name of an observable, or a list of observables representing a tensor product

  • wires (List[int]) – wires the observable(s) is measured on

  • par (List[Any]) – parameters of the observable(s)

Returns

an array of size (len(wires),) containing the eigenvalues of the observable

Return type

array[float]

reset()[source]

Reset the backend state.

After the reset, the backend should be as if it was just constructed. Most importantly the quantum state is reset to its initial value.