|
Maestro 0.2.5
Unified interface for quantum circuit simulation
|
The interface for three qubits quantum gates. More...
#include <QuantumGates.h>
Inheritance diagram for Circuits::ThreeQubitsGate< Time >:
Collaboration diagram for Circuits::ThreeQubitsGate< Time >:Public Member Functions | |
| ThreeQubitsGate (Types::qubit_t qubit1=0, Types::qubit_t qubit2=0, Types::qubit_t qubit3=0, Time delay=0) | |
| ThreeQubitsGate constructor. | |
| virtual | ~ThreeQubitsGate () |
| The ThreeQubitsGate destructor. | |
| virtual std::vector< size_t > | AffectedBits () const |
| Returns the affected bits. | |
| Types::qubits_vector | AffectedQubits () const override |
| Get the qubits the quantum gate is applied to. | |
| 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. | |
| unsigned int | GetNumQubits () const override |
| Get the number of qubits the quantum gate is applied to. | |
| virtual std::vector< double > | GetParams () const |
| Get the gate parameters. | |
| std::shared_ptr< IOperation< Time > > | getptr () |
| Get a shared pointer to this object. | |
| Types::qubit_t | GetQubit (unsigned int index=0) const override |
| Get the qubit the quantum gate is applied to. | |
| 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. | |
| 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 | SetDelay (Time d) |
| Set the delay of the operation. | |
| void | SetQubit (Types::qubit_t q, unsigned long index=0) override |
| Set the qubit the quantum gate is applied to. | |
The interface for three qubits quantum gates.
The interface for three qubits quantum gates. Three qubits quantum gates are quantum operations that can be applied to three qubits.
| Time | The type of the execution delay. |
Definition at line 340 of file QuantumGates.h.
|
inline |
ThreeQubitsGate constructor.
Constructs the ThreeQubitsGate object. If specified, the delay is the time the quantum gate takes to execute. This gate is abstract and will be derived from.
| qubit1 | The first qubit the quantum gate is applied to. |
| qubit2 | The second qubit the quantum gate is applied to. |
| qubit3 | The third qubit the quantum gate is applied to. |
| delay | The time the quantum gate takes to execute. |
Definition at line 354 of file QuantumGates.h.
|
inlinevirtual |
The ThreeQubitsGate destructor.
The ThreeQubitsGate destructor, virtual because this is an abstract class that will be derived from.
Definition at line 367 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.
|
inlineoverridevirtual |
Get the qubits the quantum gate is applied to.
Returns the qubits the quantum gate is applied to, in this case three qubits.
Reimplemented from Circuits::IOperation< Time >.
Definition at line 422 of file QuantumGates.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 >, 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 virtualinherited |
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==().
|
inlineoverridevirtual |
Get the number of qubits the quantum gate is applied to.
Returns the number of qubits the quantum gate is applied to, in this case 3.
Implements Circuits::IGateOperation< Time >.
Definition at line 376 of file QuantumGates.h.
|
inlinevirtualinherited |
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.
|
inlineoverridevirtual |
Get the qubit the quantum gate is applied to.
Returns the qubit the quantum gate is applied to. Either specify zero, one or two for the index or leave it default (0). If anything else is used, it will return UINT_MAX.
| index | The index of the qubit to get (0, 1 or 2, default value 0). |
Implements Circuits::IGateOperation< Time >.
Definition at line 404 of file QuantumGates.h.
Referenced by Circuits::CCXGate< Time >::Clone(), and Circuits::CSwapGate< Time >::Clone().
|
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.
|
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< Time >.
Definition at line 436 of file QuantumGates.h.
|
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.
|
inlineoverridevirtual |
Set the qubit the quantum gate is applied to.
Sets the qubit the quantum gate is applied to. Either specify zero, one or two for the index or leave it default (0).
| q | The qubit the quantum gate is applied to. |
| index | The index of the qubit to set (0, 1 or 2, default value 0). |
Implements Circuits::IGateOperation< Time >.
Definition at line 386 of file QuantumGates.h.