|
Maestro 0.2.5
Unified interface for quantum circuit simulation
|
The interface for quantum gates. More...
#include <QuantumGates.h>
Inheritance diagram for Circuits::IQuantumGate< Time >:
Collaboration diagram for Circuits::IQuantumGate< Time >:Public Member Functions | |
| IQuantumGate (Time delay=0) | |
| IQuantumGate constructor. | |
| 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. | |
| virtual QuantumGateType | GetGateType () const =0 |
| Get the type of the quantum gate. | |
| virtual unsigned int | GetNumQubits () const =0 |
| Get the number of qubits. | |
| virtual std::vector< double > | GetParams () const |
| Get the gate parameters. | |
| std::shared_ptr< IOperation< Time > > | getptr () |
| Get a shared pointer to this object. | |
| virtual Types::qubit_t | GetQubit (unsigned int index=0) const =0 |
| Get the qubit involved. | |
| OperationType | GetType () const override |
| Get the type of the operation. | |
| virtual bool | IsClifford () const |
| Checks if the operation is a Clifford one. | |
| virtual bool | IsConditional () const |
| Find if the operation is a conditional 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. | |
| void | SetDelay (Time d) |
| Set the delay of the operation. | |
| virtual void | SetQubit (Types::qubit_t qubit, unsigned long index=0)=0 |
| Set the qubits involved. | |
The interface for quantum gates.
The interface for quantum gates. Quantum gates are quantum operations that can be applied to a quantum state.
| Time | The type of the execution delay. |
Definition at line 72 of file QuantumGates.h.
|
inline |
IQuantumGate constructor.
Constructs the IQuantumGate object. If specified, the delay is the time the quantum gate takes to execute.
Definition at line 81 of file QuantumGates.h.
|
inlinevirtualinherited |
Returns the affected bits.
Returns the affected classical bits.
Reimplemented in 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 478 of file Operations.h.
|
inlinevirtualinherited |
Returns the affected qubits.
Returns the affected qubits by the operation.
Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::ConditionalRandomGen< Time >, Circuits::MeasurementOperation< Time >, Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, Circuits::ThreeQubitsGate< Types::time_type >, and Circuits::Reset< Time >.
Definition at line 470 of file Operations.h.
Referenced by Circuits::IOperation< Time >::NeedsEntanglementForDistribution().
|
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 >, and Circuits::Circuit< Types::time_type >.
Definition at line 429 of file Operations.h.
References Circuits::IOperation< Time >::GetType(), Circuits::kComposite, Circuits::kConditionalGate, Circuits::kConditionalMeasurement, Circuits::kGate, Circuits::kMeasurement, and Circuits::kReset.
|
pure virtualinherited |
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< Types::time_type >, Circuits::ConditionalGate< Time >, Circuits::ConditionalMeasurement< Time >, Circuits::ConditionalRandomGen< Time >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::PhaseGate< Time >, Circuits::XGate< Time >, Circuits::XGate< Types::time_type >, Circuits::YGate< Time >, Circuits::ZGate< Time >, Circuits::HadamardGate< Time >, Circuits::SGate< Time >, Circuits::SdgGate< Time >, Circuits::TGate< Time >, Circuits::TdgGate< Time >, Circuits::SxGate< Time >, Circuits::SxDagGate< Time >, Circuits::KGate< Time >, Circuits::RxGate< Time >, Circuits::RyGate< Time >, Circuits::RzGate< Time >, Circuits::UGate< Time >, Circuits::SwapGate< Time >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::CPGate< Time >, Circuits::CRxGate< Time >, Circuits::CRyGate< Time >, Circuits::CRzGate< Time >, Circuits::CHGate< Time >, Circuits::CSxGate< Time >, Circuits::CSxDagGate< Time >, Circuits::CUGate< Time >, Circuits::CCXGate< Time >, Circuits::CSwapGate< Time >, Circuits::Random< Time >, and Circuits::Reset< Time >.
Referenced by Circuits::ConditionalMeasurement< Time >::Clone(), and Circuits::ConditionalRandomGen< Time >::Clone().
|
pure virtualinherited |
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::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::PhaseGate< Time >, Circuits::XGate< Time >, Circuits::XGate< Types::time_type >, Circuits::YGate< Time >, Circuits::ZGate< Time >, Circuits::HadamardGate< Time >, Circuits::SGate< Time >, Circuits::SdgGate< Time >, Circuits::TGate< Time >, Circuits::TdgGate< Time >, Circuits::SxGate< Time >, Circuits::SxDagGate< Time >, Circuits::KGate< Time >, Circuits::RxGate< Time >, Circuits::RyGate< Time >, Circuits::RzGate< Time >, Circuits::UGate< Time >, Circuits::SwapGate< Time >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::CPGate< Time >, Circuits::CRxGate< Time >, Circuits::CRyGate< Time >, Circuits::CRzGate< Time >, Circuits::CHGate< Time >, Circuits::CSxGate< Time >, Circuits::CSxDagGate< Time >, Circuits::CUGate< Time >, Circuits::CCXGate< Time >, Circuits::CSwapGate< Time >, Circuits::Random< Time >, and Circuits::Reset< Time >.
|
inlineinherited |
Get the delay of the operation.
Returns the delay due of the execution time of the operation.
Definition at line 497 of file Operations.h.
Referenced by Circuits::ConditionalGate< Time >::Clone(), Circuits::MeasurementOperation< Time >::Clone(), Circuits::NoOperation< Time >::Clone(), Circuits::PhaseGate< Time >::Clone(), Circuits::XGate< Time >::Clone(), Circuits::YGate< Time >::Clone(), Circuits::ZGate< Time >::Clone(), Circuits::HadamardGate< Time >::Clone(), Circuits::SGate< Time >::Clone(), Circuits::SdgGate< Time >::Clone(), Circuits::TGate< Time >::Clone(), Circuits::TdgGate< Time >::Clone(), Circuits::SxGate< Time >::Clone(), Circuits::SxDagGate< Time >::Clone(), Circuits::KGate< Time >::Clone(), Circuits::RxGate< Time >::Clone(), Circuits::RyGate< Time >::Clone(), Circuits::RzGate< Time >::Clone(), Circuits::UGate< Time >::Clone(), Circuits::SwapGate< Time >::Clone(), Circuits::CXGate< Time >::Clone(), Circuits::CYGate< Time >::Clone(), Circuits::CZGate< Time >::Clone(), Circuits::CPGate< Time >::Clone(), Circuits::CRxGate< Time >::Clone(), Circuits::CRyGate< Time >::Clone(), Circuits::CRzGate< Time >::Clone(), Circuits::CHGate< Time >::Clone(), Circuits::CSxGate< Time >::Clone(), Circuits::CSxDagGate< Time >::Clone(), Circuits::CUGate< Time >::Clone(), Circuits::CCXGate< Time >::Clone(), Circuits::CSwapGate< Time >::Clone(), Circuits::Random< Time >::Clone(), Circuits::Reset< Time >::Clone(), and Circuits::ComparableCircuit< Time >::operator==().
|
pure virtual |
Get the type of the quantum gate.
Returns the type of the quantum gate.
Implemented in Circuits::PhaseGate< Time >, Circuits::XGate< Time >, Circuits::XGate< Types::time_type >, Circuits::YGate< Time >, Circuits::ZGate< Time >, Circuits::HadamardGate< Time >, Circuits::SGate< Time >, Circuits::SdgGate< Time >, Circuits::TGate< Time >, Circuits::TdgGate< Time >, Circuits::SxGate< Time >, Circuits::SxDagGate< Time >, Circuits::KGate< Time >, Circuits::RxGate< Time >, Circuits::RyGate< Time >, Circuits::RzGate< Time >, Circuits::UGate< Time >, Circuits::SwapGate< Time >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::CPGate< Time >, Circuits::CRxGate< Time >, Circuits::CRyGate< Time >, Circuits::CRzGate< Time >, Circuits::CHGate< Time >, Circuits::CSxGate< Time >, Circuits::CSxDagGate< Time >, Circuits::CUGate< Time >, Circuits::CCXGate< Time >, and Circuits::CSwapGate< Time >.
Referenced by Circuits::ComparableCircuit< Time >::operator==().
|
pure virtualinherited |
Get the number of qubits.
Get the number of qubits the gate operates on.
Implemented in Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, and Circuits::ThreeQubitsGate< Types::time_type >.
|
inlinevirtual |
Get the gate parameters.
Returns the parameters of the gate.
Reimplemented in Circuits::PhaseGate< Time >, Circuits::RotationGate< Time >, Circuits::RotationGate< Types::time_type >, Circuits::UGate< Time >, Circuits::CPGate< Time >, Circuits::ControlledRotationGate< Time >, Circuits::ControlledRotationGate< Types::time_type >, and Circuits::CUGate< Time >.
Definition at line 99 of file QuantumGates.h.
Referenced by Circuits::ComparableCircuit< Time >::operator==().
|
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 487 of file Operations.h.
|
pure virtualinherited |
Get the qubit involved.
Get the qubit involved.
| index | The index of the qubit to get (0, 1, or 2, the maximum depending on the number of qubits of the gate). |
Implemented in Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, and Circuits::ThreeQubitsGate< Types::time_type >.
|
inlineoverridevirtualinherited |
Get the type of the operation.
Get the type of the operation, in this case, gate.
Reimplemented from Circuits::IOperation< Time >.
Definition at line 621 of file Operations.h.
References Circuits::kGate.
|
inlinevirtualinherited |
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< Types::time_type >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::NoOperation< Time >, Circuits::PhaseGate< Time >, Circuits::XGate< Time >, Circuits::XGate< Types::time_type >, Circuits::YGate< Time >, Circuits::ZGate< Time >, Circuits::HadamardGate< Time >, Circuits::SGate< Time >, Circuits::SdgGate< Time >, Circuits::SxGate< Time >, Circuits::SxDagGate< Time >, Circuits::KGate< Time >, Circuits::UGate< Time >, Circuits::SwapGate< Time >, Circuits::CXGate< Time >, Circuits::CYGate< Time >, Circuits::CZGate< Time >, Circuits::Random< Time >, and Circuits::Reset< Time >.
Definition at line 516 of file Operations.h.
|
inlinevirtualinherited |
Find if the operation is a conditional operation.
Returns true if the operation is conditional, false otherwise.
Definition at line 458 of file Operations.h.
References Circuits::IOperation< Time >::GetType(), Circuits::kConditionalGate, Circuits::kConditionalMeasurement, and Circuits::kConditionalRandomGen.
|
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 >, and Circuits::Circuit< Types::time_type >.
Definition at line 446 of file Operations.h.
References Circuits::IOperation< Time >::AffectedQubits(), Circuits::IOperation< Time >::GetType(), Circuits::kConditionalGate, and Circuits::kGate.
|
pure virtualinherited |
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::NoOperation< Time >, Circuits::IConditionalOperation< Time >, Circuits::IConditionalOperation< Types::time_type >, Circuits::MeasurementOperation< Time >, Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, Circuits::ThreeQubitsGate< Types::time_type >, Circuits::Random< Time >, and Circuits::Reset< Time >.
|
inlineinherited |
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 505 of file Operations.h.
|
pure virtualinherited |
Set the qubits involved.
Set the qubits involved.
| qubit | The qubit to set. |
| index | The index of the qubit to set (0 for 1 qubit gates, 0 and 1 for two qubit gates, 0, 1 and 3 for three qubit gates). |
Implemented in Circuits::SingleQubitGate< Time >, Circuits::SingleQubitGate< Types::time_type >, Circuits::TwoQubitsGate< Time >, Circuits::TwoQubitsGate< Types::time_type >, Circuits::ThreeQubitsGate< Time >, and Circuits::ThreeQubitsGate< Types::time_type >.