50#include "quest/include/types.h"
653#if defined(__cplusplus)
682#elif !defined(_MSC_VER)
691 extern void _validateParamsToSetKrausMapFromArr(
KrausMap map);
693 extern void _validateParamsToSetSuperOpFromArr(
SuperOp op);
698 _validateParamsToSetKrausMapFromArr(map);
706 for (qindex r=0; r<map.
numRows; r++)
707 rows[n][r] = matrices[n][r];
716 _validateParamsToSetSuperOpFromArr(op);
722 for (qindex r=0; r<op.
numRows; r++)
733 #define setKrausMap(map, ...) \
734 _Generic((__VA_ARGS__), \
735 qcomp*** : setKrausMap, \
736 default : _setKrausMapFromArr \
737 )((map), (__VA_ARGS__))
740 #define setSuperOp(op, ...) \
741 _Generic((__VA_ARGS__), \
742 qcomp** : setSuperOp, \
743 default : _setSuperOpFromArr \
744 )((op), (__VA_ARGS__))
852#if defined(__cplusplus)
868 void setInlineKrausMap(
KrausMap map,
int numQb,
int numOps, std::vector<std::vector<std::vector<qcomp>>> matrices);
880 void setInlineSuperOp(
SuperOp op,
int numQb, std::vector<std::vector<qcomp>> matrix);
883#elif !defined(_MSC_VER)
896 extern void _validateParamsToSetInlineKrausMap(
KrausMap map,
int numQb,
int numOps);
898 extern void _validateParamsToSetInlineSuperOp(
SuperOp op,
int numQb);
902 static inline void _setInlineKrausMap(
KrausMap map,
int numQb,
int numOps, qcomp elems[numOps][1<<numQb][1<<numQb]) {
903 _validateParamsToSetInlineKrausMap(map, numQb, numOps);
904 _setKrausMapFromArr(map, elems);
908 static inline void _setInlineSuperOp(
SuperOp op,
int numQb, qcomp elems[1<<(2*numQb)][1<<(2*numQb)] ) {
909 _validateParamsToSetInlineSuperOp(op, numQb);
910 _setSuperOpFromArr(op, elems);
915 #define setInlineKrausMap(map, numQb, numOps, ...) \
916 _setInlineKrausMap((map), (numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
919 #define setInlineSuperOp(matr, numQb, ...) \
920 _setInlineSuperOp((matr), (numQb), (qcomp[1<<(2*(numQb))][1<<(2*(numQb))]) __VA_ARGS__)
962 void setInlineKrausMap(
KrausMap map,
int numQb,
int numOps, {{{ matrices }}});
999 void setInlineSuperOp(
SuperOp op,
int numQb, {{ matrix }});
1022#if defined(__cplusplus)
1037 KrausMap createInlineKrausMap(
int numQubits,
int numOperators, std::vector<std::vector<std::vector<qcomp>>> matrices);
1050 SuperOp createInlineSuperOp(
int numQubits, std::vector<std::vector<qcomp>> matrix);
1053#elif !defined(_MSC_VER)
1064 extern void _validateParamsToCreateInlineKrausMap(
int numQb,
int numOps);
1066 extern void _validateParamsToCreateInlineSuperOp(
int numQb);
1070 static inline KrausMap _createInlineKrausMap(
int numQb,
int numOps, qcomp matrices[numOps][1<<numQb][1<<numQb]) {
1071 _validateParamsToCreateInlineKrausMap(numQb, numOps);
1073 _setKrausMapFromArr(out, matrices);
1078 static inline SuperOp _createInlineSuperOp(
int numQb, qcomp matrix[1<<numQb][1<<numQb]) {
1079 _validateParamsToCreateInlineSuperOp(numQb);
1081 _setSuperOpFromArr(out, matrix);
1087 #define createInlineKrausMap(numQb, numOps, ...) \
1088 _createInlineKrausMap((numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
1091 #define createInlineSuperOp(numQb, ...) \
1092 _createInlineSuperOp((numQb), (qcomp[1<<(2*(numQb))][1<<(2*(numQb))]) __VA_ARGS__)
1139 KrausMap createInlineKrausMap(
int numQb,
int numOps, {{{ matrices }}});
1183 SuperOp createInlineSuperOp(
int numQb, {{ matrix }});
KrausMap createKrausMap(int numQubits, int numOperators)
SuperOp createSuperOp(int numQubits)
void destroySuperOp(SuperOp op)
void destroyKrausMap(KrausMap map)
void reportKrausMap(KrausMap map)
void reportSuperOp(SuperOp op)
void setSuperOp(SuperOp op, qcomp **matrix)
void setKrausMap(KrausMap map, qcomp ***matrices)
void syncSuperOp(SuperOp op)
void syncKrausMap(KrausMap map)