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

Functions for overwriting Qureg amplitudes. More...

Functions

void setDensityQuregAmps (Qureg qureg, qindex startRow, qindex startCol, qcomp **amps, qindex numRows, qindex numCols)
 
void setDensityQuregAmps (Qureg qureg, qindex startRow, qindex startCol, std::vector< std::vector< qcomp > > amps)
 
void setDensityQuregFlatAmps (Qureg qureg, qindex startInd, qcomp *amps, qindex numAmps)
 
void setDensityQuregFlatAmps (Qureg qureg, qindex startInd, std::vector< qcomp > amps)
 
void setQuregAmps (Qureg qureg, qindex startInd, qcomp *amps, qindex numAmps)
 
void setQuregAmps (Qureg qureg, qindex startInd, std::vector< qcomp > amps)
 
void setQuregToClone (Qureg targetQureg, Qureg copyQureg)
 
void setQuregToPartialTrace (Qureg out, Qureg in, int *traceOutQubits, int numTraceQubits)
 
void setQuregToPartialTrace (Qureg out, Qureg in, std::vector< int > traceOutQubits)
 
void setQuregToPauliStrSum (Qureg qureg, PauliStrSum sum)
 
void setQuregToReducedDensityMatrix (Qureg out, Qureg in, int *retainQubits, int numRetainQubits)
 
void setQuregToReducedDensityMatrix (Qureg out, Qureg in, std::vector< int > retainQubits)
 
qreal setQuregToRenormalized (Qureg qureg)
 
void setQuregToSuperposition (qcomp facOut, Qureg out, qcomp fac1, Qureg qureg1, qcomp fac2, Qureg qureg2)
 

Detailed Description

Functions for overwriting Qureg amplitudes.

Function Documentation

◆ setDensityQuregAmps() [1/2]

void setDensityQuregAmps ( Qureg qureg,
qindex startRow,
qindex startCol,
qcomp ** amps,
qindex numRows,
qindex numCols )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!

Definition at line 160 of file initialisations.cpp.

160 {
161 validate_quregFields(qureg, __func__);
162 validate_quregIsDensityMatrix(qureg, __func__);
163 validate_basisStateRowCols(qureg, startRow, startCol, numRows, numCols, __func__);
164
165 localiser_densmatr_setAmps(amps, qureg, startRow, startCol, numRows, numCols);
166}

Referenced by TEST_CASE().

◆ setDensityQuregAmps() [2/2]

void setDensityQuregAmps ( Qureg qureg,
qindex startRow,
qindex startCol,
std::vector< std::vector< qcomp > > amps )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Remarks
This function is only available in C++.

◆ setDensityQuregFlatAmps() [1/2]

void setDensityQuregFlatAmps ( Qureg qureg,
qindex startInd,
qcomp * amps,
qindex numAmps )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!

Definition at line 169 of file initialisations.cpp.

169 {
170 validate_quregFields(qureg, __func__);
171 validate_quregIsDensityMatrix(qureg, __func__);
172 validate_basisStateIndices(qureg, startInd, numAmps, __func__); // validation msg correct for density-matrix
173
174 localiser_statevec_setAmps(amps, qureg, startInd, numAmps);
175}

Referenced by TEST_CASE().

◆ setDensityQuregFlatAmps() [2/2]

void setDensityQuregFlatAmps ( Qureg qureg,
qindex startInd,
std::vector< qcomp > amps )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Remarks
This function is only available in C++.

◆ setQuregAmps() [1/2]

void setQuregAmps ( Qureg qureg,
qindex startInd,
qcomp * amps,
qindex numAmps )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!

Definition at line 151 of file initialisations.cpp.

151 {
152 validate_quregFields(qureg, __func__);
153 validate_quregIsStateVector(qureg, __func__);
154 validate_basisStateIndices(qureg, startInd, numAmps, __func__);
155
156 localiser_statevec_setAmps(amps, qureg, startInd, numAmps);
157}

Referenced by TEST_CASE(), and TEST_CASE().

◆ setQuregAmps() [2/2]

void setQuregAmps ( Qureg qureg,
qindex startInd,
std::vector< qcomp > amps )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Remarks
This function is only available in C++.

◆ setQuregToClone()

void setQuregToClone ( Qureg targetQureg,
Qureg copyQureg )
Note
Documentation for this function or struct is under construction!
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!

Definition at line 178 of file initialisations.cpp.

178 {
179 validate_quregFields(targetQureg, __func__);
180 validate_quregFields(copyQureg, __func__);
181 validate_quregsCanBeCloned(targetQureg, copyQureg, __func__);
182
183 // we invoke mixing/superposing, which involves superfluous
184 // floating-point operators but is not expected to cause an
185 // appreciable slowdown since simulation is memory-bound
186 (targetQureg.isDensityMatrix)?
187 localiser_densmatr_mixQureg(0, targetQureg, 1, copyQureg):
188 localiser_statevec_setQuregToSuperposition(0, targetQureg, 1, copyQureg, 0, copyQureg);
189}

