The Quantum Exact Simulation Toolkit v4.0.0
Loading...
Searching...
No Matches

Testing utilities which evolve a reference state (qvector or qmatrix) under the action of a reference operation. These are slow, serial, un-optimised, defensively-designed routines. More...

Functions

void applyReferenceOperator (qmatrix &state, qmatrix matrix)
 
void applyReferenceOperator (qmatrix &state, vector< int > ctrls, vector< int > states, vector< int > targs, qmatrix matrix)
 
void applyReferenceOperator (qmatrix &state, vector< int > ctrls, vector< int > targs, qmatrix matrix)
 
void applyReferenceOperator (qmatrix &state, vector< int > targs, qmatrix matrix)
 
void applyReferenceOperator (qmatrix &state, vector< int > targs, vector< qmatrix > matrices)
 
void applyReferenceOperator (qvector &state, qmatrix matrix)
 
void applyReferenceOperator (qvector &state, vector< int > ctrls, vector< int > states, vector< int > targs, qmatrix matrix)
 
void applyReferenceOperator (qvector &state, vector< int > ctrls, vector< int > targs, qmatrix matrix)
 
void applyReferenceOperator (qvector &state, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qmatrix &state, qmatrix matrix)
 
void multiplyReferenceOperator (qmatrix &state, vector< int > ctrls, vector< int > states, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qmatrix &state, vector< int > ctrls, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qmatrix &state, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qvector &state, qmatrix matrix)
 
void multiplyReferenceOperator (qvector &state, vector< int > ctrls, vector< int > states, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qvector &state, vector< int > ctrls, vector< int > targs, qmatrix matrix)
 
void multiplyReferenceOperator (qvector &state, vector< int > targs, qmatrix matrix)
 

Detailed Description

Testing utilities which evolve a reference state (qvector or qmatrix) under the action of a reference operation. These are slow, serial, un-optimised, defensively-designed routines.

Function Documentation

◆ applyReferenceOperator() [1/9]

void applyReferenceOperator ( qmatrix & state,
qmatrix matrix )

Definition at line 163 of file evolve.cpp.

163 {
164 DEMAND( state.size() == matrix.size() );
165
166 state = matrix * state * getConjugateTranspose(matrix);
167}
qmatrix getConjugateTranspose(qmatrix m)
Definition linalg.cpp:291

◆ applyReferenceOperator() [2/9]

void applyReferenceOperator ( qmatrix & state,
vector< int > ctrls,
vector< int > states,
vector< int > targs,
qmatrix matrix )

Definition at line 192 of file evolve.cpp.

192 {
193
194 qmatrix fullOp = getFullStateOperator(ctrls, ctrlStates, targs, matrix, getLog2(state.size()));
195 applyReferenceOperator(state, fullOp);
196}

◆ applyReferenceOperator() [3/9]

void applyReferenceOperator ( qmatrix & state,
vector< int > ctrls,
vector< int > targs,
qmatrix matrix )

Definition at line 216 of file evolve.cpp.

216 {
217
218 applyReferenceOperator(state, ctrls, {}, targs, matrix);
219}

◆ applyReferenceOperator() [4/9]

void applyReferenceOperator ( qmatrix & state,
vector< int > targs,
qmatrix matrix )

Definition at line 236 of file evolve.cpp.

236 {
237
238 applyReferenceOperator(state, {}, {}, targs, matrix);
239}

◆ applyReferenceOperator() [5/9]

void applyReferenceOperator ( qmatrix & state,
vector< int > targs,
vector< qmatrix > matrices )

Definition at line 252 of file evolve.cpp.

252 {
253
254 qmatrix in = state;
255 qmatrix out = getZeroMatrix(state.size());
256
257 for (auto& matrix : matrices) {
258 state = in;
259 applyReferenceOperator(state, targs, matrix);
260 out += state;
261 }
262
263 state = out;
264}
qmatrix getZeroMatrix(size_t dim)
Definition qmatrix.cpp:18

◆ applyReferenceOperator() [6/9]

