|
Maestro 0.3.11
Unified interface for quantum circuit simulation
|
Measurement operation class. More...
#include <Measurements.h>
Public Member Functions | |
| MeasurementOperation (const std::vector< std::pair< Types::qubit_t, size_t > > &qs={}, Time delay=0) | |
| Constructor. | |
| std::vector< size_t > | AffectedBits () const override |
| Returns the classical bits affected by the measurement. | |
| Types::qubits_vector | AffectedQubits () const override |
| Returns the qubits affected by the measurement. | |
| virtual bool | CanAffectQuantumState () const |
| Find if the operation can affect the quantum state. | |
| void | Clear () |
| Clears the qubits and classical bits involved in the measurement. | |
| std::shared_ptr< IOperation< Time > > | Clone () const override |
| Get a shared pointer to a clone of this object. | |
| void | Execute (const std::shared_ptr< Simulators::ISimulator > &sim, OperationState &state) const override |
| Executes the measurement on the given simulator. | |
| const std::vector< size_t > & | GetBitsIndices () const |
| Returns the classical bits where the measurement results are stored. | |
| Types::time_type | GetDelay () const |
| Get the delay of the operation. | |
| virtual size_t | GetNumQubits () const |
| Get the number of qubits affected by the operation. | |
| std::shared_ptr< IOperation< Types::time_type > > | getptr () |
| Get a shared pointer to this object. | |
| const Types::qubits_vector & | GetQubits () const |
| Returns the qubits that are to be measured. | |
| const std::vector< ReadoutRates > & | GetReadout () const |
| Per-index readout rates, empty when none are attached. | |
| OperationType | GetType () const override |
| Get the type of the operation. | |
| bool | HasReadout () const |
| True when readout rates are attached to this measurement. | |
| virtual bool | IsBranching () const |
| Checks if the operation is a branching one. | |
| bool | IsClifford () const override |
| Checks if the operation is a Clifford one. | |
| virtual bool | IsConditional () const |
| Find if the operation is a conditional operation. | |
| bool | IsNoiseless () const |
| Whether noise models skip this operation. | |
| virtual bool | NeedsEntanglementForDistribution () const |
| Find if the operation needs entanglement for distribution. | |
| std::shared_ptr< IOperation< Time > > | Remap (const std::unordered_map< Types::qubit_t, Types::qubit_t > &qubitsMap, const std::unordered_map< Types::qubit_t, Types::qubit_t > &bitsMap={}) const override |
| Get a shared pointer to a remapped operation. | |
| void | Sample (const std::shared_ptr< Simulators::ISimulator > &sim, OperationState &state) const |
| Samples the measurement on the given simulator. | |
| void | SetBit (size_t index, Types::qubit_t bit) |
| Set the classical bit to index. | |
| virtual void | SetDelay (Types::time_type d) |
| Set the delay of the operation. | |
| void | SetNoiseless (bool value=true) |
| Mark the operation as exempt from injected gate noise. | |
| void | SetQubit (size_t index, Types::qubit_t qubit) |
| Set the qubit to measure. | |
| void | SetQubits (const std::vector< std::pair< Types::qubit_t, size_t > > &qs) |
| Sets the qubits and classical bits involved in the measurement. | |
| void | SetReadout (std::vector< ReadoutRates > rates) |
| Attach readout-error rates, one entry per measured index. | |
| void | SetReadoutAt (size_t index, const ReadoutRates &rates) |
| Attach readout-error rates for a single measured index. | |
| void | SetStateFromSample (const std::vector< bool > &measurements, OperationState &state, Simulators::ISimulator *rng=nullptr) const |
| Writes sampled outcomes into the classical state, applying readout error per measured qubit. | |
Measurement operation class.
Implementation of an operation that does a qubits measurements on a simulator. The results are stored in a classical 'state'. Each qubit has a corresponding classical 'bit' where the measurement result is stored.
| Time | The time type used for the simulation. |
Definition at line 51 of file Measurements.h.
|
inline |
Constructor.
Creates a measurement operation that measures the given qubits and stores the results in the given bits.
| qs | The qubits to measure and the classical bits where the result is stored, specified as pairs. |
| delay | The duration of the operation. |
Definition at line 64 of file Measurements.h.
|
inlineoverridevirtual |
Returns the classical bits affected by the measurement.
Returns the classical bits affected by the measurement.
Reimplemented from Circuits::IOperation< Types::time_type >.
Definition at line 253 of file Measurements.h.
References GetBitsIndices().
|
inlineoverridevirtual |
Returns the qubits affected by the measurement.
Returns the qubits affected by the measurement.
Reimplemented from Circuits::IOperation< Types::time_type >.
Definition at line 242 of file Measurements.h.
|
inlinevirtualinherited |
Find if the operation can affect the quantum state.
Returns true if the operation can affect the quantum state, false otherwise.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::Delay< Time >, and Circuits::QuantumChannelOperation< Time >.
Definition at line 473 of file Operations.h.
|
inline |
Clears the qubits and classical bits involved in the measurement.
Clears the qubits and classical bits involved in the measurement.
Definition at line 97 of file Measurements.h.
|
inlineoverridevirtual |
Get a shared pointer to a clone of this object.
Returns a shared pointer to a copy of this object.
Implements Circuits::IOperation< Types::time_type >.
Definition at line 224 of file Measurements.h.
References Circuits::IOperation< Time >::GetDelay().
|
inlineoverridevirtual |
Executes the measurement on the given simulator.
Executes the measurement on the given simulator.
| sim | The simulator to execute the measurement on. |
| state | The classical state for the simulator. |
Implements Circuits::IOperation< Types::time_type >.
Definition at line 154 of file Measurements.h.
References SetStateFromSample().
|
inline |
Returns the classical bits where the measurement results are stored.
Returns the classical bits where the measurement results are stored.
Definition at line 139 of file Measurements.h.
Referenced by AffectedBits().
|
inlineinherited |
Get the delay of the operation.
Returns the delay due of the execution time of the operation.
Definition at line 546 of file Operations.h.
Referenced by Circuits::NoOperation< Time >::Clone().
|
inlinevirtual |
Get the number of qubits affected by the operation.
Returns the number of qubits affected by the operation.
Definition at line 87 of file Measurements.h.
|
inlineinherited |
Get a shared pointer to this object.
Returns a shared pointer to this object. The object needs to be already wrapped in a shared pointer.
Definition at line 535 of file Operations.h.
|
inline |
Returns the qubits that are to be measured.
Returns the qubits that are to be measured.
Definition at line 128 of file Measurements.h.
|
inline |
Per-index readout rates, empty when none are attached.
Definition at line 364 of file Measurements.h.
|
inlineoverridevirtual |
Get the type of the operation.
Returns the type of the operation, in this case, measurement.
Reimplemented from Circuits::IOperation< Types::time_type >.
Definition at line 76 of file Measurements.h.
References Circuits::kMeasurement.
|
inline |
True when readout rates are attached to this measurement.
Definition at line 370 of file Measurements.h.
|
inlinevirtualinherited |
Checks if the operation is a branching one.
Checks if the operation is a branching one, meaning that it can lead to splitting paths (relevant for the path integral simulator).
Reimplemented in Circuits::CHGate< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::CRxGate< Time >, Circuits::CRyGate< Time >, Circuits::CSxDagGate< Time >, Circuits::CSxGate< Time >, Circuits::CUGate< Time >, Circuits::HadamardGate< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::KGate< Time >, Circuits::RxGate< Time >, Circuits::RyGate< Time >, Circuits::SxDagGate< Time >, Circuits::SxGate< Time >, and Circuits::UGate< Time >.
Definition at line 607 of file Operations.h.
|
inlineoverridevirtual |
Checks if the operation is a Clifford one.
Checks if the operation is a Clifford one, allowing to be simulated in a stabilizers simulator.
Reimplemented from Circuits::IOperation< Types::time_type >.
Definition at line 303 of file Measurements.h.
|
inlinevirtualinherited |
Find if the operation is a conditional operation.
Returns true if the operation is conditional, false otherwise.
Definition at line 500 of file Operations.h.
|
inlineinherited |
Whether noise models skip this operation.
Definition at line 580 of file Operations.h.
|
inlinevirtualinherited |
Find if the operation needs entanglement for distribution.
Returns true if the operation needs entanglement for distribution, false otherwise.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, and Circuits::QuantumChannelOperation< Time >.
Definition at line 488 of file Operations.h.
|
inlineoverridevirtual |
Get a shared pointer to a remapped operation.
Returns a shared pointer to a copy of the operation with qubits and classical bits changed according to the provided maps.
| qubitsMap | The map of qubits to remap. |
| bitsMap | The map of classical bits to remap. |
Implements Circuits::IOperation< Types::time_type >.
Definition at line 268 of file Measurements.h.
|
inline |
Samples the measurement on the given simulator.
Samples the measurement on the given simulator. Should not apply the measurement.
| sim | The simulator to sample the measurement on. |
| state | The classical state for the simulator. |
Definition at line 175 of file Measurements.h.
References SetStateFromSample().
|
inline |
Set the classical bit to index.
This method sets the classical bit index at the specified index.
| index | The index of the classical bit index. |
| bit | The classical bit index to set. |
Definition at line 328 of file Measurements.h.
|
inlinevirtualinherited |
Set the delay of the operation.
Sets the delay due of the execution time of the operation.
| d | The delay of the operation. |
Definition at line 557 of file Operations.h.
|
inlineinherited |
Mark the operation as exempt from injected gate noise.
Noise models add no noise after a noiseless operation. This is for basis changes that belong to a non-Z measurement or reset rather than being gates in their own right. Gate copies (Clone, Remap) keep the mark.
| value | True to exempt the operation from gate noise. |
Definition at line 570 of file Operations.h.
|
inline |
Set the qubit to measure.
This method sets the qubit to measure at the specified index.
| index | The index of the qubit to measure. |
| qubit | The qubit to measure. |
Definition at line 315 of file Measurements.h.
|
inline |
Sets the qubits and classical bits involved in the measurement.
Sets the qubits and classical bits involved in the measurement, specified as pairs.
| qs | The qubits to measure and the classical bits where the result is stored, specified as pairs. |
Definition at line 111 of file Measurements.h.
|
inline |
Attach readout-error rates, one entry per measured index.
Entries beyond qubits.size() are dropped, missing entries are zero. An empty vector removes readout error from this operation.
| rates | The per-index rates to attach. |
Definition at line 341 of file Measurements.h.
|
inline |
Attach readout-error rates for a single measured index.
Indices that are never set default to zero rates.
| index | The measured index, not the classical bit. |
| rates | The rates of the qubit measured at that index. |
Definition at line 354 of file Measurements.h.
|
inline |
Writes sampled outcomes into the classical state, applying readout error per measured qubit.
| measurements | One outcome per measured index. |
| state | The classical register to write. |
| rng | Simulator whose RandomUniform() drives the readout flips. When null, or when no readout rates are attached, outcomes are written unchanged. Callers that aggregate shots must call this once per shot while HasReadout() is true – the flips are independent per shot. |
Definition at line 196 of file Measurements.h.
References Circuits::OperationState::SetBit().