Referenced by createCloneQureg().

◆ setQuregToPartialTrace() [1/2]

void setQuregToPartialTrace ( Qureg out,
Qureg in,
int * traceOutQubits,
int numTraceQubits )
Note
Documentation for this function or struct is under construction!
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!

Definition at line 229 of file initialisations.cpp.

229 {
230 validate_quregFields(in, __func__);
231 validate_quregFields(out, __func__);
232 validate_quregIsDensityMatrix(in, __func__);
233 validate_quregIsDensityMatrix(out, __func__);
234 validate_targets(in, traceOutQubits, numTraceQubits, __func__);
235 validate_quregCanBeSetToReducedDensMatr(out, in, numTraceQubits, __func__);
236
237 auto targets = util_getVector(traceOutQubits, numTraceQubits);
238 localiser_densmatr_partialTrace(in, out, targets);
239}

◆ setQuregToPartialTrace() [2/2]

void setQuregToPartialTrace ( Qureg out,
Qureg in,
std::vector< int > traceOutQubits )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Remarks
This function is only available in C++.

Definition at line 292 of file initialisations.cpp.

292 {
293 setQuregToPartialTrace(out, in, traceOutQubits.data(), traceOutQubits.size());
294}
void setQuregToPartialTrace(Qureg out, Qureg in, int *traceOutQubits, int numTraceQubits)

◆ setQuregToPauliStrSum()

void setQuregToPauliStrSum ( Qureg qureg,
PauliStrSum sum )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!

Definition at line 216 of file initialisations.cpp.

216 {
217 validate_quregFields(qureg, __func__);
218 validate_quregIsDensityMatrix(qureg, __func__);
219 validate_pauliStrSumFields(sum, __func__);
220 validate_pauliStrSumTargets(sum, qureg, __func__);
221
222 // sum is permitted to be non-Hermitian, since Hermiticity
223 // is insufficient to ensure qureg would be physical/valid
224
225 localiser_densmatr_setAmpsToPauliStrSum(qureg, sum);
226}

Referenced by TEST_CASE().

◆ setQuregToReducedDensityMatrix() [1/2]

void setQuregToReducedDensityMatrix ( Qureg out,
Qureg in,
int * retainQubits,
int numRetainQubits )
Note
Documentation for this function or struct is under construction!
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!

Definition at line 242 of file initialisations.cpp.

242 {
243 validate_quregFields(in, __func__);
244 validate_quregFields(out, __func__);
245 validate_quregIsDensityMatrix(in, __func__);
246 validate_quregIsDensityMatrix(out, __func__);
247 validate_targets(in, retainQubits, numRetainQubits, __func__);
248 validate_quregCanBeSetToReducedDensMatr(out, in, in.numQubits - numRetainQubits, __func__);
249
250 auto traceQubits = util_getNonTargetedQubits(retainQubits, numRetainQubits, in.numQubits);
251 localiser_densmatr_partialTrace(in, out, traceQubits);
252}

◆ setQuregToReducedDensityMatrix() [2/2]

void setQuregToReducedDensityMatrix ( Qureg out,
Qureg in,
std::vector< int > retainQubits )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Remarks
This function is only available in C++.

Definition at line 296 of file initialisations.cpp.

296 {
297 setQuregToReducedDensityMatrix(out, in, retainQubits.data(), retainQubits.size());
298}
void setQuregToReducedDensityMatrix(Qureg out, Qureg in, int *retainQubits, int numRetainQubits)

◆ setQuregToRenormalized()

qreal setQuregToRenormalized ( Qureg qureg)
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!

Definition at line 202 of file initialisations.cpp.

202 {
203 validate_quregFields(qureg, __func__);
204
205 qreal prob = calcTotalProb(qureg); // harmlessly re-validates
206 validate_quregRenormProbIsNotZero(prob, __func__);
207
208 qreal norm = (qureg.isDensityMatrix)? prob : std::sqrt(prob);
209 qreal fac = 1 / norm;
210 localiser_statevec_setQuregToSuperposition(fac, qureg, 0, qureg, 0, qureg);
211
212 return fac;
213}
qreal calcTotalProb(Qureg qureg)

Referenced by initRandomPureState(), and TEST_CASE().

◆ setQuregToSuperposition()

void setQuregToSuperposition ( qcomp facOut,
Qureg out,
qcomp fac1,
Qureg qureg1,
qcomp fac2,
Qureg qureg2 )
Note
Documentation for this function or struct is under construction!
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!

Definition at line 192 of file initialisations.cpp.

192 {
193 validate_quregFields(out, __func__);
194 validate_quregFields(qureg1, __func__);
195 validate_quregFields(qureg2, __func__);
196 validate_quregsCanBeSuperposed(out, qureg1, qureg2, __func__); // asserts statevectors
197
198 localiser_statevec_setQuregToSuperposition(facOut, out, fac1, qureg1, fac2, qureg2);
199}