27 #ifndef CLASSES_STATES_H_ 28 #define CLASSES_STATES_H_ 103 ket psi =
mket({0, 0}, {d, d});
104 for (
idx i = 1; i < d; ++i)
106 psi +=
mket({i, i}, {d, d});
109 return psi / std::sqrt(d);
131 idx D =
static_cast<idx>(std::pow(d, n));
132 ket result = ket::Zero(D);
157 ket result = ket::Zero(static_cast<ket::Index>(std::pow(d, n)));
158 result(
multiidx2n(std::vector<idx>(n, 1), std::vector<idx>(n, d))) = 1;
187 ket result = ket::Zero(static_cast<ket::Index>(std::pow(d, n)));
188 result(
multiidx2n(std::vector<idx>(n, j), std::vector<idx>(n, d))) = 1;
208 idx D =
static_cast<idx>(std::pow(2, n));
209 ket result = ket::Ones(D);
211 return result / std::sqrt(D);
239 x0 << 1 / std::sqrt(2.), 1 / std::sqrt(2.);
240 x1 << 1 / std::sqrt(2.), -1 / std::sqrt(2.);
241 y0 << 1 / std::sqrt(2.), 1_i / std::sqrt(2.);
242 y1 << 1 / std::sqrt(2.), -1_i / std::sqrt(2.);
255 b00 << 1 / std::sqrt(2.), 0, 0, 1 / std::sqrt(2.);
257 b01 << 0, 1 / std::sqrt(2.), 1 / std::sqrt(2.), 0;
259 b10 << 1 / std::sqrt(2.), 0, 0, -1 / std::sqrt(2.);
261 b11 << 0, 1 / std::sqrt(2.), -1 / std::sqrt(2.), 0;
269 GHZ << 1, 0, 0, 0, 0, 0, 0, 1;
270 GHZ =
GHZ / std::sqrt(2.);
271 W << 0, 1, 1, 0, 1, 0, 0, 0;
272 W =
W / std::sqrt(3.);
275 pW =
W *
W.adjoint();
ket zero(idx n, idx d=2) const
Zero state of n qudits.
Definition: states.h:119
ket minus(idx n) const
Minus state of n qubits.
Definition: states.h:220
ket W
W state.
Definition: states.h:81
cmat pb01
Projector onto the Bell-01 state.
Definition: states.h:75
ket GHZ
GHZ state.
Definition: states.h:80
cmat pb11
Projector onto the Bell-11 state.
Definition: states.h:77
Singleton policy class, used internally to implement the singleton pattern via CRTP (Curiously recurr...
Definition: singleton.h:76
Subsystems mismatch dimensions exception.
Definition: exception.h:395
Eigen::VectorXcd ket
Complex (double precision) dynamic Eigen column vector.
Definition: types.h:50
ket y0
Pauli Sigma-Y 0-eigenstate |y+>
Definition: states.h:44
Quantum++ main namespace.
Definition: codes.h:30
const Singleton class that implements most commonly used states
Definition: states.h:36
Invalid dimension(s) exception.
Definition: exception.h:287
cmat pb00
Projector onto the Bell-00 state.
Definition: states.h:74
ket z1
Pauli Sigma-Z 1-eigenstate |1>
Definition: states.h:47
ket b01
Bell-01 state (following the convention in Nielsen and Chuang)
Definition: states.h:66
ket b00
Bell-00 state (following the convention in Nielsen and Chuang)
Definition: states.h:64
cmat pb10
Projector onto the Bell-10 state.
Definition: states.h:76
cmat pW
Projector onto the W state.
Definition: states.h:85
idx multiidx2n(const std::vector< idx > &midx, const std::vector< idx > &dims)
Multi-index to non-negative integer index.
Definition: functions.h:1437
~States()=default
Default destructor.
cmat py0
Projector onto the Pauli Sigma-Y 0-eigenstate |y+><y+|.
Definition: states.h:54
dyn_mat< typename Derived::Scalar > kronpow(const Eigen::MatrixBase< Derived > &A, idx n)
Kronecker power.
Definition: functions.h:980
cmat px0
Projector onto the Pauli Sigma-X 0-eigenstate |+><+|.
Definition: states.h:50
ket x1
Pauli Sigma-X 1-eigenstate |->
Definition: states.h:43
ket y1
Pauli Sigma-Y 1-eigenstate |y->
Definition: states.h:45
ket z0
Pauli Sigma-Z 0-eigenstate |0>
Definition: states.h:46
ket b11
Bell-11 state (following the convention in Nielsen and Chuang)
Definition: states.h:70
Parameter out of range exception.
Definition: exception.h:567
ket mes(idx d=2) const
Maximally entangled state of 2 qudits.
Definition: states.h:94
ket jn(idx j, idx n, idx d=2) const
state of n qudits
Definition: states.h:171
ket plus(idx n) const
Plus state of n qubits.
Definition: states.h:199
ket one(idx n, idx d=2) const
One state of n qudits.
Definition: states.h:145
cmat pz0
Projector onto the Pauli Sigma-Z 0-eigenstate |0><0|.
Definition: states.h:58
cmat pGHZ
Projector onto the GHZ state.
Definition: states.h:84
Eigen::MatrixXcd cmat
Complex (double precision) dynamic Eigen matrix.
Definition: types.h:60
ket mket(const std::vector< idx > &mask, const std::vector< idx > &dims)
Multi-partite qudit ket.
Definition: functions.h:1465
std::size_t idx
Non-negative integer index.
Definition: types.h:35
ket b10
Bell-10 state (following the convention in Nielsen and Chuang)
Definition: states.h:68
ket x0
Pauli Sigma-X 0-eigenstate |+>
Definition: states.h:42
cmat py1
Projector onto the Pauli Sigma-Y 1-eigenstate |y-><y-|.
Definition: states.h:56
cmat px1
Projector onto the Pauli Sigma-X 1-eigenstate |-><-|.
Definition: states.h:52
cmat pz1
Projector onto the Pauli Sigma-Z 1-eigenstate |1><1|.
Definition: states.h:60
States()
Definition: states.h:236