qml.measurements.MidMeasureMP

class MidMeasureMP(wires=None, reset=False, postselect=None, id=None)[source]

Bases: pennylane.measurements.measurements.MeasurementProcess

Mid-circuit measurement.

This class additionally stores information about unknown measurement outcomes in the qubit model. Measurements on a single qubit in the computational basis are assumed.

Please refer to pennylane.measure() for detailed documentation.

Parameters
  • wires (Wires) – The wires the measurement process applies to. This can only be specified if an observable was not provided.

  • reset (bool) – Whether to reset the wire after measurement.

  • postselect (Optional[int]) – Which basis state to postselect after a mid-circuit measurement. None by default. If postselection is requested, only the post-measurement state that is used for postselection will be considered in the remaining circuit.

  • id (str) – Custom label given to a measurement instance.

data

The data of the measurement.

has_decomposition

Whether or not the MeasurementProcess returns a defined decomposition when calling expand.

hash

Returns an integer hash uniquely representing the measurement process

name

The name of the measurement.

numeric_type

The Python numeric type of the measurement result.

raw_wires

The wires the measurement process acts on.

return_type

Measurement return type.

samples_computational_basis

Whether or not the MeasurementProcess measures in the computational basis.

wires

The wires the measurement process acts on.

data

The data of the measurement. Needed to match the Operator API.

has_decomposition

Whether or not the MeasurementProcess returns a defined decomposition when calling expand.

Type

Bool

hash

Returns an integer hash uniquely representing the measurement process

Type

int

name

The name of the measurement. Needed to match the Operator API.

numeric_type

The Python numeric type of the measurement result.

Returns

The output numeric type; int, float or complex.

Return type

type

Raises

QuantumFunctionError – the return type of the measurement process is unrecognized and cannot deduce the numeric type

raw_wires

The wires the measurement process acts on.

For measurements involving more than one set of wires (such as mutual information), this is a list of the Wires objects. Otherwise, this is the same as wires()

return_type
samples_computational_basis
wires

The wires the measurement process acts on.

This is the union of all the Wires objects of the measurement.

diagonalizing_gates()

Returns the gates that diagonalize the measured wires such that they are in the eigenbasis of the circuit observables.

eigvals()

Eigenvalues associated with the measurement process.

expand()

Expand the measurement of an observable to a unitary rotation and a measurement in the computational basis.

label([decimals, base_label, cache])

How the mid-circuit measurement is represented in diagrams and drawings.

map_wires(wire_map)

Returns a copy of the current measurement process with its wires changed according to the given wire map.

queue([context])

Append the measurement process to an annotated queue.

shape([shots, num_device_wires])

Calculate the shape of the result object tensor.

simplify()

Reduce the depth of the observable to the minimum.

diagonalizing_gates()

Returns the gates that diagonalize the measured wires such that they are in the eigenbasis of the circuit observables.

Returns

the operations that diagonalize the observables

Return type

List[Operation]

eigvals()

Eigenvalues associated with the measurement process.

If the measurement process has an associated observable, the eigenvalues will correspond to this observable. Otherwise, they will be the eigenvalues provided when the measurement process was instantiated.

Note that the eigenvalues are not guaranteed to be in any particular order.

Example:

>>> m = MeasurementProcess(Expectation, obs=qml.X(1))
>>> m.eigvals()
array([1, -1])
Returns

eigvals representation

Return type

array

expand()

Expand the measurement of an observable to a unitary rotation and a measurement in the computational basis.

Returns

a quantum tape containing the operations required to diagonalize the observable

Return type

QuantumTape

Example:

Consider a measurement process consisting of the expectation value of an Hermitian observable:

>>> H = np.array([[1, 2], [2, 4]])
>>> obs = qml.Hermitian(H, wires=['a'])
>>> m = MeasurementProcess(Expectation, obs=obs)

Expanding this out:

>>> tape = m.expand()

We can see that the resulting tape has the qubit unitary applied, and a measurement process with no observable, but the eigenvalues specified:

>>> print(tape.operations)
[QubitUnitary(array([[-0.89442719,  0.4472136 ],
      [ 0.4472136 ,  0.89442719]]), wires=['a'])]
>>> print(tape.measurements[0].eigvals())
[0. 5.]
>>> print(tape.measurements[0].obs)
None
label(decimals=None, base_label=None, cache=None)[source]

How the mid-circuit measurement is represented in diagrams and drawings.

Parameters
  • decimals=None (Int) – If None, no parameters are included. Else, how to round the parameters.

  • base_label=None (Iterable[str]) – overwrite the non-parameter component of the label. Must be same length as obs attribute.

  • cache=None (dict) – dictionary that carries information between label calls in the same drawing

Returns

label to use in drawings

Return type

str

map_wires(wire_map)

Returns a copy of the current measurement process with its wires changed according to the given wire map.

Parameters

wire_map (dict) – dictionary containing the old wires as keys and the new wires as values

Returns

new measurement process

Return type

MeasurementProcess

queue(context=<class 'pennylane.queuing.QueuingManager'>)

Append the measurement process to an annotated queue.

shape(shots=None, num_device_wires=0)

Calculate the shape of the result object tensor.

Parameters
  • shots (Optional[int]) – the number of shots used execute the circuit. None indicates an analytic simulation. Shot vectors are handled by calling this method multiple times.

  • num_device_wires (int) – The number of wires that will be used if the measurement is broadcasted across all available wires (len(mp.wires) == 0). If the device itself doesn’t provide a number of wires, the number of tape wires will be provided here instead:

Returns

An arbitrary length tuple of ints. May be an empty tuple.

Return type

tuple[int,…]

>>> qml.probs(wires=(0,1)).shape()
(4,)
>>> qml.sample(wires=(0,1)).shape(shots=50)
(50, 2)
>>> qml.state().shape(num_device_wires=4)
(16,)
>>> qml.expval(qml.Z(0)).shape()
()
simplify()

Reduce the depth of the observable to the minimum.

Returns

A measurement process with a simplified observable.

Return type

MeasurementProcess