Skip to content

Commit b2524fa

Browse files
committed
added calcAmpSum frontend
and unit test, for completeness
1 parent 1fc6ecf commit b2524fa

File tree

4 files changed

+82
-0
lines changed

4 files changed

+82
-0
lines changed

quest/include/calculations.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,44 @@ Qureg calcReducedDensityMatrix(Qureg qureg, int* retainQubits, int numRetainQubi
342342
*/
343343

344344

345+
/** @ingroup example_prs
346+
*
347+
* Calculates the sum of every amplitude in the state.
348+
*
349+
* @formulae
350+
* Let @f$ n @f$ qubits be the number of qubits in @p qureg.
351+
*
352+
* - When @p qureg is a statevector @f$ \svpsi @f$, this function returns
353+
* @f[
354+
\sum\limits_i^{2^n} \langle i \svpsi \in \mathbb{C}.
355+
* @f]
356+
* - When @p qureg is a density matrix @f$ \dmrho @f$, this function returns
357+
* @f[
358+
\sum\limits_i^{2^n} \sum\limits_j^{2^n} \bra{i} \dmrho \ket{j} \in \mathbb{C}.
359+
* @f]
360+
*
361+
* @myexample
362+
* ```
363+
Qureg qureg = createQureg(4);
364+
initRandomPureState(qureg);
365+
366+
qcomp ampSum = calcAmpSum(qureg);
367+
reportScalar("ampSum", ampSum);
368+
* ```
369+
*
370+
* @see
371+
* - calcRealAmpSum()
372+
373+
* @param[in] qureg the state with the processed amplitudes.
374+
* @returns The the sum of all contained amplitudes.
375+
* @throws @validationerror
376+
* - if @p qureg is uninitialised.
377+
* - if @p qureg contains an odd number of qubits.
378+
* @author Tyson Jones
379+
*/
380+
qcomp calcAmpSum(Qureg qureg);
381+
382+
345383
/// @ingroup calc_comparisons
346384
/// @notdoced
347385
/// @notvalidated

quest/include/wrappers.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@
4242
#ifndef __cplusplus
4343

4444

45+
extern void _wrap_calcAmpSum(Qureg qureg, qcomp* out);
46+
47+
qcomp calcAmpSum(Qureg qureg) {
48+
49+
qcomp out;
50+
_wrap_calcAmpSum(qureg, &out);
51+
return out;
52+
}
53+
4554

4655
extern void _wrap_calcInnerProduct(Qureg bra, Qureg ket, qcomp* out);
4756

quest/src/api/calculations.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ extern Qureg validateAndCreateCustomQureg(
4646
*/
4747

4848

49+
qcomp calcAmpSum(Qureg qureg) {
50+
validate_quregFields(qureg, __func__);
51+
52+
return localiser_statevec_calcAmpSum(qureg);
53+
}
54+
extern "C" void _wrap_calcAmpSum(Qureg qureg, qcomp* out) {
55+
56+
*out = calcAmpSum(qureg);
57+
}
58+
59+
4960
qcomp calcInnerProduct(Qureg quregA, Qureg quregB) {
5061
validate_quregFields(quregA, __func__);
5162
validate_quregFields(quregB, __func__);

tests/unit/calculations.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,30 @@ TEST_CASE( "calcRealAmpSum", TEST_CATEGORY ) {
197197

198198

199199

200+
TEST_CASE( "calcAmpSum", TEST_CATEGORY ) {
201+
202+
SECTION( LABEL_CORRECTNESS ) {
203+
204+
TEST_ALL_QUREGS(
205+
qureg, calcAmpSum(qureg),
206+
refer, getTotal(refer)
207+
);
208+
}
209+
210+
SECTION( LABEL_VALIDATION ) {
211+
212+
SECTION( "qureg uninitialised" ) {
213+
214+
Qureg qureg;
215+
qureg.numQubits = -123;
216+
217+
REQUIRE_THROWS_WITH( calcRealAmpSum(qureg), ContainsSubstring("invalid Qureg") );
218+
}
219+
}
220+
}
221+
222+
223+
200224
TEST_CASE( "calcExpecPauliStr", TEST_CATEGORY ) {
201225

202226
SECTION( LABEL_CORRECTNESS ) {

0 commit comments

Comments
 (0)