32#if !defined(QUEST_DISABLE_DEPRECATION_WARNINGS) || QUEST_DISABLE_DEPRECATION_WARNINGS == 0
36Deprecated functions have been included in compilation. The QuEST v3 API will be attemptedly \
37automatically substituted for the v4 API, although some uses of the old API will still fail to \
38compile. For example, access to v3 struct fields (e.g. 'ComplexMatrixN.real[0][0]') must be \
39manually replaced with v4 struct fields (e.g. 'CompMatr.cpuElems[0][0]'), though new v4 functions \
40make struct field access mostly redundant (e.g. via 'setCompMatr()'). Even when successfully \
41compiling, use of the deprecated v3 functions is dangerous; these are not unit-tested, and the \
42auto-porting to v4 may introduce new bugs. As such, you should only use this facility to help \
43refactor your code to v4, and should absolutely not continue to use the old v3 API for simulation."
63#define _EFFECT_PRAGMA(cmd) _Pragma(#cmd)
65#if QUEST_DISABLE_DEPRECATION_WARNINGS
67 #define _WARN_TYPE_RENAMED(oldname, newname)
69 #define _WARN_FUNC_RENAMED(oldname, newname)
71 #define _WARN_FUNC_NOW_HAS_FEWER_ARGS(oldsig, newsig)
73 #define _WARN_GENERAL_MSG(msg)
77 #define _WARN_TYPE_RENAMED(oldname, newname) \
78 _EFFECT_PRAGMA(message( \
79 "The QuEST type '" oldname "' is deprecated. " \
80 "Please instead use '" newname "' which has been automatically invoked."))
82 #define _WARN_FUNC_RENAMED(oldname, newname) \
83 _EFFECT_PRAGMA(message( \
84 "The QuEST function '" oldname "' is deprecated. " \
85 "Please instead use '" newname "' which has been automatically invoked."))
87 #define _WARN_FUNC_NOW_HAS_FEWER_ARGS(oldsig, newsig) \
88 _EFFECT_PRAGMA(message( \
89 "The QuEST function '" oldsig "' now accepts fewer arguments, and has " \
90 "new signature '" newsig "' which has been automatically invoked."))
92 #define _WARN_GENERAL_MSG(msg) \
93 _EFFECT_PRAGMA(message(msg))
106#define _WARN_UNSUPPRESSABLE_MSG(msg) \
107 _EFFECT_PRAGMA(message(msg))
126#define _FORCE_COMPILATION_TO_FAIL() \
127 _FORCING_UNKNOWN_SYMBOL_ERROR_TO_STOP_COMPILATION
130#define _ERROR_GENERAL_MSG(msg) \
131 _EFFECT_PRAGMA(message(msg)) \
132 _FORCE_COMPILATION_TO_FAIL()
135#define _ERROR_FUNC_RENAMED(oldname, newfunc) \
136 _ERROR_GENERAL_MSG( \
137 "The QuEST function '" oldname "' is deprecated. " \
138 "Please instead use '" newfunc "' which could not here be automatically invoked.") \
139 _FORCE_COMPILATION_TO_FAIL()
142#define _ERROR_FUNC_REMOVED(oldname) \
143 _ERROR_GENERAL_MSG( \
144 "The QuEST function '" oldname "' is deprecated, and has no replacement.") \
145 _FORCE_COMPILATION_TO_FAIL()
148#define _ERROR_PREPROCESSOR_RENAMED(oldname, newname) \
149 _ERROR_GENERAL_MSG( \
150 "The QuEST preprocessor '" oldname "' is deprecated. " \
151 "Please instead use '" newname "' which could not here be automatically invoked.") \
152 _FORCE_COMPILATION_TO_FAIL()
155#define _ERROR_PREPROCESSOR_REMOVED(oldname) \
156 _ERROR_GENERAL_MSG( \
157 "The QuEST preprocessor '" oldname "' is deprecated, and has no replacement.") \
158 _FORCE_COMPILATION_TO_FAIL()
161#define _ERROR_PHASE_FUNC_REMOVED(oldname) \
162 _ERROR_GENERAL_MSG( \
163 "The QuEST function '" oldname "' is deprecated. Please instead create a 'DiagMatr' or 'FullStateDiagMatr', initialise it " \
164 "via functions like 'setDiagMatrFromMultiVarFunc()' or 'setDiagMatrFromMultiDimLists()', and apply it via 'applyDiagMatr() or " \
165 "'applyFullStateDiagMatr()'. This procedure cannot be automatically performed here." ) \
166 _FORCE_COMPILATION_TO_FAIL()
178#define REAL_STRING_FORMAT \
179 _ERROR_PREPROCESSOR_RENAMED("REAL_STRING_FORMAT", "QREAL_FORMAT_SPECIFIER")
181#define REAL_QASM_FORMAT \
182 _ERROR_PREPROCESSOR_REMOVED("REAL_QASM_FORMAT")
184#define MPI_QuEST_REAL \
185 _ERROR_PREPROCESSOR_REMOVED("MPI_QuEST_REAL")
187#define MPI_MAX_AMPS_IN_MSG \
188 _ERROR_PREPROCESSOR_REMOVED("MPI_MAX_AMPS_IN_MSG")
191 _ERROR_PREPROCESSOR_REMOVED("REAL_EPS")
193#define REAL_SPECIFIER \
194 _ERROR_PREPROCESSOR_REMOVED("REAL_SPECIFIER")
196#define absReal(...) \
197 _ERROR_PREPROCESSOR_REMOVED("absReal()")
237#define ComplexMatrix2 \
239 "The QuEST type 'ComplexMatrix2' is deprecated in favour of 'CompMatr1' which has a different memory layout. We will attempt to " \
240 "automatically replace your 'ComplexMatrix2' with a 'CompMatr1' instance in subsequently invoked functions.") \
243#define ComplexMatrix4 \
245 "The QuEST type 'ComplexMatrix4' is deprecated in favour of 'CompMatr2' which has a different memory layout. We will attempt to " \
246 "automatically replace your 'ComplexMatrix4' with a 'CompMatr2' instance in subsequently invoked functions.") \
253#define _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(m) \
258 {getQcomp(m.real[0][0], m.imag[0][0]), getQcomp(m.real[0][1], m.imag[0][1])}, \
259 {getQcomp(m.real[1][0], m.imag[1][0]), getQcomp(m.real[1][1], m.imag[1][1])}}}
261#define _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(m) \
266 {getQcomp(m.real[0][0], m.imag[0][0]), getQcomp(m.real[0][1], m.imag[0][1]), getQcomp(m.real[0][2], m.imag[0][2]), getQcomp(m.real[0][3], m.imag[0][3])}, \
267 {getQcomp(m.real[1][0], m.imag[1][0]), getQcomp(m.real[1][1], m.imag[1][1]), getQcomp(m.real[1][2], m.imag[1][2]), getQcomp(m.real[1][3], m.imag[1][3])}, \
268 {getQcomp(m.real[2][0], m.imag[2][0]), getQcomp(m.real[2][1], m.imag[2][1]), getQcomp(m.real[2][2], m.imag[2][2]), getQcomp(m.real[2][3], m.imag[2][3])}, \
269 {getQcomp(m.real[3][0], m.imag[3][0]), getQcomp(m.real[3][1], m.imag[3][1]), getQcomp(m.real[3][2], m.imag[3][2]), getQcomp(m.real[3][3], m.imag[3][3])}}}
277enum pauliOpType {PAULI_I=0, PAULI_X=1, PAULI_Y=2, PAULI_Z=3};
279#define _WARN_DEPRECATED_PAULI_ENUM(enum, intcode, char1, char2, char3) \
281 "The QuEST enum '" #enum "' is deprecated, although has been defined in the deprecation header for convenience. " \
282 "Please instead use integer " #intcode " or characters '" #char1 "', '" #char2 "', '" #char3 "'.") \
284typedef enum pauliOpType _NoWarnPauliOpType;
287 _WARN_GENERAL_MSG("The QuEST type 'enum pauliOpType' is deprecated, although it is still defined in the deprecation header for convenience.") \
291 _WARN_DEPRECATED_PAULI_ENUM(PAULI_I, 0, I, i, 0) \
295 _WARN_DEPRECATED_PAULI_ENUM(PAULI_X, 1, X, x, 1) \
299 _WARN_DEPRECATED_PAULI_ENUM(PAULI_Y, 2, Y, y, 2) \
303 _WARN_DEPRECATED_PAULI_ENUM(PAULI_Z, 3, Z, z, 3) \
313#define _GET_QCOMP_FROM_COMPLEX_STRUCT(x) \
314 getQcomp((x).real, (x).imag)
318 "The QuEST type 'Complex' is deprecated, and replaced with complex scalar primitive 'qcomp' which can be instantiated " \
319 "with literals and modified with overloaded arithmetic operators. References to 'Complex' will be automatically replaced " \
320 "with an anonymous inline struct, though the QuEST will only ever return 'qcomp' instances.") \
321 struct { qreal real; qreal imag; }
324#define ComplexMatrixN \
325 _WARN_TYPE_RENAMED("ComplexMatrixN", "CompMatr") \
330 _WARN_TYPE_RENAMED("PauliHamil", "PauliStrSum") \
335 _WARN_TYPE_RENAMED("DiagonalOp", "FullStateDiagMatr") \
339#define SubDiagonalOp \
340 _WARN_TYPE_RENAMED("SubDiagonalOp", "DiagMatr") \
345 _WARN_GENERAL_MSG("The QuEST type 'Vector' is deprecated, and will be automatically replaced with an inline struct.") \
346 struct { qreal x; qreal y; qreal z; }
350 _ERROR_GENERAL_MSG( \
351 "The QuEST type 'enum phaseFunc' is deprecated. The functions which replace the 'applyPhaseFunc' family, such as " \
352 "'setDiagMatrFromMultiVarFunc()' and 'setDiagMatrFromMultiDimArray()', do not use pre-defined enums." )
355 _ERROR_GENERAL_MSG( \
356 "The QuEST type 'enum bitEncoding' is deprecated. The new v4 function 'setDiagMatrFromMultiVarFunc()' instead accepts " \
357 "an int flag to indicate whether (1) or not (0) to interpret the basis state bits under two's complement singed encoding." )
366#define toComplex(...) \
367 _ERROR_FUNC_REMOVED("toComplex()")
369#define fromComplex(...) \
370 _ERROR_FUNC_REMOVED("fromComplex()")
373#define applyMultiControlledMatrixN(...) \
374 _ERROR_FUNC_REMOVED("applyMultiControlledMatrixN()")
377#define syncQuESTSuccess(...) \
378 _ERROR_FUNC_REMOVED("syncQuESTSuccess()")
381#define startRecordingQASM(...) \
382 _ERROR_FUNC_REMOVED("startRecordingQASM()")
384#define stopRecordingQASM(...) \
385 _ERROR_FUNC_REMOVED("stopRecordingQASM()")
387#define clearRecordedQASM(...) \
388 _ERROR_FUNC_REMOVED("clearRecordedQASM()")
390#define printRecordedQASM(...) \
391 _ERROR_FUNC_REMOVED("printRecordedQASM()")
393#define writeRecordedQASMToFile(...) \
394 _ERROR_FUNC_REMOVED("writeRecordedQASMToFile()")
397#define bindArraysToStackComplexMatrixN(...) \
398 _ERROR_FUNC_REMOVED("bindArraysToStackComplexMatrixN()")
400#define getStaticComplexMatrixN(...) \
401 _ERROR_FUNC_REMOVED("getStaticComplexMatrixN()")
404#define reportState(qureg) \
405 _ERROR_FUNC_REMOVED("reportState(qureg)", "reportQuregToFile(qureg, char* fn)")
414#define initComplexMatrixN(...) \
415 _ERROR_FUNC_RENAMED("initComplexMatrixN(ComplexMatrixN, qreal[][], qreal[][])", "setCompMatr(CompMatr, qcomp[][])")
418#define createPauliHamil(...) \
419 _ERROR_FUNC_RENAMED( \
420 "createPauliHamil(int numQubits, int numTerms)", \
421 "createPauliStrSum(PauliStr* strings, qcomp* coeffs, qindex numTerms)")
423#define initPauliHamil(...) \
424 _ERROR_FUNC_RENAMED( \
425 "initPauliHamil(PauliHamil hamil, qreal* coeffs, enum pauliOpType* codes)", \
426 "createPauliStrSum(PauliStr* strings, qcomp* coeffs, qindex numTerms)")
429#define initDiagonalOp(...) \
430 _ERROR_FUNC_RENAMED( \
431 "initDiagonalOp(DiagonalOp obj, qreal* allElemsRe, qreal* allElemsIm)", \
432 "setFullStateDiagMatr(FullStateDiagMatr obj, qindex startInd, qcomp* someElems, qindex numElems)")
434#define setDiagonalOpElems(...) \
435 _ERROR_FUNC_RENAMED( \
436 "setDiagonalOpElems(DiagonalOp, qindex, qreal*, qreal*, qindex)", \
437 "setFullStateDiagMatr(FullStateDiagMatr, qindex, qcomp*, qindex)")
440#define initStateFromAmps(...) \
441 _ERROR_FUNC_RENAMED("initStateFromAmps(Qureg, qreal*, qreal*)", "initArbitraryPureState(Qureg, qcomp*)")
443#define setAmps(...) \
444 _ERROR_FUNC_RENAMED("setAmps(Qureg, qindex, qreal*, qreal*, qindex)", "setQuregAmps(Qureg, qindex, qcomp*, qindex)")
446#define setDensityAmps(...) \
447 _ERROR_FUNC_RENAMED( \
448 "setDensityAmps(Qureg, qindex startRow, qindex startCol, qreal* flatAmpsRe, qreal* flatAmpsIm, qindex numFlatAmps)", \
449 "setDensityQuregAmps(Qureg, qindex startRow, qindex startCol, qcomp** amps, qindex numRows, qindex numCols)")
452#define applyPhaseFunc(...) \
453 _ERROR_PHASE_FUNC_REMOVED("applyPhaseFunc")
455#define applyPhaseFuncOverrides(...) \
456 _ERROR_PHASE_FUNC_REMOVED("applyPhaseFuncOverrides")
458#define applyMultiVarPhaseFunc(...) \
459 _ERROR_PHASE_FUNC_REMOVED("applyMultiVarPhaseFunc")
461#define applyMultiVarPhaseFuncOverrides(...) \
462 _ERROR_PHASE_FUNC_REMOVED("applyMultiVarPhaseFuncOverrides")
464#define applyNamedPhaseFunc(...) \
465 _ERROR_PHASE_FUNC_REMOVED("applyNamedPhaseFunc")
467#define applyNamedPhaseFuncOverrides(...) \
468 _ERROR_PHASE_FUNC_REMOVED("applyNamedPhaseFuncOverrides")
470#define applyParamNamedPhaseFunc(...) \
471 _ERROR_PHASE_FUNC_REMOVED("applyParamNamedPhaseFunc")
473#define applyParamNamedPhaseFuncOverrides(...) \
474 _ERROR_PHASE_FUNC_REMOVED("applyParamNamedPhaseFuncOverrides")
489#define _GET_MACRO_WITH_1_OR_2_ARGS(_1, _2, macroname, ...) macroname
491#define _CALL_MACRO_WITH_1_OR_2_ARGS(prefix, ...) \
492 _GET_MACRO_WITH_1_OR_2_ARGS(__VA_ARGS__, prefix##_2, prefix##_1)(__VA_ARGS__)
495#define _CREATE_QUREG_1(n) \
498#define _CREATE_QUREG_2(n, env) \
499 _WARN_FUNC_NOW_HAS_FEWER_ARGS("createQureg(int, QuESTEnv)", "createQureg(int)") \
502#define createQureg(...) \
503 _CALL_MACRO_WITH_1_OR_2_ARGS(_CREATE_QUREG, __VA_ARGS__)
507#define _CREATE_DENSITY_QUREG_1(n) \
508 createDensityQureg(n)
510#define _CREATE_DENSITY_QUREG_2(n, env) \
511 _WARN_FUNC_NOW_HAS_FEWER_ARGS("createDensityQureg(int, QuESTEnv)", "createDensityQureg(int)") \
512 _CREATE_DENSITY_QUREG_1(n)
514#define createDensityQureg(...) \
515 _CALL_MACRO_WITH_1_OR_2_ARGS(_CREATE_DENSITY_QUREG, __VA_ARGS__)
519#define _CREATE_CLONE_QUREG_1(n) \
522#define _CREATE_CLONE_QUREG_2(n, env) \
523 _WARN_FUNC_NOW_HAS_FEWER_ARGS("createCloneQureg(Qureg, QuESTEnv)", "createCloneQureg(Qureg)") \
524 _CREATE_CLONE_QUREG_1(n)
526#define createCloneQureg(...) \
527 _CALL_MACRO_WITH_1_OR_2_ARGS(_CREATE_CLONE_QUREG, __VA_ARGS__)
531#define _DESTROY_QUREG_1(qureg) \
534#define _DESTROY_QUREG_2(n, env) \
535 _WARN_FUNC_NOW_HAS_FEWER_ARGS("destroyQureg(Qureg, QuESTEnv)", "destroyQureg(Qureg)") \
538#define destroyQureg(...) \
539 _CALL_MACRO_WITH_1_OR_2_ARGS(_DESTROY_QUREG, __VA_ARGS__)
543#define _GET_ENVIRONMENT_STRING_1(str) \
544 getQuESTEnvironmentString(str)
546#define _GET_ENVIRONMENT_STRING_2(str) \
547 _WARN_FUNC_NOW_HAS_FEWER_ARGS("getQuESTEnvironmentString(QuESTEnv, char[200])", "getQuESTEnvironmentString(char[200])") \
548 _GET_ENVIRONMENT_STRING_1(str)
550#define getQuESTEnvironmentString(...) \
551 _CALL_MACRO_WITH_1_OR_2_ARGS(_GET_ENVIRONMENT_STRING, __VA_ARGS__)
562#define _GET_MACRO_WITH_1_OR_3_ARGS(_1, _2, _3, macroname, ...) macroname
564#define _CALL_MACRO_WITH_1_OR_3_ARGS(prefix, ...) \
565 _GET_MACRO_WITH_1_OR_3_ARGS(__VA_ARGS__, prefix##_3, prefix##_2, prefix##_1)(__VA_ARGS__)
568#define _GET_QUEST_SEEDS_1(out) \
571#define _GET_QUEST_SEEDS_3(env, out, numOut) \
572 _WARN_FUNC_NOW_HAS_FEWER_ARGS( \
573 "getQuESTSeeds(QuESTEnv env, unsigned long int* out, int numOut)", \
574 "getQuESTSeeds(unsigned* out)") \
575 _GET_QUEST_SEEDS_1(out)
577#define getQuESTSeeds(...) \
578 _CALL_MACRO_WITH_1_OR_3_ARGS(_GET_QUEST_SEEDS, __VA_ARGS__)
590#define _COUNT_ZERO_OR_ONE_ARGS(...) _COUNT_ZERO_OR_ONE_ARGS_INNER(__VA_ARGS__, 1, 0,)
591#define _COUNT_ZERO_OR_ONE_ARGS_INNER(_0, _1, X, ...) X
592#define _CONCAT_SYMBOLS(A, B) _CONCAT_SYMBOLS_INNER(A, B)
593#define _CONCAT_SYMBOLS_INNER(A, B) A ## B
594#define _COMMA_SEPERATOR ,
598#define _SYNC_QUEST_ENV_0(_) \
601#define _SYNC_QUEST_ENV_1(env) \
602 _WARN_FUNC_NOW_HAS_FEWER_ARGS("syncQuESTEnv(QuESTEnv)", "syncQuESTEnv()") \
605#define syncQuESTEnv(X) \
606 _CONCAT_SYMBOLS(_SYNC_QUEST_ENV_, _COUNT_ZERO_OR_ONE_ARGS(_COMMA_SEPERATOR ## X))(X)
610#define _REPORT_QUEST_ENV_0(_) \
613#define _REPORT_QUEST_ENV_1(env) \
614 _WARN_FUNC_NOW_HAS_FEWER_ARGS("reportQuESTEnv(QuESTEnv)", "reportQuESTEnv()") \
617#define reportQuESTEnv(X) \
618 _CONCAT_SYMBOLS(_REPORT_QUEST_ENV_, _COUNT_ZERO_OR_ONE_ARGS(_COMMA_SEPERATOR ## X))(X)
634#define _MIX_KRAUS_MAP_INNER(qureg, ops, numOps, targs, numTargs) \
635 int dim = 1 << numTargs; \
636 qcomp*** ptrs = (qcomp***) malloc(numOps * sizeof *ptrs); \
637 for (int n=0; n<numOps; n++) { \
638 ptrs[n] = (qcomp**) malloc(dim * sizeof **ptrs); \
639 for (int r=0; r<dim; r++) { \
640 ptrs[n][r] = (qcomp*) malloc(dim * sizeof ***ptrs); \
641 for (int c=0; c<dim; c++) \
642 ptrs[n][r][c] = getQcomp(ops[n].real[r][c], ops[n].imag[r][c]); \
646 KrausMap map = createKrausMap(numTargs, numOps); \
647 setKrausMap(map, ptrs); \
648 (mixKrausMap)(qureg, (targs), numTargs, map); \
649 destroyKrausMap(map); \
651 for (int n=0; n<numOps; n++) { \
652 for (int r=0; r<dim; r++) \
659 _MIX_KRAUS_MAP_INNER(qureg, ops, numOps, &targ, 1);
662#define mixKrausMap(...) \
663 _WARN_UNSUPPRESSABLE_MSG( \
664 "The QuEST function 'mixKrausMap()' has changed from v3 to v4. The old signature was " \
665 "'mixKrausMap(Qureg, int targ, ComplexMatrix2* ops, int numOps)' while the new signature is " \
666 "'mixKrausMap(Qureg, int* targs, int numTargs, KrausMap)'. Because the function name and its " \
667 "number of arguments have not changed, we are unable to automatically map a v3 invocation to " \
668 "the v4 API, nor can we detect when the v4 API has been used in order to avoid this message. " \
669 "Hence, this warning will either be obsolete (because you have already migrated to the v4 API), " \
670 "or precedes a compilation failure below due to continued use of the v3 API. To continue using " \
671 "the v3 API, replace 'mixKrausMap' with 'v3_mixKrausMap' which will issue no warning nor error. " \
672 "This warning cannot be suppressed.") \
673 mixKrausMap(__VA_ARGS__)
682 _MIX_KRAUS_MAP_INNER(qureg, ops, numOps, &targ, 1);
686#define mixNonTPKrausMap(...) \
687 _WARN_FUNC_RENAMED( \
688 "mixNonTPKrausMap(Qureg, int targ, ComplexMatrix2* ops, int numOps)", \
689 "mixUnnormalizedKrausMap(Qureg, int* targs, int numTargs, KrausMap)") \
690 _mixNonTPKrausMap(__VA_ARGS__)
694static inline void _mixTwoQubitKrausMap(
Qureg qureg,
int targ1,
int targ2,
_NoWarnComplexMatrix4 *ops,
int numOps,
int isNonCPTP) {
695 int targs[] = {targ1, targ2};
698 _MIX_KRAUS_MAP_INNER(qureg, ops, numOps, targs, 2);
702#define mixTwoQubitKrausMap(...) \
703 _WARN_FUNC_RENAMED( \
704 "mixTwoQubitKrausMap(Qureg, int targ1, int targ2, ComplexMatrix4* ops, int numOps)", \
705 "mixKrausMap(Qureg, int* targs, int numTargs, KrausMap)") \
706 _mixTwoQubitKrausMap(__VA_ARGS__, 0)
708#define mixNonTPTwoQubitKrausMap(...) \
709 _WARN_FUNC_RENAMED( \
710 "mixNonTPTwoQubitKrausMap(Qureg, int targ1, int targ2, ComplexMatrix4* ops, int numOps)", \
711 "mixUnnormalizedKrausMap(Qureg, int* targs, int numTargs, KrausMap)") \
712 _mixTwoQubitKrausMap(__VA_ARGS__, 1)
716static inline void _mixMultiQubitKrausMap(
Qureg qureg,
int* targs,
int numTargs,
CompMatr *ops,
int numOps,
int isNonCPTP) {
718 qcomp*** ptrs = (qcomp***) malloc(numOps *
sizeof *ptrs);
719 for (
int n=0; n<numOps; n++)
720 ptrs[n] = ops[n].cpuElems;
733#define mixMultiQubitKrausMap(...) \
734 _WARN_FUNC_RENAMED( \
735 "mixMultiQubitKrausMap(Qureg, int* targs, int numTargs, ComplexMatrixN* ops, int numOps)", \
736 "mixKrausMap(Qureg, int* targs, int numTargs, KrausMap)") \
737 _mixMultiQubitKrausMap(__VA_ARGS__, 0)
739#define mixNonTPMultiQubitKrausMap(...) \
740 _WARN_FUNC_RENAMED( \
741 "mixNonTPMultiQubitKrausMap(Qureg, int* targs, int numTargs, ComplexMatrixN* ops, int numOps)", \
742 "mixUnnormalisedKrausMap(Qureg, int* targs, int numTargs, KrausMap)") \
743 _mixMultiQubitKrausMap(__VA_ARGS__, 1)
758static inline QuESTEnv _createQuESTEnv() {
763#define createQuESTEnv() \
765 "The QuEST function 'createQuESTEnv()' is deprecated in favour of " \
766 "'initQuESTEnv()' which returns nothing, and 'getQuESTEnv()' which " \
767 "returns an immutable copy of the internally-managed environment. " \
768 "This second function is for convenience; the API no longer needs " \
769 "to receive the environment instance as a parameter. The above " \
770 "mentioned functions have been automatically invoked.") \
773#define destroyQuESTEnv(...) \
774 _WARN_FUNC_RENAMED("destroyQuESTEnv(QuESTEnv)", "finalizeQuESTEnv()") \
779#define createComplexMatrixN(...) \
780 _WARN_FUNC_RENAMED("createComplexMatrixN()", "createCompMatr()") \
781 createCompMatr(__VA_ARGS__)
783#define destroyComplexMatrixN(...) \
784 _WARN_FUNC_RENAMED("destroyComplexMatrixN()", "destroyCompMatr()") \
785 destroyCompMatr(__VA_ARGS__)
789#define destroyPauliHamil(...) \
790 _WARN_FUNC_RENAMED("destroyPauliHamil()", "destroyPauliStrSum()") \
791 destroyPauliStrSum(__VA_ARGS__)
793#define createPauliHamilFromFile(...) \
794 _WARN_FUNC_RENAMED("createPauliHamilFromFile()", "createPauliStrSumFromReversedFile()") \
795 createPauliStrSumFromReversedFile(__VA_ARGS__)
797#define reportPauliHamil(...) \
798 _WARN_FUNC_RENAMED("reportPauliHamil()", "reportPauliStrSum()") \
799 reportPauliStrSum(__VA_ARGS__)
803#define createDiagonalOp(numQb, env) \
804 _WARN_FUNC_RENAMED("createDiagonalOp(int, QuESTEnv)", "createFullStateDiagMatr(int)") \
805 createFullStateDiagMatr(numQb)
807#define destroyDiagonalOp(diagOp, env) \
808 _WARN_FUNC_RENAMED("destroyDiagonalOp(DiagonalOp, QuESTEnv)", "destroyFullStateDiagMatr(FullStateDiagMatr)") \
809 destroyFullStateDiagMatr(diagOp)
811#define syncDiagonalOp(...) \
812 _WARN_FUNC_RENAMED("syncDiagonalOp()", "syncFullStateDiagMatr()") \
813 syncFullStateDiagMatr(__VA_ARGS__)
815#define initDiagonalOpFromPauliHamil(...) \
816 _WARN_FUNC_RENAMED("initDiagonalOpFromPauliHamil()", "setFullStateDiagMatrFromPauliStrSum()") \
817 setFullStateDiagMatrFromPauliStrSum(__VA_ARGS__)
819#define createDiagonalOpFromPauliHamilFile(fn, env) \
820 _WARN_FUNC_RENAMED("createDiagonalOpFromPauliHamilFile(char*, QuESTEnv)", "createFullStateDiagMatrFromPauliStrSumFile(char*)") \
821 createFullStateDiagMatrFromPauliStrSumFile(fn)
823#define applyDiagonalOp(...) \
824 _WARN_FUNC_RENAMED("applyDiagonalOp()", "leftapplyFullStateDiagMatr()") \
825 leftapplyFullStateDiagMatr(__VA_ARGS__)
827#define calcExpecDiagonalOp(...) \
828 _WARN_FUNC_RENAMED("calcExpecDiagonalOp()", "calcExpecNonHermitianFullStateDiagMatr()") \
829 calcExpecNonHermitianFullStateDiagMatr(__VA_ARGS__)
833#define createSubDiagonalOp(...) \
834 _WARN_FUNC_RENAMED("createSubDiagonalOp()", "createDiagMatr()") \
835 createDiagMatr(__VA_ARGS__)
837#define destroySubDiagonalOp(...) \
838 _WARN_FUNC_RENAMED("destroySubDiagonalOp()", "destroyDiagMatr()") \
839 destroyDiagMatr(__VA_ARGS__)
841#define diagonalUnitary(...) \
842 _WARN_FUNC_RENAMED("diagonalUnitary()", "applyDiagMatr()") \
843 applyDiagMatr(__VA_ARGS__)
845#define applySubDiagonalOp(...) \
846 _WARN_FUNC_RENAMED("applySubDiagonalOp()", "leftapplyDiagMatr()") \
847 leftapplyDiagMatr(__VA_ARGS__)
849static inline void _applyGateSubDiagonalOp(
Qureg qureg,
int* targets,
int numTargets,
DiagMatr op) {
855#define applyGateSubDiagonalOp(...) \
857 "The QuEST function 'applyGateSubDiagonalOp()' is deprecated. To achieve the same thing, disable " \
858 "numerical validation via 'setQuESTValidationEpsilon(0)' before calling 'applyDiagMatr()'. You can " \
859 "save the existing epsilon via 'getQuESTValidationEpsilon()' to thereafter restore. This procedure " \
860 "has been performed here automatically.") \
861 _applyGateSubDiagonalOp(__VA_ARGS__)
865#define reportStateToScreen(qureg, env, rank) \
866 _WARN_FUNC_RENAMED("reportStateToScreen(qureg, env, rank)", "reportQureg(qureg)") \
871#define getNumQubits(qureg) \
872 _WARN_FUNC_RENAMED("getNumQubits(qureg)", "qureg.numQubits") \
875 #define getNumAmps(qureg) \
876 _WARN_FUNC_RENAMED("getNumAmps(qureg)", "qureg.numAmps") \
881#define setQuregToPauliHamil(...) \
882 _WARN_FUNC_RENAMED("setQuregToPauliHamil()", "setQuregToPauliStrSum()") \
883 setQuregToPauliStrSum(__VA_ARGS__)
885#define cloneQureg(...) \
886 _WARN_FUNC_RENAMED("cloneQureg()", "setQuregToClone()") \
887 setQuregToClone(__VA_ARGS__)
891static inline void _setWeightedQureg(qcomp f1,
Qureg q1, qcomp f2,
Qureg q2, qcomp fOut,
Qureg qOut) {
892 qcomp coeffs[] = {fOut, f1, f2};
893 Qureg quregs[] = {qOut, q1, q2};
897#define setWeightedQureg(f1, q1, f2, q2, fOut, qOut) \
899 "The QuEST function 'setWeightedQureg(f1,q1, f2,q2, fOut,qOut)' is deprecated, and replaced with " \
900 "'setQuregToWeightedSum(qOut, {f1,f2,...}, {q1,q2,..}, len)' which has been automatically invoked. " \
901 "Beware that the order of the arguments has changed, so that the first supplied Qureg is modified." ) \
903 _GET_QCOMP_FROM_COMPLEX_STRUCT(f1) ,q1, \
904 _GET_QCOMP_FROM_COMPLEX_STRUCT(f2) ,q2, \
905 _GET_QCOMP_FROM_COMPLEX_STRUCT(fOut), qOut)
909#define phaseShift(...) \
910 _WARN_FUNC_RENAMED("phaseShift()", "applyPhaseShift()") \
911 applyPhaseShift(__VA_ARGS__)
913#define controlledPhaseShift(...) \
914 _WARN_FUNC_RENAMED("controlledPhaseShift()", "applyTwoQubitPhaseShift()") \
915 applyTwoQubitPhaseShift(__VA_ARGS__)
917#define multiControlledPhaseShift(...) \
918 _WARN_FUNC_RENAMED("multiControlledPhaseShift()", "applyMultiQubitPhaseShift()") \
919 applyMultiQubitPhaseShift(__VA_ARGS__)
921#define controlledPhaseFlip(...) \
922 _WARN_FUNC_RENAMED("controlledPhaseFlip()", "applyTwoQubitPhaseFlip()") \
923 applyTwoQubitPhaseFlip(__VA_ARGS__)
925#define multiControlledPhaseFlip(...) \
926 _WARN_FUNC_RENAMED("multiControlledPhaseFlip()", "applyMultiQubitPhaseFlip()") \
927 applyMultiQubitPhaseFlip(__VA_ARGS__)
932 _WARN_FUNC_RENAMED("sGate()", "applyS()") \
936 _WARN_FUNC_RENAMED("tGate()", "applyT()") \
941#define copyStateToGPU(...) \
942 _WARN_FUNC_RENAMED("copyStateToGPU()", "syncQuregToGpu()") \
943 syncQuregToGpu(__VA_ARGS__)
945#define copyStateFromGPU(...) \
946 _WARN_FUNC_RENAMED("copyStateFromGPU()", "syncQuregFromGpu()") \
947 syncQuregFromGpu(__VA_ARGS__)
949#define copySubstateToGPU(...) \
950 _WARN_FUNC_RENAMED("copySubstateToGPU()", "syncSubQuregToGpu()") \
951 syncSubQuregToGpu(__VA_ARGS__)
953#define copySubstateFromGPU(...) \
954 _WARN_FUNC_RENAMED("copySubstateFromGPU()", "syncSubQuregFromGpu()") \
955 syncSubQuregFromGpu(__VA_ARGS__)
960 _WARN_FUNC_RENAMED("getAmp()", "getQuregAmp()") \
961 getQuregAmp(__VA_ARGS__)
963#define getDensityAmp(...) \
964 _WARN_FUNC_RENAMED("getDensityAmp()", "getDensityQuregAmp()") \
965 getDensityQuregAmp(__VA_ARGS__)
967#define getRealAmp(...) \
968 _WARN_FUNC_RENAMED("getRealAmp()", "real(getQuregAmp())") \
969 real(getQuregAmp(__VA_ARGS__))
971#define getImagAmp(...) \
972 _WARN_FUNC_RENAMED("getImagAmp()", "imag(getImagAmp())") \
973 imag(getQuregAmp(__VA_ARGS__))
975#define getProbAmp(...) \
976 _WARN_FUNC_RENAMED("getProbAmp()", "calcProbOfBasisState()") \
977 calcProbOfBasisState(__VA_ARGS__)
979#define calcProbOfOutcome(...) \
980 _WARN_FUNC_RENAMED("calcProbOfOutcome()", "calcProbOfQubitOutcome()") \
981 calcProbOfQubitOutcome(__VA_ARGS__)
983#define calcProbOfAllOutcomes(...) \
984 _WARN_FUNC_RENAMED("calcProbOfAllOutcomes()", "calcProbsOfAllMultiQubitOutcomes()") \
985 calcProbsOfAllMultiQubitOutcomes(__VA_ARGS__)
987#define calcDensityInnerProduct(...) \
988 _WARN_FUNC_RENAMED("calcDensityInnerProduct()", "calcInnerProduct()") \
989 calcInnerProduct(__VA_ARGS__)
991#define calcHilbertSchmidtDistance(...) \
992 _WARN_FUNC_RENAMED("calcHilbertSchmidtDistance()", "calcDistance()") \
993 calcDistance(__VA_ARGS__)
995#define calcExpecPauliHamil(qureg, hamil, workspace) \
996 _WARN_FUNC_RENAMED("calcExpecPauliHamil(Qureg, PauliHamil, Qureg)", "calcExpecPauliStrSum(Qureg, PauliStrSum)") \
997 calcExpecPauliStrSum(qureg, hamil)
1001static inline qreal _calcExpecPauliStr(
Qureg qureg,
int* targs, _NoWarnPauliOpType* enums,
int numTargs) {
1004 for (
int i=0; i<numTargs && i<100; i++)
1005 codes[i] = enums[i];
1010#define calcExpecPauliProd(qureg, targs, paulis, numTargs, workspace) \
1011 _WARN_FUNC_RENAMED( \
1012 "calcExpecPauliProd(qureg, targs, paulis, numTargs, workspace)", \
1013 "calcExpecPauliStr(qureg, getPauliStr(paulis, targs, numTargs))") \
1014 _calcExpecPauliStr(qureg, targs, paulis, numTargs)
1018static inline PauliStrSum _createPauliStrSumFromCodes(
int numQubits, _NoWarnPauliOpType* allPauliCodes, qreal* termCoeffs,
int numTerms) {
1020 int* targs = (
int*) malloc(numQubits *
sizeof *targs);
1021 for (
int i=0; i<numQubits; i++)
1025 for (
int i=0; i<numTerms; i++) {
1028 for (
int j=0; j<numQubits && j<100; j++)
1029 codes[j] = (
int) allPauliCodes[i*numQubits+j];
1031 strings[i] =
getPauliStr(codes, targs, numQubits);
1034 qcomp* coeffs = (qcomp*) malloc(numTerms *
sizeof *coeffs);
1035 for (
int i=0; i<numTerms; i++)
1036 coeffs[i] = termCoeffs[i];
1046static inline qreal _calcExpecPauliSum(
Qureg qureg, _NoWarnPauliOpType* allPauliCodes, qreal* termCoeffs,
int numTerms) {
1047 PauliStrSum sum = _createPauliStrSumFromCodes(qureg.numQubits, allPauliCodes, termCoeffs, numTerms);
1053#define calcExpecPauliSum(qureg, paulis, coeffs, numTerms, workspace) \
1054 _WARN_FUNC_RENAMED("calcExpecPauliSum(Qureg, ...)", "calcExpecPauliStrSum(Qureg, PauliStrSum)") \
1055 _calcExpecPauliSum(qureg, paulis, coeffs, numTerms)
1057static inline void _applyPauliSum(
Qureg inQureg, _NoWarnPauliOpType* allPauliCodes, qreal* termCoeffs,
int numSumTerms,
Qureg outQureg) {
1058 PauliStrSum sum = _createPauliStrSumFromCodes(inQureg.numQubits, allPauliCodes, termCoeffs, numSumTerms);
1064#define applyPauliSum(...) \
1065 _WARN_FUNC_RENAMED("applyPauliSum(inQureg, ..., outQureg)", "leftapplyPauliStrSum(outQureg, PauliStrSum)") \
1066 _applyPauliSum(__VA_ARGS__)
1073#define applyPauliHamil(...) \
1074 _WARN_FUNC_RENAMED("applyPauliHamil(inQureg, PauliHamil, outQureg)", "leftapplyPauliStrSum(qureg, PauliStrSum, workspace)") \
1075 _applyPauliHamil(__VA_ARGS__)
1079#define compactUnitary(q, t, a, b) \
1080 _WARN_FUNC_RENAMED( \
1081 "compactUnitary(qureg, t, a, b)", \
1082 "applyCompMatr1(qureg, t, getInlineCompMatr1({{a,-conj(b)},{b,conj(a)}}))") \
1083 applyCompMatr1(q, t, getInlineCompMatr1({ \
1084 {_GET_QCOMP_FROM_COMPLEX_STRUCT(a), - conj(_GET_QCOMP_FROM_COMPLEX_STRUCT(b))}, \
1085 {_GET_QCOMP_FROM_COMPLEX_STRUCT(b), conj(_GET_QCOMP_FROM_COMPLEX_STRUCT(a))}} ))
1087#define controlledCompactUnitary(q, c, t, a, b) \
1088 _WARN_FUNC_RENAMED( \
1089 "controlledCompactUnitary(qureg, c, t, a, b)", \
1090 "applyControlledCompMatr1(qureg, c, t, getInlineCompMatr1({{a,-conj(b)},{b,conj(a)}}))") \
1091 applyControlledCompMatr1(q, c, t, getInlineCompMatr1({ \
1092 {_GET_QCOMP_FROM_COMPLEX_STRUCT(a), - conj(_GET_QCOMP_FROM_COMPLEX_STRUCT(b))}, \
1093 {_GET_QCOMP_FROM_COMPLEX_STRUCT(b), conj(_GET_QCOMP_FROM_COMPLEX_STRUCT(a))}} ))
1097#define unitary(qureg, targ, ...) \
1098 _WARN_FUNC_RENAMED("unitary()", "applyCompMatr1()") \
1099 applyCompMatr1(qureg, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__))
1101#define controlledUnitary(qureg, ctrl, targ, ...) \
1102 _WARN_FUNC_RENAMED("controlledUnitary()", "applyControlledCompMatr1()") \
1103 applyControlledCompMatr1(qureg, ctrl, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__))
1105#define multiControlledUnitary(qureg, ctrls, numctrls, targ, ...) \
1106 _WARN_FUNC_RENAMED("multiControlledUnitary()", "applyMultiControlledCompMatr1()") \
1107 applyMultiControlledCompMatr1(qureg, ctrls, numctrls, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__))
1109#define multiStateControlledUnitary(qureg, ctrls, states, numctrls, targ, ...) \
1110 _WARN_FUNC_RENAMED("multiStateControlledUnitary()", "applyMultiStateControlledCompMatr1()") \
1111 applyMultiStateControlledCompMatr1(qureg, ctrls, states, numctrls, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__))
1113#define twoQubitUnitary(qureg, t1, t2, ...) \
1114 _WARN_FUNC_RENAMED("twoQubitUnitary()", "applyCompMatr2()") \
1115 applyCompMatr2(qureg, t1, t2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__))
1117#define controlledTwoQubitUnitary(qureg, c, t1, t2, ...) \
1118 _WARN_FUNC_RENAMED("controlledTwoQubitUnitary()", "applyControlledCompMatr2()") \
1119 applyControlledCompMatr2(qureg, c, t1, t2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__))
1121#define multiControlledTwoQubitUnitary(qureg, ctrls, nctrls, t1, t2, ...) \
1122 _WARN_FUNC_RENAMED("multiControlledTwoQubitUnitary()", "applyMultiControlledCompMatr2()") \
1123 applyMultiControlledCompMatr2(qureg, ctrls, nctrls, t1, t2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__))
1125#define multiQubitUnitary(...) \
1126 _WARN_FUNC_RENAMED("multiQubitUnitary()", "applyCompMatr()") \
1127 applyCompMatr(__VA_ARGS__)
1129#define controlledMultiQubitUnitary(...) \
1130 _WARN_FUNC_RENAMED("controlledMultiQubitUnitary()", "applyControlledCompMatr()") \
1131 applyControlledCompMatr(__VA_ARGS__)
1133#define multiControlledMultiQubitUnitary(...) \
1134 _WARN_FUNC_RENAMED("multiControlledMultiQubitUnitary()", "applyMultiControlledCompMatr()") \
1135 applyMultiControlledCompMatr(__VA_ARGS__)
1139#define applyMatrix2(qureg, targ, ...) \
1140 _WARN_FUNC_RENAMED("applyMatrix2()", "leftapplyCompMatr1()") \
1141 leftapplyCompMatr1(qureg, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__))
1143#define applyMatrix4(qureg, targ1, targ2, ...) \
1144 _WARN_FUNC_RENAMED("applyMatrix4()", "leftapplyCompMatr2()") \
1145 leftapplyCompMatr2(qureg, targ1, targ2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__))
1147#define applyMatrixN(...) \
1148 _WARN_FUNC_RENAMED("applyMatrixN()", "leftapplyCompMatr()") \
1149 leftapplyCompMatr(__VA_ARGS__)
1153static inline void _applyGateMatrixN(
Qureg qureg,
int* targs,
int numTargs,
CompMatr u) {
1160#define applyGateMatrixN(...) \
1161 _WARN_GENERAL_MSG( \
1162 "The QuEST function 'applyGateMatrixN()' is deprecated. To achieve the same thing, disable " \
1163 "numerical validation via 'setQuESTValidationEpsilon(0)' before calling 'applyCompMatr()'. You can " \
1164 "save the existing epsilon via 'getQuESTValidationEpsilon()' to thereafter restore. This procedure " \
1165 "has been performed here automatically.") \
1166 _applyGateMatrixN(__VA_ARGS__)
1168static inline void _applyMultiControlledGateMatrixN(
Qureg qureg,
int* ctrls,
int numCtrls,
int* targs,
int numTargs,
CompMatr u) {
1175#define applyMultiControlledGateMatrixN(...) \
1176 _WARN_GENERAL_MSG( \
1177 "The QuEST function 'applyMultiControlledGateMatrixN()' is deprecated. To achieve the same thing, disable " \
1178 "numerical validation via 'setQuESTValidationEpsilon(0)' before calling 'applyMultiControlledCompMatr()'. You can " \
1179 "save the existing epsilon via 'getQuESTValidationEpsilon()' to thereafter restore. This procedure has been " \
1180 "performed here automatically.") \
1181 _applyMultiControlledGateMatrixN(__VA_ARGS__)
1185#define pauliX(...) \
1186 _WARN_FUNC_RENAMED("pauliX()", "applyPauliX()") \
1187 applyPauliX(__VA_ARGS__)
1189#define pauliY(...) \
1190 _WARN_FUNC_RENAMED("pauliY()", "applyPauliY()") \
1191 applyPauliY(__VA_ARGS__)
1193#define pauliZ(...) \
1194 _WARN_FUNC_RENAMED("pauliZ()", "applyPauliZ()") \
1195 applyPauliZ(__VA_ARGS__)
1197#define controlledPauliX(...) \
1198 _WARN_FUNC_RENAMED("controlledPauliX()", "applyControlledPauliX()") \
1199 applyControlledPauliX(__VA_ARGS__)
1201#define controlledPauliY(...) \
1202 _WARN_FUNC_RENAMED("controlledPauliY()", "applyControlledPauliY()") \
1203 applyControlledPauliY(__VA_ARGS__)
1205#define controlledPauliZ(...) \
1206 _WARN_FUNC_RENAMED("controlledPauliZ()", "applyControlledPauliZ()") \
1207 applyControlledPauliZ(__VA_ARGS__)
1211#define rotateX(...) \
1212 _WARN_FUNC_RENAMED("rotateX()", "applyRotateX()") \
1213 applyRotateX(__VA_ARGS__)
1215#define rotateY(...) \
1216 _WARN_FUNC_RENAMED("rotateY()", "applyRotateY()") \
1217 applyRotateY(__VA_ARGS__)
1219#define rotateZ(...) \
1220 _WARN_FUNC_RENAMED("rotateZ()", "applyRotateZ()") \
1221 applyRotateZ(__VA_ARGS__)
1223#define rotateAroundAxis(q, t, a, v) \
1224 _WARN_FUNC_RENAMED( \
1225 "rotateAroundAxis(Qureg, int, qreal, Vector)", \
1226 "applyRotateAroundAxis(Qureg, int, qreal, qreal vx, qreal vy, qreal vz)") \
1227 applyRotateAroundAxis(q, t, a, v.x, v.y, v.z)
1229#define controlledRotateX(...) \
1230 _WARN_FUNC_RENAMED("controlledRotateX()", "applyControlledRotateX()") \
1231 applyControlledRotateX(__VA_ARGS__)
1233#define controlledRotateY(...) \
1234 _WARN_FUNC_RENAMED("controlledRotateY()", "applyControlledRotateY()") \
1235 applyControlledRotateY(__VA_ARGS__)
1237#define controlledRotateZ(...) \
1238 _WARN_FUNC_RENAMED("controlledRotateZ()", "applyControlledRotateZ()") \
1239 applyControlledRotateZ(__VA_ARGS__)
1241#define controlledRotateAroundAxis(q, c, t, a, v) \
1242 _WARN_FUNC_RENAMED( \
1243 "controlledRotateAroundAxis(Qureg, int, int, qreal, Vector)", \
1244 "applyControlledRotateAroundAxis(Qureg, int, int, qreal, qreal vx, qreal vy, qreal vz)") \
1245 applyControlledRotateAroundAxis(q, c, t, a, v.x, v.y, v.z)
1249#define hadamard(...) \
1250 _WARN_FUNC_RENAMED("hadamard()", "applyHadamard()") \
1251 applyHadamard(__VA_ARGS__)
1253#define controlledNot(...) \
1254 _WARN_FUNC_RENAMED("controlledNot()", "applyControlledPauliX()") \
1255 applyControlledPauliX(__VA_ARGS__)
1259#define multiRotateZ(...) \
1260 _WARN_FUNC_RENAMED("multiRotateZ()", "applyPhaseGadget()") \
1261 applyPhaseGadget(__VA_ARGS__)
1263#define multiControlledMultiRotateZ(...) \
1264 _WARN_FUNC_RENAMED("multiControlledMultiRotateZ()", "applyMultiControlledPhaseGadget()") \
1265 applyMultiControlledPhaseGadget(__VA_ARGS__)
1267static inline void _multiRotatePauli(
Qureg qureg,
int* targs, _NoWarnPauliOpType* enums,
int numTargs, qreal angle) {
1269 for (
int i=0; i<numTargs && i<100; i++)
1270 codes[i] = enums[i];
1273#define multiRotatePauli(...) \
1274 _WARN_FUNC_RENAMED( \
1275 "multiRotatePauli(qureg, targs, paulis, numTargs, angle)", \
1276 "applyPauliGadget(qureg, getPauliStr(paulis, targs, numTargs), angle)") \
1277 _multiRotatePauli(__VA_ARGS__)
1279static inline void _multiControlledMultiRotatePauli(
Qureg qureg,
int* ctrls,
int numCtrls,
int* targs, _NoWarnPauliOpType* enums,
int numTargs, qreal angle) {
1281 for (
int i=0; i<numTargs && i<100; i++)
1282 codes[i] = enums[i];
1285#define multiControlledMultiRotatePauli(...) \
1286 _WARN_FUNC_RENAMED( \
1287 "multiControlledMultiRotatePauli(qureg, ctrls, numCtrls, targs, paulis, numTargs, angle)", \
1288 "applyMultiControlledPauliGadget(qureg, ctrls, numCtrls, getPauliStr(paulis, targs, numTargs), angle)") \
1289 _multiControlledMultiRotatePauli(__VA_ARGS__)
1291#define multiQubitNot(...) \
1292 _WARN_FUNC_RENAMED("multiQubitNot()", "applyMultiQubitNot()") \
1293 applyMultiQubitNot(__VA_ARGS__)
1295#define multiControlledMultiQubitNot(...) \
1296 _WARN_FUNC_RENAMED("multiControlledMultiQubitNot()", "applyMultiControlledMultiQubitNot()") \
1297 applyMultiControlledMultiQubitNot(__VA_ARGS__)
1301#define collapseToOutcome(...) \
1302 _WARN_FUNC_RENAMED("collapseToOutcome()", "applyForcedQubitMeasurement()") \
1303 applyForcedQubitMeasurement(__VA_ARGS__)
1305#define measure(...) \
1306 _WARN_FUNC_RENAMED("measure()", "applyQubitMeasurement()") \
1307 applyQubitMeasurement(__VA_ARGS__)
1309#define measureWithStats(...) \
1310 _WARN_FUNC_RENAMED("measureWithStats()", "applyQubitMeasurementAndGetProb()") \
1311 applyQubitMeasurementAndGetProb(__VA_ARGS__)
1313#define applyProjector(...) \
1314 _WARN_FUNC_RENAMED("applyProjector()", "applyQubitProjector()") \
1315 applyQubitProjector(__VA_ARGS__)
1319#define mixPauli(...) \
1320 _WARN_FUNC_RENAMED("mixPauli()", "mixPaulis()") \
1321 mixPaulis(__VA_ARGS__)
1323#define mixDensityMatrix(outQureg, prob, inQureg) \
1324 _WARN_FUNC_RENAMED("mixDensityMatrix(outQureg, prob, inQureg)", "mixQureg(outQureg, inQureg, prob)") \
1325 mixQureg(outQureg, inQureg, prob)
1329#define swapGate(...) \
1330 _WARN_FUNC_RENAMED("swapGate()", "applySwap()") \
1331 applySwap(__VA_ARGS__)
1333#define sqrtSwapGate(...) \
1334 _WARN_FUNC_RENAMED("sqrtSwapGate()", "applySqrtSwap()") \
1335 applySqrtSwap(__VA_ARGS__)
1339#define applyTrotterCircuit(...) \
1340 _WARN_FUNC_RENAMED("applyTrotterCircuit(..., PauliHamil, ...)", "applyTrotterizedPauliStrSumGadget(..., PauliStrSum, ...)") \
1341 applyTrotterizedPauliStrSumGadget(__VA_ARGS__)
1343#define applyFullQFT(...) \
1344 _WARN_FUNC_RENAMED("applyFullQFT()", "applyFullQuantumFourierTransform()") \
1345 applyFullQuantumFourierTransform(__VA_ARGS__, false)
1347#define applyQFT(...) \
1348 _WARN_FUNC_RENAMED("applyQFT()", "applyQuantumFourierTransform()") \
1349 applyQuantumFourierTransform(__VA_ARGS__, false)
1353#define seedQuESTDefault(...) \
1354 _WARN_FUNC_RENAMED("seedQuESTDefault(QuESTEnv)", "setQuESTSeedsToDefault()") \
1355 setQuESTSeedsToDefault()
1357#define seedQuEST(env, seeds, numSeeds) \
1358 _WARN_FUNC_RENAMED("seedQuEST(QuESTEnv, unsigned long int*, int)", "setQuESTSeeds(unsigned*, int)") \
1359 setQuESTSeeds(seeds, numSeeds)
qreal calcExpecPauliStrSum(Qureg qureg, PauliStrSum sum)
qreal calcExpecPauliStr(Qureg qureg, PauliStr str)
KrausMap createKrausMap(int numQubits, int numOperators)
void destroyKrausMap(KrausMap map)
void setKrausMap(KrausMap map, qcomp ***matrices)
qreal getQuESTValidationEpsilon()
void setQuESTValidationEpsilon(qreal eps)
void mixKrausMap(Qureg qureg, int *targets, int numTargets, KrausMap map)
void setQuregToWeightedSum(Qureg out, qcomp *coeffs, Qureg *in, int numIn)
void setQuregToClone(Qureg outQureg, Qureg inQureg)
void leftapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace)
void applyCompMatr(Qureg qureg, int *targets, int numTargets, CompMatr matrix)
void applyMultiControlledCompMatr(Qureg qureg, int *controls, int numControls, int *targets, int numTargets, CompMatr matrix)
void applyDiagMatr(Qureg qureg, int *targets, int numTargets, DiagMatr matrix)
void applyMultiControlledPauliGadget(Qureg qureg, int *controls, int numControls, PauliStr str, qreal angle)
void applyPauliGadget(Qureg qureg, PauliStr str, qreal angle)
PauliStrSum createPauliStrSum(PauliStr *strings, qcomp *coeffs, qindex numTerms)
PauliStr getPauliStr(const char *paulis, int *indices, int numPaulis)
void destroyPauliStrSum(PauliStrSum sum)