The Quantum Exact Simulation Toolkit v4.2.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 outQureg, Qureg inQureg)
 
void setQuregToMixture (Qureg out, qreal *probs, Qureg *in, int numIn)
 
void setQuregToMixture (Qureg out, std::vector< qreal > probs, std::vector< Qureg > in)
 
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 setQuregToWeightedSum (Qureg out, qcomp *coeffs, Qureg *in, int numIn)
 
void setQuregToWeightedSum (Qureg out, std::vector< qcomp > coeffs, std::vector< Qureg > in)
 

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 156 of file initialisations.cpp.

156 {
157 validate_quregFields(qureg, __func__);
158 validate_quregIsDensityMatrix(qureg, __func__);
159 validate_basisStateRowCols(qureg, startRow, startCol, numRows, numCols, __func__);
160
161 localiser_densmatr_setAmps(amps, qureg, startRow, startCol, numRows, numCols);
162}

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++.
See also
setDensityQuregAmps()

◆ 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 165 of file initialisations.cpp.

165 {
166 validate_quregFields(qureg, __func__);
167 validate_quregIsDensityMatrix(qureg, __func__);
168 validate_basisStateIndices(qureg, startInd, numAmps, __func__); // validation msg correct for density-matrix
169
170 localiser_statevec_setAmps(amps, qureg, startInd, numAmps);
171}

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++.
See also
setDensityQuregFlatAmps()

◆ 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 147 of file initialisations.cpp.

147 {
148 validate_quregFields(qureg, __func__);
149 validate_quregIsStateVector(qureg, __func__);
150 validate_basisStateIndices(qureg, startInd, numAmps, __func__);
151
152 localiser_statevec_setAmps(amps, qureg, startInd, numAmps);
153}

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++.
See also
setQuregAmps()

◆ setQuregToClone()

void setQuregToClone ( Qureg outQureg,
Qureg inQureg )
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 174 of file initialisations.cpp.

174 {
175 validate_quregFields(outQureg, __func__);
176 validate_quregFields(inQureg, __func__);
177 validate_quregsCanBeCloned(outQureg, inQureg, __func__);
178
179 // we invoke mixing/superposing, which involves superfluous
180 // floating-point operators but is not expected to cause an
181 // appreciable slowdown since simulation is often memory-bound
182 (outQureg.isDensityMatrix)?
183 localiser_densmatr_mixQureg(0, outQureg, 1, inQureg):
184 localiser_statevec_setQuregToClone(outQureg, inQureg);
185}

Referenced by createCloneQureg().

◆ setQuregToMixture() [1/2]

void setQuregToMixture ( Qureg out,
qreal * probs,
Qureg * in,
int numIn )
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 252 of file initialisations.cpp.

252 {
253 validate_quregFields(out, __func__);
254 validate_quregIsDensityMatrix(out, __func__);
255 validate_numQuregsInSum(numIn, __func__);
256 validate_quregsCanBeMixed(out, in, numIn, __func__); // also validates all init & densmatr
257 validate_probabilities(probs, numIn, __func__);
258
259 // convert probs to complex (assume this alloc never fails)
260 vector<qcomp> coeffVec(numIn);
261 for (int i=0; i<numIn; i++)
262 coeffVec[i] = getQcomp(probs[i], 0);
263
264 auto inVec = util_getVector(in, numIn);
265 localiser_statevec_setQuregToWeightedSum(out, coeffVec, inVec);
266}
static qcomp getQcomp(qreal re, qreal im)
Definition types.h:91

◆ setQuregToMixture() [2/2]

void setQuregToMixture ( Qureg out,
std::vector< qreal > probs,
std::vector< Qureg > in )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also
setQuregToMixture()

◆ 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 215 of file initialisations.cpp.

215 {
216 validate_quregFields(in, __func__);
217 validate_quregFields(out, __func__);
218 validate_quregIsDensityMatrix(in, __func__);
219 validate_quregIsDensityMatrix(out, __func__);
220 validate_targets(in, traceOutQubits, numTraceQubits, __func__);
221 validate_quregCanBeSetToReducedDensMatr(out, in, numTraceQubits, __func__);
222
223 auto targets = util_getVector(traceOutQubits, numTraceQubits);
224 localiser_densmatr_partialTrace(in, out, targets);
225}

◆ 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++.
See also
setQuregToPartialTrace()

Definition at line 306 of file initialisations.cpp.

306 {
307 setQuregToPartialTrace(out, in, traceOutQubits.data(), traceOutQubits.size());
308}
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 202 of file initialisations.cpp.

202 {
203 validate_quregFields(qureg, __func__);
204 validate_quregIsDensityMatrix(qureg, __func__);
205 validate_pauliStrSumFields(sum, __func__);
206 validate_pauliStrSumTargets(sum, qureg, __func__);
207
208 // sum is permitted to be non-Hermitian, since Hermiticity
209 // is insufficient to ensure qureg would be physical/valid
210
211 localiser_densmatr_setAmpsToPauliStrSum(qureg, sum);
212}

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 228 of file initialisations.cpp.

228 {
229 validate_quregFields(in, __func__);
230 validate_quregFields(out, __func__);
231 validate_quregIsDensityMatrix(in, __func__);
232 validate_quregIsDensityMatrix(out, __func__);
233 validate_targets(in, retainQubits, numRetainQubits, __func__);
234 validate_quregCanBeSetToReducedDensMatr(out, in, in.numQubits - numRetainQubits, __func__);
235
236 auto traceQubits = util_getNonTargetedQubits(retainQubits, numRetainQubits, in.numQubits);
237 localiser_densmatr_partialTrace(in, out, traceQubits);
238}

◆ 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++.
See also
setQuregToReducedDensityMatrix()

Definition at line 310 of file initialisations.cpp.

310 {
311 setQuregToReducedDensityMatrix(out, in, retainQubits.data(), retainQubits.size());
312}
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 188 of file initialisations.cpp.

188 {
189 validate_quregFields(qureg, __func__);
190
191 qreal prob = calcTotalProb(qureg); // harmlessly re-validates
192 validate_quregRenormProbIsNotZero(prob, __func__);
193
194 qreal norm = (qureg.isDensityMatrix)? prob : std::sqrt(prob);
195 qreal fac = 1 / norm;
196 localiser_statevec_scaleAmps(qureg, fac);
197
198 return fac;
199}
qreal calcTotalProb(Qureg qureg)

Referenced by initRandomPureState(), and TEST_CASE().

◆ setQuregToWeightedSum() [1/2]

void setQuregToWeightedSum ( Qureg out,
qcomp * coeffs,
Qureg * in,
int numIn )
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 241 of file initialisations.cpp.

241 {
242 validate_quregFields(out, __func__);
243 validate_numQuregsInSum(numIn, __func__);
244 validate_quregsCanBeSummed(out, in, numIn, __func__); // also validates all init
245
246 auto coeffVec = util_getVector(coeffs, numIn);
247 auto inVec = util_getVector(in, numIn);
248 localiser_statevec_setQuregToWeightedSum(out, coeffVec, inVec);
249}

◆ setQuregToWeightedSum() [2/2]

void setQuregToWeightedSum ( Qureg out,
std::vector< qcomp > coeffs,
std::vector< Qureg > in )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also
setQuregToWeightedSum()