QuISP
Loading...
Searching...
No Matches
IQubit.h
Go to the documentation of this file.
1#pragma once
2#include <stdexcept>
4
5enum class MeasureXResult : int {
8};
9enum class MeasureYResult : int {
12};
13enum class MeasureZResult : int {
16};
17enum class EigenvalueResult : int {
20};
22 char basis;
25 bool operator==(const MeasurementOutcome &outcome) const { return basis == outcome.basis && outcome_is_plus == outcome.outcome_is_plus && GOD_clean == outcome.GOD_clean; }
26};
27
28class IQubitId;
29
30class IQubit {
31 public:
32 IQubit(){};
33 virtual ~IQubit(){};
34
35 virtual void setFree() = 0;
36 virtual const IQubitId *const getId() const { throw std::runtime_error("getId is not implemented"); }
37 virtual void relaseBackToPool() { throw std::runtime_error("release back to pool is not implemented. Is this a short-live qubit?"); }
38
39 // single qubit operations
40 virtual void gateX() { throw std::runtime_error("gateX not implemented"); }
41 virtual void gateY() { throw std::runtime_error("gateY not implemented"); }
42 virtual void gateZ() { throw std::runtime_error("gateZ not implemented"); }
43 virtual void gateI() { throw std::runtime_error("gateI not implemented"); }
44 virtual void gateH() { throw std::runtime_error("gateH not implemented"); }
45 virtual void gateT() { throw std::runtime_error("gateT not implemented"); }
46 virtual void gateS() { throw std::runtime_error("gateS not implemented"); }
47 virtual void gateSdg() { throw std::runtime_error("gateS not implemented"); }
48
49 // two qubit operations
50 virtual void gateCNOT(IQubit *const target_qubit) { throw std::runtime_error("gateCNOT not implemented"); };
51 virtual void gateCZ(IQubit *const target_qubit) { throw std::runtime_error("gateCZ not implemented"); };
52
53 // ideal noiseless operations
54 virtual void noiselessX() { throw std::runtime_error("noiselessX not implemented"); }
55 virtual void noiselessZ() { throw std::runtime_error("noiselessZ not implemented"); }
56 virtual void noiselessH() { throw std::runtime_error("noiselessH not implemented"); }
57 virtual void noiselessCNOT(IQubit *const target_qubit) { throw std::runtime_error("noiselessCNOT not implemented"); }
58 virtual EigenvalueResult noiselessMeasureZ() { throw std::runtime_error("noiselessMeasureZ not implemented"); }
59 virtual EigenvalueResult noiselessMeasureX() { throw std::runtime_error("noiselessMeasureX not implemented"); }
60 virtual EigenvalueResult noiselessMeasureZ(EigenvalueResult forced_result) { throw std::runtime_error("noiselessMeasureZ not implemented"); }
61 virtual EigenvalueResult noiselessMeasureX(EigenvalueResult forced_result) { throw std::runtime_error("noiselessMeasureX not implemented"); }
62
63 // measurements
64 virtual EigenvalueResult measureX() { throw std::runtime_error("measureX not implemented"); }
65 virtual EigenvalueResult measureY() { throw std::runtime_error("measureY not implemented"); }
66 virtual EigenvalueResult measureZ() { throw std::runtime_error("measureZ not implemented"); }
67};
68
69} // namespace quisp::backends::abstract
Definition IQubit.h:30
virtual EigenvalueResult noiselessMeasureZ(EigenvalueResult forced_result)
Definition IQubit.h:60
virtual void gateI()
Definition IQubit.h:43
IQubit()
Definition IQubit.h:32
virtual void gateS()
Definition IQubit.h:46
virtual EigenvalueResult measureY()
Definition IQubit.h:65
virtual void gateCZ(IQubit *const target_qubit)
Definition IQubit.h:51
virtual void gateY()
Definition IQubit.h:41
virtual void gateSdg()
Definition IQubit.h:47
virtual void noiselessCNOT(IQubit *const target_qubit)
Definition IQubit.h:57
virtual ~IQubit()
Definition IQubit.h:33
virtual EigenvalueResult noiselessMeasureX(EigenvalueResult forced_result)
Definition IQubit.h:61
virtual EigenvalueResult noiselessMeasureX()
Definition IQubit.h:59
virtual void relaseBackToPool()
Definition IQubit.h:37
virtual EigenvalueResult measureZ()
Definition IQubit.h:66
virtual void noiselessZ()
Definition IQubit.h:55
virtual void gateX()
Definition IQubit.h:40
virtual void gateCNOT(IQubit *const target_qubit)
Definition IQubit.h:50
virtual void gateT()
Definition IQubit.h:45
virtual void noiselessH()
Definition IQubit.h:56
virtual void gateZ()
Definition IQubit.h:42
virtual void gateH()
Definition IQubit.h:44
virtual void noiselessX()
Definition IQubit.h:54
virtual const IQubitId *const getId() const
Definition IQubit.h:36
virtual EigenvalueResult measureX()
Definition IQubit.h:64
virtual EigenvalueResult noiselessMeasureZ()
Definition IQubit.h:58
a key to identify a qubit in a backend.
Definition IQubitId.h:14
Definition IConfiguration.h:4
MeasureZResult
Definition IQubit.h:13
EigenvalueResult
Definition IQubit.h:17
MeasureYResult
Definition IQubit.h:9
MeasureXResult
Definition IQubit.h:5
bool operator==(const MeasurementOutcome &outcome) const
Definition IQubit.h:25
bool outcome_is_plus
Definition IQubit.h:23