32 #ifndef CLASSES_CODES_H_ 33 #define CLASSES_CODES_H_ 40 class Codes final :
public internal::Singleton<const Codes>
42 friend class internal::Singleton<const Codes>;
78 ket codeword(Type type, idx i)
const {
82 case Type::FIVE_QUBIT:
86 (mket({0, 0, 0, 0, 0}) + mket({1, 0, 0, 1, 0}) +
87 mket({0, 1, 0, 0, 1}) + mket({1, 0, 1, 0, 0}) +
88 mket({0, 1, 0, 1, 0}) - mket({1, 1, 0, 1, 1}) -
89 mket({0, 0, 1, 1, 0}) - mket({1, 1, 0, 0, 0}) -
90 mket({1, 1, 1, 0, 1}) - mket({0, 0, 0, 1, 1}) -
91 mket({1, 1, 1, 1, 0}) - mket({0, 1, 1, 1, 1}) -
92 mket({1, 0, 0, 0, 1}) - mket({0, 1, 1, 0, 0}) -
93 mket({1, 0, 1, 1, 1}) + mket({0, 0, 1, 0, 1})) /
98 (mket({1, 1, 1, 1, 1}) + mket({0, 1, 1, 0, 1}) +
99 mket({1, 0, 1, 1, 0}) + mket({0, 1, 0, 1, 1}) +
100 mket({1, 0, 1, 0, 1}) - mket({0, 0, 1, 0, 0}) -
101 mket({1, 1, 0, 0, 1}) - mket({0, 0, 1, 1, 1}) -
102 mket({0, 0, 0, 1, 0}) - mket({1, 1, 1, 0, 0}) -
103 mket({0, 0, 0, 0, 1}) - mket({1, 0, 0, 0, 0}) -
104 mket({0, 1, 1, 1, 0}) - mket({1, 0, 0, 1, 1}) -
105 mket({0, 1, 0, 0, 0}) + mket({1, 1, 0, 1, 0})) /
109 throw exception::NoCodeword(
"qpp::Codes::codeword()");
113 case Type::SEVEN_QUBIT_STEANE:
116 result = (mket({0, 0, 0, 0, 0, 0, 0}) +
117 mket({1, 0, 1, 0, 1, 0, 1}) +
118 mket({0, 1, 1, 0, 0, 1, 1}) +
119 mket({1, 1, 0, 0, 1, 1, 0}) +
120 mket({0, 0, 0, 1, 1, 1, 1}) +
121 mket({1, 0, 1, 1, 0, 1, 0}) +
122 mket({0, 1, 1, 1, 1, 0, 0}) +
123 mket({1, 1, 0, 1, 0, 0, 1})) /
128 result = (mket({1, 1, 1, 1, 1, 1, 1}) +
129 mket({0, 1, 0, 1, 0, 1, 0}) +
130 mket({1, 0, 0, 1, 1, 0, 0}) +
131 mket({0, 0, 1, 1, 0, 0, 1}) +
132 mket({1, 1, 1, 0, 0, 0, 0}) +
133 mket({0, 1, 0, 0, 1, 0, 1}) +
134 mket({1, 0, 0, 0, 0, 1, 1}) +
135 mket({0, 0, 1, 0, 1, 1, 0})) /
139 throw exception::NoCodeword(
"qpp::Codes::codeword()");
143 case Type::NINE_QUBIT_SHOR:
144 ket shora = mket({0, 0, 0}) + mket({1, 1, 1});
145 ket shorb = mket({0, 0, 0}) - mket({1, 1, 1});
149 kron(shora, kron(shora, shora)) / std::sqrt(8.);
153 kron(shorb, kron(shorb, shorb)) / std::sqrt(8.);
156 throw exception::NoCodeword(
"qpp::Codes::codeword()");
Quantum++ main namespace.
Definition: circuits.h:35