3#include <unordered_set>
4#include <unsupported/Eigen/MatrixFunctions>
7#include "Eigen/src/Core/Matrix.h"
10#include "omnetpp/simtime.h"
17namespace backends::graph_state {
20using abstract::IQuantumBackend;
21using abstract::IQubit;
22using abstract::IQubitId;
23using abstract::MeasurementOutcome;
27using abstract::SimTime;
29using Eigen::MatrixPower;
32using types::MeasurementErrorModel;
33using types::MemoryErrorModel;
34using types::SingleGateErrorModel;
35using types::TwoQubitGateErrorModel;
37class GraphStateBackend;
42 void configure(std::unique_ptr<StationaryQubitConfiguration> configuration);
47 void gateX()
override;
48 void gateZ()
override;
49 void gateY()
override;
50 void gateH()
override;
51 void gateS()
override;
69 void setMemoryErrorRates(
double x_error_rate,
double y_error_rate,
double z_error_rate,
double excitation_rate,
double relaxation_rate);
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
~GraphStateQubit()
Definition Qubit.cc:16
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