QuISP
Loading...
Searching...
No Matches
Qubit.h
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <unordered_set>
4#include <unsupported/Eigen/MatrixFunctions>
7#include "Eigen/src/Core/Matrix.h"
10#include "omnetpp/simtime.h"
11#include "types.h"
12#include "utils/UtilFunctions.h"
13#include "vector"
14
15namespace quisp {
17namespace backends::graph_state {
18
20using abstract::IQuantumBackend;
21using abstract::IQubit;
22using abstract::IQubitId;
23using abstract::MeasurementOutcome;
27using abstract::SimTime;
28using Eigen::Matrix;
29using Eigen::MatrixPower;
30using Eigen::MatrixXd;
32using types::MeasurementErrorModel;
33using types::MemoryErrorModel;
34using types::SingleGateErrorModel;
35using types::TwoQubitGateErrorModel;
36
37class GraphStateBackend;
38class GraphStateQubit : public IQubit {
39 public:
42 void configure(std::unique_ptr<StationaryQubitConfiguration> configuration);
43 void setFree() override;
44 const IQubitId *const getId() const override;
45 void relaseBackToPool() override;
46
47 void gateX() override;
48 void gateZ() override;
49 void gateY() override;
50 void gateH() override;
51 void gateS() override;
52 void gateSdg() override;
53 void gateCNOT(IQubit *const target_qubit) override;
54 EigenvalueResult measureX() override;
55 EigenvalueResult measureY() override;
56 EigenvalueResult measureZ() override;
57
58 void noiselessH() override;
59 void noiselessX() override;
60 void noiselessZ() override;
61 void noiselessCNOT(IQubit *const target_qubit) override;
66
67 protected:
68 // error simulation
69 void setMemoryErrorRates(double x_error_rate, double y_error_rate, double z_error_rate, double excitation_rate, double relaxation_rate);
71 void applyTwoQubitGateError(TwoQubitGateErrorModel const &err, GraphStateQubit *another_qubit);
72 void applyMemoryError();
73 void excite();
74 void relax();
75
76 // error simulation constants
83 Eigen::MatrixXd memory_transition_matrix; /*I,X,Y,Z,Ex,Rl for single qubit. Unit in μs.*/
84
85 // graph state specific operations
88 bool isNeighbor(GraphStateQubit *another_qubit);
89 void addEdge(GraphStateQubit *another_qubit);
90 void deleteEdge(GraphStateQubit *another_qubit);
91 void toggleEdge(GraphStateQubit *another_qubit);
92 void removeAllEdges();
93 void localComplement();
94 void removeVertexOperation(GraphStateQubit *qubit_to_avoid);
95 void applyPureCZ(GraphStateQubit *another_qubit);
98
99 SimTime updated_time = SimTime(0);
100
101 // graph state
102 std::unordered_set<GraphStateQubit *> neighbors;
104
105 // graph state tables
106 static std::string decomposition_table[24];
108 static bool controlled_z_lookup_edge[2][24][24];
111
112 const IQubitId *id;
114 const bool is_short_live;
115
116 // for debugging
117 std::string cliffordToString(CliffordOperator op);
118};
119
120} // namespace backends::graph_state
121} // namespace quisp
Definition IQubit.h:30
a key to identify a qubit in a backend.
Definition IQubitId.h:14
void applyRightClifford(CliffordOperator op)
Definition Qubit.cc:275
SimTime updated_time
Definition Qubit.h:99
EigenvalueResult measureY() override
Definition Qubit.cc:482
void applyClifford(CliffordOperator op)
Definition Qubit.cc:273
void removeVertexOperation(GraphStateQubit *qubit_to_avoid)
Definition Qubit.cc:320
void relaseBackToPool() override
Definition Qubit.cc:20
void removeAllEdges()
Definition Qubit.cc:298
MemoryErrorModel memory_err
Definition Qubit.h:82
static CliffordOperator clifford_application_lookup[24][24]
Definition Qubit.h:107
void setMemoryErrorRates(double x_error_rate, double y_error_rate, double z_error_rate, double excitation_rate, double relaxation_rate)
Definition Qubit.cc:38
EigenvalueResult measureZ() override
Definition Qubit.cc:494
static std::string decomposition_table[24]
Definition Qubit.h:106
void applyMemoryError()
Definition Qubit.cc:171
GraphStateBackend *const backend
Definition Qubit.h:113
void relax()
Definition Qubit.cc:265
void toggleEdge(GraphStateQubit *another_qubit)
Definition Qubit.cc:290
void gateCNOT(IQubit *const target_qubit) override
Definition Qubit.cc:427
MeasurementErrorModel measurement_err
Definition Qubit.h:81
void noiselessZ() override
Definition Qubit.cc:505
void applyTwoQubitGateError(TwoQubitGateErrorModel const &err, GraphStateQubit *another_qubit)
Definition Qubit.cc:84
void applySingleQubitGateError(SingleGateErrorModel const &err)
Definition Qubit.cc:57
EigenvalueResult measureX() override
Definition Qubit.cc:471
Eigen::MatrixXd memory_transition_matrix
Definition Qubit.h:83
std::unordered_set< GraphStateQubit * > neighbors
Definition Qubit.h:102
SingleGateErrorModel gate_err_z
Definition Qubit.h:79
void noiselessX() override
Definition Qubit.cc:504
GraphStateQubit(const IQubitId *id, GraphStateBackend *const backend, bool is_short_live)
Definition Qubit.cc:10
std::string cliffordToString(CliffordOperator op)
Definition Qubit.cc:525
SingleGateErrorModel gate_err_h
Definition Qubit.h:77
const IQubitId * id
Definition Qubit.h:112
EigenvalueResult noiselessMeasureZ() override
Definition Qubit.cc:513
void gateS() override
Definition Qubit.cc:458
void localComplement()
Definition Qubit.cc:305
EigenvalueResult noiselessMeasureX() override
Definition Qubit.cc:514
const IQubitId *const getId() const override
Definition Qubit.cc:18
static CliffordOperator controlled_z_lookup_node_2[2][24][24]
Definition Qubit.h:110
void deleteEdge(GraphStateQubit *another_qubit)
Definition Qubit.cc:285
static bool controlled_z_lookup_edge[2][24][24]
Definition Qubit.h:108
bool isNeighbor(GraphStateQubit *another_qubit)
Definition Qubit.cc:277
void gateH() override
Definition Qubit.cc:437
CliffordOperator vertex_operator
Definition Qubit.h:103
const bool is_short_live
Definition Qubit.h:114
void gateY() override
Definition Qubit.cc:452
void setFree() override
Definition Qubit.cc:420
SingleGateErrorModel gate_err_x
Definition Qubit.h:78
void addEdge(GraphStateQubit *another_qubit)
Definition Qubit.cc:279
static CliffordOperator controlled_z_lookup_node_1[2][24][24]
Definition Qubit.h:109
void noiselessH() override
Definition Qubit.cc:506
void gateSdg() override
Definition Qubit.cc:464
void excite()
Definition Qubit.cc:257
void configure(std::unique_ptr< StationaryQubitConfiguration > configuration)
Definition Qubit.cc:27
TwoQubitGateErrorModel gate_err_cnot
Definition Qubit.h:80
void gateX() override
Definition Qubit.cc:447
EigenvalueResult graphMeasureZ()
Definition Qubit.cc:366
void noiselessCNOT(IQubit *const target_qubit) override
Definition Qubit.cc:507
void applyPureCZ(GraphStateQubit *another_qubit)
Definition Qubit.cc:343
void gateZ() override
Definition Qubit.cc:442
MeasureZResult
Definition IQubit.h:13
EigenvalueResult
Definition IQubit.h:17
MeasureYResult
Definition IQubit.h:9
MeasureXResult
Definition IQubit.h:5
CliffordOperator
Definition types.h:4
Label samplingWithWeights(std::map< Label, double > weights, double rand)
Definition UtilFunctions.h:23
Definition Backends.h:10