QuISP
Loading...
Searching...
No Matches
Action.h
Go to the documentation of this file.
1#pragma once
2#include <nlohmann/json.hpp>
3
4#include "modules/QNIC.h"
5#include "modules/QUBIT.h"
6
7using nlohmann::json;
9namespace quisp::rules {
10
13};
14
29
31 {INVALID, "INVALID"},
32 {SINGLE_SELECTION_X_PURIFICATION, "SINGLE_SELECTION_X_PURIFICATION"},
33 {SINGLE_SELECTION_Z_PURIFICATION, "SINGLE_SELECTION_Z_PURIFICATION"},
34 {SINGLE_SELECTION_Y_PURIFICATION, "SINGLE_SELECTION_Y_PURIFICATION"},
35 {SINGLE_SELECTION_XZ_PURIFICATION, "SINGLE_SELECTION_XZ_PURIFICATION"},
36 {SINGLE_SELECTION_ZX_PURIFICATION, "SINGLE_SELECTION_ZX_PURIFICATION"},
37 {DOUBLE_SELECTION_X_PURIFICATION, "DOUBLE_SELECTION_X_PURIFICATION"},
38 {DOUBLE_SELECTION_Z_PURIFICATION, "DOUBLE_SELECTION_Z_PURIFICATION"},
39 {DOUBLE_SELECTION_XZ_PURIFICATION, "DOUBLE_SELECTION_XZ_PURIFICATION"},
40 {DOUBLE_SELECTION_ZX_PURIFICATION, "DOUBLE_SELECTION_ZX_PURIFICATION"},
41 {DOUBLE_SELECTION_X_PURIFICATION_SINGLE_SELECTION_Z_PURIFICATION, "DOUBLE_SELECTION_X_PURIFICATION_SINGLE_SELECTION_Z_PURIFICATION"},
42 {DOUBLE_SELECTION_Z_PURIFICATION_SINGLE_SELECTION_X_PURIFICATION, "DOUBLE_SELECTION_Z_PURIFICATION_SINGLE_SELECTION_X_PURIFICATION"},
43 })
44
45inline void to_json(json& j, const QnicInterface& qi) { j = json{{"partner_address", qi.partner_addr}}; }
46
47inline void from_json(const json& j, QnicInterface& qi) { j.at("partner_address").get_to(qi.partner_addr); }
48class Action {
49 public:
50 Action() {} // for deserialization
51 Action(int partner_addr);
52 Action(std::vector<int> partner_addr);
53 virtual ~Action() {}
54 std::vector<QnicInterface> qnic_interfaces;
56 virtual json serialize_json() = 0;
57 virtual void deserialize_json(json serialized) = 0;
58};
59
60class Purification : public Action {
61 public:
62 Purification(json serialized) { deserialize_json(serialized); } // for deserialization
66 json serialize_json() override;
67 void deserialize_json(json serialized) override;
68};
69
71 public:
72 EntanglementSwapping(json serialized) { deserialize_json(serialized); } // for deserialization
73 EntanglementSwapping(std::vector<int> partner_addr, int shared_rule_tag);
74 std::vector<QnicInterface> remote_qnic_interfaces;
76 json serialize_json() override;
77 void deserialize_json(json serialized) override;
78};
79
81 public:
82 PurificationCorrelation(json serialized) { deserialize_json(serialized); } // for deserialization
83 PurificationCorrelation(int partner_addr, int shared_rule_tag);
85 json serialize_json() override;
86 void deserialize_json(json serialized) override;
87};
88
89class SwappingCorrection : public Action {
90 public:
91 SwappingCorrection(json serialized) { deserialize_json(serialized); } // for deserialization
92 SwappingCorrection(int swapper_addr, int shared_rule_tag);
94 json serialize_json() override;
95 void deserialize_json(json serialized) override;
96};
97
98class Tomography : public Action {
99 public:
100 Tomography(json serialized) { deserialize_json(serialized); } // for deserialization
101 Tomography(int num_measurement, int owner_addr, int partner_addr);
102 simtime_t start_time = -1;
105 json serialize_json() override;
106 void deserialize_json(json serialized) override;
107};
108
109} // namespace quisp::rules
QNIC.
Definition Action.h:48
virtual json serialize_json()=0
virtual ~Action()
Definition Action.h:53
Action()
Definition Action.h:50
int partner_address
Definition Action.h:55
std::vector< QnicInterface > qnic_interfaces
Definition Action.h:54
virtual void deserialize_json(json serialized)=0
EntanglementSwapping(json serialized)
Definition Action.h:72
void deserialize_json(json serialized) override
Definition Action.cc:56
int shared_rule_tag
Definition Action.h:75
json serialize_json() override
Definition Action.cc:47
std::vector< QnicInterface > remote_qnic_interfaces
Definition Action.h:74
int shared_rule_tag
Definition Action.h:84
void deserialize_json(json serialized) override
Definition Action.cc:75
json serialize_json() override
Definition Action.cc:67
PurificationCorrelation(json serialized)
Definition Action.h:82
Definition Action.h:60
void deserialize_json(json serialized) override
Definition Action.cc:30
json serialize_json() override
Definition Action.cc:21
PurType purification_type
Definition Action.h:64
int shared_rule_tag
Definition Action.h:65
Purification(json serialized)
Definition Action.h:62
Definition Action.h:89
void deserialize_json(json serialized) override
Definition Action.cc:93
json serialize_json() override
Definition Action.cc:85
SwappingCorrection(json serialized)
Definition Action.h:91
int shared_rule_tag
Definition Action.h:93
Definition Action.h:98
simtime_t start_time
Definition Action.h:102
int num_measurement
Definition Action.h:103
json serialize_json() override
Definition Action.cc:103
void deserialize_json(json serialized) override
Definition Action.cc:112
Tomography(json serialized)
Definition Action.h:100
int owner_address
Definition Action.h:104
QUBIT.
QNIC_type
Definition QNIC.h:18
Definition Action.cc:3
const QnicInterface & qi
Definition Action.h:45
PurType
Definition Action.h:15
@ SINGLE_SELECTION_X_PURIFICATION
Single purification for X error.
Definition Action.h:17
@ DOUBLE_SELECTION_XZ_PURIFICATION
Double Selection and Dual Action for both X and Z errors.
Definition Action.h:24
@ DOUBLE_SELECTION_ZX_PURIFICATION
Inverse Double Selection and Dual Action for both X and Z errors.
Definition Action.h:25
@ DOUBLE_SELECTION_X_PURIFICATION
Double selection XZ and single action (DoubleSelectionAction) for X error.
Definition Action.h:22
@ SINGLE_SELECTION_Y_PURIFICATION
Definition Action.h:19
@ INVALID
Invalid purification type.
Definition Action.h:16
@ DOUBLE_SELECTION_X_PURIFICATION_SINGLE_SELECTION_Z_PURIFICATION
Different type of Double Selection and Dual Action for both X and Z errors.
Definition Action.h:26
@ DOUBLE_SELECTION_Z_PURIFICATION
Inverse Double selection XZ and single action(DoubleSelectionAction) for X error.
Definition Action.h:23
@ SINGLE_SELECTION_ZX_PURIFICATION
Double inverse purification both for X and Z errors.
Definition Action.h:21
@ SINGLE_SELECTION_Z_PURIFICATION
Single purification for Z error.
Definition Action.h:18
@ SINGLE_SELECTION_XZ_PURIFICATION
Double purification both for X and Z errors.
Definition Action.h:20
@ DOUBLE_SELECTION_Z_PURIFICATION_SINGLE_SELECTION_X_PURIFICATION
Different type of Inverse Double Selection and Dual Action for both X and Z errors.
Definition Action.h:27
NLOHMANN_JSON_SERIALIZE_ENUM(PurType, { {INVALID, "INVALID"}, {SINGLE_SELECTION_X_PURIFICATION, "SINGLE_SELECTION_X_PURIFICATION"}, {SINGLE_SELECTION_Z_PURIFICATION, "SINGLE_SELECTION_Z_PURIFICATION"}, {SINGLE_SELECTION_Y_PURIFICATION, "SINGLE_SELECTION_Y_PURIFICATION"}, {SINGLE_SELECTION_XZ_PURIFICATION, "SINGLE_SELECTION_XZ_PURIFICATION"}, {SINGLE_SELECTION_ZX_PURIFICATION, "SINGLE_SELECTION_ZX_PURIFICATION"}, {DOUBLE_SELECTION_X_PURIFICATION, "DOUBLE_SELECTION_X_PURIFICATION"}, {DOUBLE_SELECTION_Z_PURIFICATION, "DOUBLE_SELECTION_Z_PURIFICATION"}, {DOUBLE_SELECTION_XZ_PURIFICATION, "DOUBLE_SELECTION_XZ_PURIFICATION"}, {DOUBLE_SELECTION_ZX_PURIFICATION, "DOUBLE_SELECTION_ZX_PURIFICATION"}, {DOUBLE_SELECTION_X_PURIFICATION_SINGLE_SELECTION_Z_PURIFICATION, "DOUBLE_SELECTION_X_PURIFICATION_SINGLE_SELECTION_Z_PURIFICATION"}, {DOUBLE_SELECTION_Z_PURIFICATION_SINGLE_SELECTION_X_PURIFICATION, "DOUBLE_SELECTION_Z_PURIFICATION_SINGLE_SELECTION_X_PURIFICATION"}, }) inline void to_json(json &j
void from_json(const json &j, QnicInterface &qi)
Definition Action.h:47
Definition Action.h:11
int partner_addr
Definition Action.h:12