QNLP  v1.0
ISimulator.hpp
Go to the documentation of this file.
1 
12 #ifndef QNLP_SIMULATOR_INTERFACE_H
13 #define QNLP_SIMULATOR_INTERFACE_H
14 
15 #include <cstdlib>
16 namespace QNLP{
22  class ISimulator{
23  public:
24  //##############################################################################
25  // 1 qubit gates
26  //##############################################################################
27 
33  virtual void applyGateX(std::size_t qubit_idx) = 0;
34 
40  virtual void applyGateY(std::size_t qubit_idx) = 0;
41 
47  virtual void applyGateZ(std::size_t qubit_idx) = 0;
48 
54  virtual void applyGateI(std::size_t qubit_idx) = 0;
55 
61  virtual void applyGateH(std::size_t qubit_idx) = 0;
62 
68  virtual void applyGateSqrtX(std::size_t qubit_idx) = 0;
69 
76  virtual void applyGateRotX(std::size_t qubit_idx, double angle_rad) = 0;
77 
84  virtual void applyGateRotY(std::size_t qubit_idx, double angle_rad) = 0;
85 
92  virtual void applyGateRotZ(std::size_t qubit_idx, double angle_rad) = 0;
93 
94  //##############################################################################
95  // 2 qubit gates
96  //##############################################################################
97 
104  virtual void applyGateCX(std::size_t control, std::size_t target) = 0;
105 
112  virtual void applyGateCY(std::size_t control, std::size_t target) = 0;
113 
120  virtual void applyGateCZ(std::size_t control, std::size_t target) = 0;
121 
128  virtual void applyGateCH(std::size_t control, std::size_t target) = 0;
129 
136  virtual void applyGatePhaseShift(double angle, std::size_t qubit_idx) = 0;
137 
145  virtual void applyGateCPhaseShift(double angle, std::size_t control, std::size_t target) = 0;
146 
152  virtual std::size_t getNumQubits() = 0;
153 
154  //virtual void applyGateCU(const std::array<complex<double>,4>& mat2x2, std::size_t control, std::size_t target);
155  };
156 }
157 #endif
virtual void applyGateH(std::size_t qubit_idx)=0
Apply Hadamard gate to qubit at qubit_idx.
virtual void applyGateRotZ(std::size_t qubit_idx, double angle_rad)=0
Arbitrary rotation around Z axis by angle 'angle_rad' in radians.
virtual void applyGateCY(std::size_t control, std::size_t target)=0
Apply Controlled Pauli-Y on target qubit.
virtual void applyGateRotX(std::size_t qubit_idx, double angle_rad)=0
Arbitrary rotation around X axis by angle 'angle_rad' in radians.
virtual void applyGateX(std::size_t qubit_idx)=0
Apply Pauli-X gate to qubit at qubit_idx.
virtual void applyGateRotY(std::size_t qubit_idx, double angle_rad)=0
Arbitrary rotation around Y axis by angle 'angle_rad' in radians.
virtual void applyGatePhaseShift(double angle, std::size_t qubit_idx)=0
Apply Phase Shift on specified qubit by angle in radians.
virtual void applyGateCX(std::size_t control, std::size_t target)=0
Apply Controlled Pauli-X (CNOT) on target qubit.
virtual void applyGateZ(std::size_t qubit_idx)=0
Apply Pauli-Z gate to qubit at qubit_idx.
virtual void applyGateI(std::size_t qubit_idx)=0
Apply Identity to qubit at qubit_idx.
virtual void applyGateCZ(std::size_t control, std::size_t target)=0
Apply Controlled Pauli-Z on target qubit.
virtual void applyGateY(std::size_t qubit_idx)=0
Apply Pauli-Y gate to qubit at qubit_idx.
virtual void applyGateCH(std::size_t control, std::size_t target)=0
Apply Controlled Hadamard on target qubit.
virtual void applyGateSqrtX(std::size_t qubit_idx)=0
Apply \sqrt{Pauli-X} gate to qubit at qubit_idx.
virtual std::size_t getNumQubits()=0
Get the Number of qubits in the simulator.
virtual void applyGateCPhaseShift(double angle, std::size_t control, std::size_t target)=0
Apply Controlled Phase Shift on specified qubit by angle in radians.