27 #ifndef CLASSES_CODES_H_
28 #define CLASSES_CODES_H_
87 result = (
mket({0, 0, 0, 0, 0}) +
88 mket({1, 0, 0, 1, 0}) +
89 mket({0, 1, 0, 0, 1}) +
90 mket({1, 0, 1, 0, 0}) +
91 mket({0, 1, 0, 1, 0}) -
92 mket({1, 1, 0, 1, 1}) -
93 mket({0, 0, 1, 1, 0}) -
94 mket({1, 1, 0, 0, 0}) -
95 mket({1, 1, 1, 0, 1}) -
96 mket({0, 0, 0, 1, 1}) -
97 mket({1, 1, 1, 1, 0}) -
98 mket({0, 1, 1, 1, 1}) -
99 mket({1, 0, 0, 0, 1}) -
100 mket({0, 1, 1, 0, 0}) -
101 mket({1, 0, 1, 1, 1}) +
102 mket({0, 0, 1, 0, 1}))
106 result = (
mket({1, 1, 1, 1, 1}) +
107 mket({0, 1, 1, 0, 1}) +
108 mket({1, 0, 1, 1, 0}) +
109 mket({0, 1, 0, 1, 1}) +
110 mket({1, 0, 1, 0, 1}) -
111 mket({0, 0, 1, 0, 0}) -
112 mket({1, 1, 0, 0, 1}) -
113 mket({0, 0, 1, 1, 1}) -
114 mket({0, 0, 0, 1, 0}) -
115 mket({1, 1, 1, 0, 0}) -
116 mket({0, 0, 0, 0, 1}) -
117 mket({1, 0, 0, 0, 0}) -
118 mket({0, 1, 1, 1, 0}) -
119 mket({1, 0, 0, 1, 1}) -
120 mket({0, 1, 0, 0, 0}) +
121 mket({1, 1, 0, 1, 0}))
125 throw Exception(
"qpp::Codes::codeword()",
134 result = (
mket({0, 0, 0, 0, 0, 0, 0}) +
135 mket({1, 0, 1, 0, 1, 0, 1}) +
136 mket({0, 1, 1, 0, 0, 1, 1}) +
137 mket({1, 1, 0, 0, 1, 1, 0}) +
138 mket({0, 0, 0, 1, 1, 1, 1}) +
139 mket({1, 0, 1, 1, 0, 1, 0}) +
140 mket({0, 1, 1, 1, 1, 0, 0}) +
141 mket({1, 1, 0, 1, 0, 0, 1})) /
146 result = (
mket({1, 1, 1, 1, 1, 1, 1}) +
147 mket({0, 1, 0, 1, 0, 1, 0}) +
148 mket({1, 0, 0, 1, 1, 0, 0}) +
149 mket({0, 0, 1, 1, 0, 0, 1}) +
150 mket({1, 1, 1, 0, 0, 0, 0}) +
151 mket({0, 1, 0, 0, 1, 0, 1}) +
152 mket({1, 0, 0, 0, 0, 1, 1}) +
153 mket({0, 0, 1, 0, 1, 1, 0})) /
157 throw Exception(
"qpp::Codes::codeword()",
164 shora =
mket({0, 0, 0}) +
mket({1, 1, 1,});
165 shorb =
mket({0, 0, 0}) -
mket({1, 1, 1,});
169 result =
kron(shora,
kron(shora, shora))
173 result =
kron(shorb,
kron(shorb, shorb))
177 throw Exception(
"qpp::Codes::codeword()",
Codes()
Default constructor.
Definition: codes.h:57
Singleton policy class, used internally to implement the singleton pattern via CRTP (Curiously recurr...
Definition: singleton.h:77
Eigen::VectorXcd ket
Complex (double precision) dynamic Eigen column vector.
Definition: types.h:57
Quantum++ main namespace.
Definition: codes.h:30
Type
Code types, add more codes here if needed.
Definition: codes.h:46
const Singleton class that defines quantum error correcting codes
Definition: codes.h:37
~Codes()=default
Default destructor.
[[7,1,3]] Steane qubit code
dyn_mat< typename T::Scalar > kron(const T &head)
Kronecker product.
Definition: functions.h:798
[[9,1,3]] Shor qubit code
Generates custom exceptions, used when validating function parameters.
Definition: exception.h:39
ket mket(const std::vector< idx > &mask, const std::vector< idx > &dims)
Multi-partite qudit ket.
Definition: functions.h:1334
std::size_t idx
Non-negative integer index.
Definition: types.h:36
ket codeword(Type type, idx i) const
Returns the codeword of the specified code type.
Definition: codes.h:77