void applyReferenceOperator ( qvector & state,
qmatrix matrix )

Definition at line 158 of file evolve.cpp.

158 {
159 DEMAND( state.size() == matrix.size() );
160
161 state = matrix * state;
162}

◆ applyReferenceOperator() [7/9]

void applyReferenceOperator ( qvector & state,
vector< int > ctrls,
vector< int > states,
vector< int > targs,
qmatrix matrix )

Definition at line 186 of file evolve.cpp.

186 {
187
188 qmatrix fullOp = getFullStateOperator(ctrls, ctrlStates, targs, matrix, getLog2(state.size()));
189 applyReferenceOperator(state, fullOp);
190}

◆ applyReferenceOperator() [8/9]

void applyReferenceOperator ( qvector & state,
vector< int > ctrls,
vector< int > targs,
qmatrix matrix )

Definition at line 212 of file evolve.cpp.

212 {
213
214 applyReferenceOperator(state, ctrls, {}, targs, matrix);
215}

◆ applyReferenceOperator() [9/9]

void applyReferenceOperator ( qvector & state,
vector< int > targs,
qmatrix matrix )

Definition at line 232 of file evolve.cpp.

232 {
233
234 applyReferenceOperator(state, {}, {}, targs, matrix);
235}

◆ multiplyReferenceOperator() [1/8]

void multiplyReferenceOperator ( qmatrix & state,
qmatrix matrix )

Definition at line 176 of file evolve.cpp.

176 {
177 DEMAND( state.size() == matrix.size() );
178
179 // we left-multiply upon density matrices only
180 state = matrix * state;
181}

◆ multiplyReferenceOperator() [2/8]

void multiplyReferenceOperator ( qmatrix & state,
vector< int > ctrls,
vector< int > states,
vector< int > targs,
qmatrix matrix )

Definition at line 203 of file evolve.cpp.

203 {
204
205 qmatrix left = getFullStateOperator(ctrls, ctrlStates, targs, matrix, getLog2(state.size()));
206 multiplyReferenceOperator(state, left);
207}

◆ multiplyReferenceOperator() [3/8]

void multiplyReferenceOperator ( qmatrix & state,
vector< int > ctrls,
vector< int > targs,
qmatrix matrix )

Definition at line 224 of file evolve.cpp.

224 {
225
226 multiplyReferenceOperator(state, ctrls, {}, targs, matrix);
227}

◆ multiplyReferenceOperator() [4/8]

void multiplyReferenceOperator ( qmatrix & state,
vector< int > targs,
qmatrix matrix )

Definition at line 244 of file evolve.cpp.

244 {
245
246 multiplyReferenceOperator(state, {}, {}, targs, matrix);
247}

◆ multiplyReferenceOperator() [5/8]

void multiplyReferenceOperator ( qvector & state,
qmatrix matrix )

Definition at line 169 of file evolve.cpp.

169 {
170 DEMAND( state.size() == matrix.size() );
171
172 // for statevectors, multiplying is the same as applying
173 applyReferenceOperator(state, matrix);
174}

◆ multiplyReferenceOperator() [6/8]

void multiplyReferenceOperator ( qvector & state,
vector< int > ctrls,
vector< int > states,
vector< int > targs,
qmatrix matrix )

Definition at line 198 of file evolve.cpp.

198 {
199
200 applyReferenceOperator(state, ctrls, ctrlStates, targs, matrix);
201}

◆ multiplyReferenceOperator() [7/8]

void multiplyReferenceOperator ( qvector & state,
vector< int > ctrls,
vector< int > targs,
qmatrix matrix )

Definition at line 220 of file evolve.cpp.

220 {
221
222 multiplyReferenceOperator(state, ctrls, {}, targs, matrix);
223}

◆ multiplyReferenceOperator() [8/8]

void multiplyReferenceOperator ( qvector & state,
vector< int > targs,
qmatrix matrix )

Definition at line 240 of file evolve.cpp.

240 {
241
242 multiplyReferenceOperator(state, {}, {}, targs, matrix);
243}