Skip to content

Commit 0ecad9c

Browse files
separated pauli logic from paulis.cpp
since paulis.cpp is an "API" file while the pauli logic previously therein was used by numerous core files. A final inelegance remains; some unit test utilities leverage the internal pauli logic functions using extern, which will break when we eventually switch to private namespacing. Alas!
1 parent 6eec1cf commit 0ecad9c

File tree

13 files changed

+509
-441
lines changed

13 files changed

+509
-441
lines changed

quest/src/api/matrices.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "quest/src/core/autodeployer.hpp"
1717
#include "quest/src/core/utilities.hpp"
1818
#include "quest/src/core/localiser.hpp"
19+
#include "quest/src/core/paulilogic.hpp"
1920
#include "quest/src/core/printer.hpp"
2021
#include "quest/src/core/bitwise.hpp"
2122
#include "quest/src/core/fastmath.hpp"
@@ -629,9 +630,6 @@ extern "C" {
629630
*/
630631

631632

632-
extern int paulis_getIndOfLefmostNonIdentityPauli(PauliStrSum sum);
633-
634-
635633
extern "C" void setFullStateDiagMatrFromPauliStrSum(FullStateDiagMatr out, PauliStrSum in) {
636634
validate_matrixFields(out, __func__);
637635
validate_pauliStrSumFields(in, __func__);

quest/src/api/multiplication.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "quest/src/core/validation.hpp"
1515
#include "quest/src/core/utilities.hpp"
1616
#include "quest/src/core/localiser.hpp"
17+
#include "quest/src/core/paulilogic.hpp"
1718

1819
#include <vector>
1920

@@ -370,8 +371,6 @@ void rightapplySwap(Qureg qureg, int qubit1, int qubit2) {
370371
* individual Paulis
371372
*/
372373

373-
extern PauliStr paulis_getShiftedPauliStr(PauliStr str, int pauliShift);
374-
375374
extern "C" {
376375

377376
void leftapplyPauliX(Qureg qureg, int target) {
@@ -437,8 +436,6 @@ void rightapplyPauliZ(Qureg qureg, int target) {
437436
* Pauli strings
438437
*/
439438

440-
extern bool paulis_hasOddNumY(PauliStr str);
441-
442439
extern "C" {
443440

444441
void leftapplyPauliStr(Qureg qureg, PauliStr str) {
@@ -453,7 +450,7 @@ void rightapplyPauliStr(Qureg qureg, PauliStr str) {
453450
validate_quregIsDensityMatrix(qureg, __func__);
454451
validate_pauliStrTargets(qureg, str, __func__);
455452

456-
qcomp factor = paulis_hasOddNumY(str)? -1 : 1; // undo transpose
453+
qcomp factor = paulis_getSignOfPauliStrConj(str); // undo transpose
457454
str = paulis_getShiftedPauliStr(str, qureg.numQubits);
458455
localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str, factor);
459456
}
@@ -481,7 +478,7 @@ void rightapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) {
481478
validate_quregIsDensityMatrix(qureg, __func__);
482479
validate_pauliStrTargets(qureg, str, __func__);
483480

484-
qreal factor = paulis_hasOddNumY(str)? -1 : 1;
481+
qreal factor = paulis_getSignOfPauliStrConj(str);
485482
qreal phase = factor * util_getPhaseFromGateAngle(angle);
486483
str = paulis_getShiftedPauliStr(str, qureg.numQubits);
487484
localiser_statevec_anyCtrlPauliGadget(qureg, {}, {}, str, phase);
@@ -675,7 +672,7 @@ void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) {
675672
// post-multiply each term in-turn, mixing into output qureg, then undo using idempotency
676673
for (qindex i=0; i<sum.numTerms; i++) {
677674
PauliStr str = paulis_getShiftedPauliStr(sum.strings[i], qureg.numQubits);
678-
qcomp factor = paulis_hasOddNumY(str)? -1 : 1; // undoes transpose
675+
qcomp factor = paulis_getSignOfPauliStrConj(str); // undoes transpose
679676

680677
localiser_statevec_anyCtrlPauliTensor(workspace, {}, {}, str, factor);
681678
localiser_statevec_setQuregToSuperposition(1, qureg, sum.coeffs[i], workspace, 0, workspace);

quest/src/api/operations.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "quest/src/core/localiser.hpp"
2020
#include "quest/src/core/bitwise.hpp"
2121
#include "quest/src/core/constants.hpp"
22+
#include "quest/src/core/paulilogic.hpp"
2223

2324
#include <vector>
2425

@@ -30,12 +31,6 @@ using std::vector;
3031
* PRVIATE UTILITIES
3132
*/
3233

33-
extern int paulis_getSignOfPauliStrConj(PauliStr str);
34-
35-
extern bool paulis_isIdentity(PauliStr str);
36-
extern PauliStr paulis_getShiftedPauliStr(PauliStr str, int pauliShift);
37-
extern PauliStr paulis_getKetAndBraPauliStr(PauliStr str, Qureg qureg);
38-
3934
// T can be CompMatr, CompMatr1, CompMatr2, DiagMatr, DiagMatr1, DiagMatr2
4035
template <class T>
4136
void validateAndApplyAnyCtrlAnyTargUnitaryMatrix(Qureg qureg, int* ctrls, int* states, int numCtrls, int* targs, int numTargs, T matr, const char* caller) {

0 commit comments

Comments
 (0)