|
Maestro 0.3.11
Unified interface for quantum circuit simulation
|
The operation interface. More...
#include <Operations.h>
Public Member Functions | |
| IOperation (Time delay=0) | |
| Construct a new IOperation object. | |
| virtual | ~IOperation ()=default |
| Destroy the IOperation object. | |
| virtual std::vector< size_t > | AffectedBits () const |
| Returns the affected bits. | |
| virtual Types::qubits_vector | AffectedQubits () const |
| Returns the affected qubits. | |
| virtual bool | CanAffectQuantumState () const |
| Find if the operation can affect the quantum state. | |
| virtual std::shared_ptr< IOperation< Time > > | Clone () const =0 |
| Get a shared pointer to a clone of this object. | |
| virtual void | Execute (const std::shared_ptr< Simulators::ISimulator > &sim, OperationState &state) const =0 |
| Execute the operation. | |
| Time | GetDelay () const |
| Get the delay of the operation. | |
| std::shared_ptr< IOperation< Time > > | getptr () |
| Get a shared pointer to this object. | |
| virtual OperationType | GetType () const |
| Get the type of the operation. | |
| virtual bool | IsBranching () const |
| Checks if the operation is a branching one. | |
| virtual bool | IsClifford () const |
| 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. | |
| virtual 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 =0 |
| Get a shared pointer to a remapped operation. | |
| virtual void | SetDelay (Time d) |
| Set the delay of the operation. | |
| void | SetNoiseless (bool value=true) |
| Mark the operation as exempt from injected gate noise. | |
The operation interface.
The operation interface along with implementation of some generic functions that apply to all operations.
| Time | The type of the time parameter. |
Definition at line 401 of file Operations.h.
|
inline |
Construct a new IOperation object.
Construct a new IOperation object with the specified execution time.
| delay | The execution time of the operation. |
Definition at line 410 of file Operations.h.
Referenced by Simulators::FusionRoutingOperation::FusionRoutingOperation().
|
virtualdefault |
Destroy the IOperation object.
Destroy the IOperation object. It's a virtual destructor because this class is an abstract class that needs to be derived from.
|
inlinevirtual |
Returns the affected bits.
Returns the affected classical bits.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, and Circuits::Random< Time >.
Definition at line 523 of file Operations.h.
|
inlinevirtual |
Returns the affected qubits.
Returns the affected qubits by the operation.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::ConditionalRandomGen< Time >, Circuits::Delay< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::QuantumChannelOperation< Time >, Circuits::Reset< Time >, Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, Circuits::ThreeQubitsGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, and Simulators::FusionRoutingOperation.
Definition at line 512 of file Operations.h.
Referenced by Circuits::Circuit< Time >::MoveMeasurementsAndResets(), and NeedsEntanglementForDistribution().
|
inlinevirtual |
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< Time >, Circuits::Circuit< Types::time_type >, Circuits::Delay< Time >, and Circuits::QuantumChannelOperation< Time >.
Definition at line 473 of file Operations.h.
|
pure virtual |
Get a shared pointer to a clone of this object.
Returns a shared pointer to a copy of this object.
Implemented in Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::CloneableGate< CCXGate, ThreeQubitsGate, Types::time_type >, Circuits::CloneableGate< CHGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CPGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CRxGate, ControlledRotationGate, Types::time_type >, Circuits::CloneableGate< CRyGate, ControlledRotationGate, Types::time_type >, Circuits::CloneableGate< CRzGate, ControlledRotationGate, Types::time_type >, Circuits::CloneableGate< CSwapGate, ThreeQubitsGate, Types::time_type >, Circuits::CloneableGate< CSxDagGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CSxGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CUGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CXGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CYGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< CZGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< HadamardGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< KGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< PhaseGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< RxGate, RotationGate, Types::time_type >, Circuits::CloneableGate< RyGate, RotationGate, Types::time_type >, Circuits::CloneableGate< RzGate, RotationGate, Types::time_type >, Circuits::CloneableGate< SdgGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< SGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< SwapGate, TwoQubitsGate, Types::time_type >, Circuits::CloneableGate< SxDagGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< SxGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< TdgGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< TGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< UGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< XGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< YGate, SingleQubitGate, Types::time_type >, Circuits::CloneableGate< ZGate, SingleQubitGate, Types::time_type >, Circuits::ConditionalGate< Time >, Circuits::ConditionalMeasurement< Time >, Circuits::ConditionalRandomGen< Time >, Circuits::Delay< Time >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::QuantumChannelOperation< Time >, Circuits::Random< Time >, Circuits::Reset< Time >, and Simulators::FusionRoutingOperation.
|
pure virtual |
Execute the operation.
Execute the operation on the specified simulator.
| sim | The simulator to execute the operation on. |
| state | The state of the operation. |
Implemented in Circuits::CCXGate< Time >, Circuits::CHGate< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::CPGate< Time >, Circuits::CRxGate< Time >, Circuits::CRyGate< Time >, Circuits::CRzGate< Time >, Circuits::CSwapGate< Time >, Circuits::CSxDagGate< Time >, Circuits::CSxGate< Time >, Circuits::CUGate< Time >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::Delay< Time >, Circuits::HadamardGate< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::KGate< Time >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::PhaseGate< Time >, Circuits::QuantumChannelOperation< Time >, Circuits::Random< Time >, Circuits::Reset< Time >, Circuits::RxGate< Time >, Circuits::RyGate< Time >, Circuits::RzGate< Time >, Circuits::SdgGate< Time >, Circuits::SGate< Time >, Circuits::SwapGate< Time >, Circuits::SxDagGate< Time >, Circuits::SxGate< Time >, Circuits::TdgGate< Time >, Circuits::TGate< Time >, Circuits::UGate< Time >, Circuits::XGate< Time >, Circuits::YGate< Time >, Circuits::ZGate< Time >, and Simulators::FusionRoutingOperation.
|
inline |
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::ConditionalGate< Time >::Clone(), Circuits::ConditionalMeasurement< Time >::Clone(), Circuits::ConditionalRandomGen< Time >::Clone(), Circuits::MeasurementOperation< Time >::Clone(), Circuits::QuantumChannelOperation< Time >::Clone(), Circuits::Random< Time >::Clone(), Circuits::Reset< Time >::Clone(), and Circuits::Delay< Time >::GetDuration().
|
inline |
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.
|
inlinevirtual |
Get the type of the operation.
Get the type of the operation.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::ConditionalGate< Time >, Circuits::ConditionalMeasurement< Time >, Circuits::ConditionalRandomGen< Time >, Circuits::Delay< Time >, Circuits::IGateOperation< Time >, Circuits::IGateOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::QuantumChannelOperation< Time >, Circuits::Random< Time >, Circuits::Reset< Time >, and Simulators::FusionRoutingOperation.
Definition at line 439 of file Operations.h.
Referenced by CanAffectQuantumState(), IsConditional(), and NeedsEntanglementForDistribution().
|
inlinevirtual |
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< 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.
|
inlinevirtual |
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 in Circuits::Circuit< Time >, Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::Delay< Time >, Circuits::HadamardGate< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::KGate< Time >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::PhaseGate< Time >, Circuits::Random< Time >, Circuits::Reset< Time >, Circuits::SdgGate< Time >, Circuits::SGate< Time >, Circuits::SwapGate< Time >, Circuits::SxDagGate< Time >, Circuits::SxGate< Time >, Circuits::UGate< Time >, Circuits::XGate< Time >, Circuits::YGate< Time >, and Circuits::ZGate< Time >.
Definition at line 594 of file Operations.h.
|
inlinevirtual |
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.
|
inline |
Whether noise models skip this operation.
Definition at line 580 of file Operations.h.
|
inlinevirtual |
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< Time >, Circuits::Circuit< Types::time_type >, and Circuits::QuantumChannelOperation< Time >.
Definition at line 488 of file Operations.h.
|
pure virtual |
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. |
Implemented in Circuits::Delay< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::QuantumChannelOperation< Time >, Circuits::Random< Time >, Circuits::Reset< Time >, Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, Circuits::ThreeQubitsGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, and Simulators::FusionRoutingOperation.
|
inlinevirtual |
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.
Referenced by Circuits::Delay< Time >::SetDuration().
|
inline |
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.