29#include "quest/include/types.h"
30#include "quest/include/paulis.h"
789extern void _validateNewNestedElemsPtrNotNull(qcomp** ptrs,
int numQubits,
const char* caller);
792extern void _validateNewElemsPtrNotNull(qcomp* ptr,
const char* caller);
812 _validateNewNestedElemsPtrNotNull(in, 1, __func__);
818 for (
int r=0; r<2; r++)
819 for (
int c=0; c<2; c++)
820 out.
elems[r][c] = in[r][c];
838 _validateNewNestedElemsPtrNotNull(in, 2, __func__);
844 for (
int r=0; r<4; r++)
845 for (
int c=0; c<4; c++)
846 out.
elems[r][c] = in[r][c];
865 _validateNewElemsPtrNotNull(in, __func__);
871 for (
int i=0; i<2; i++)
872 out.
elems[i] = in[i];
890 _validateNewElemsPtrNotNull(in, __func__);
896 for (
int i=0; i<4; i++)
897 out.
elems[i] = in[i];
923static inline CompMatr1 _getCompMatr1FromArr(qcomp in[2][2]) {
925 qcomp* rowPtrs[] = {in[0], in[1]};
930static inline CompMatr2 _getCompMatr2FromArr(qcomp in[4][4]) {
932 qcomp* rowPtrs[] = {in[0], in[1], in[2], in[3]};
1048 #define getCompMatr1(...) \
1049 _Generic((__VA_ARGS__), \
1050 qcomp** : getCompMatr1, \
1051 default : _getCompMatr1FromArr \
1056 #define getCompMatr2(...) \
1057 _Generic((__VA_ARGS__), \
1058 qcomp** : getCompMatr2, \
1059 default : _getCompMatr2FromArr \
1088 #define getInlineCompMatr1(...) \
1089 getCompMatr1(__VA_ARGS__)
1092 #define getInlineCompMatr2(...) \
1093 getCompMatr2(__VA_ARGS__)
1096 #define getInlineDiagMatr1(...) \
1097 getDiagMatr1(__VA_ARGS__)
1100 #define getInlineDiagMatr2(...) \
1101 getDiagMatr2(__VA_ARGS__)
1109 #define getInlineCompMatr1(...) \
1110 _getCompMatr1FromArr((qcomp[2][2]) __VA_ARGS__)
1113 #define getInlineCompMatr2(...) \
1114 _getCompMatr2FromArr((qcomp[4][4]) __VA_ARGS__)
1117 #define getInlineDiagMatr1(...) \
1118 getDiagMatr1((qcomp[2]) __VA_ARGS__)
1121 #define getInlineDiagMatr2(...) \
1122 getDiagMatr2((qcomp[4]) __VA_ARGS__)
1370#if defined(__cplusplus)
1415#elif !defined(_MSC_VER)
1424 extern void _validateParamsToSetCompMatrFromArr(
CompMatr matr);
1430 _validateParamsToSetCompMatrFromArr(matr);
1436 for (qindex r=0; r<matr.
numRows; r++)
1449 #define setCompMatr(matr, ...) \
1450 _Generic((__VA_ARGS__), \
1451 qcomp** : setCompMatr, \
1452 default : _setCompMatrFromArr \
1453 )((matr), (__VA_ARGS__))
1497#if defined(__cplusplus)
1513 void setInlineCompMatr(
CompMatr matr,
int numQb, std::vector<std::vector<qcomp>> in);
1525 void setInlineDiagMatr(
DiagMatr matr,
int numQb, std::vector<qcomp> in);
1537 void setInlineFullStateDiagMatr(
FullStateDiagMatr matr, qindex startInd, qindex numElems, std::vector<qcomp> in);
1540#elif !defined(_MSC_VER)
1553 extern void _validateParamsToSetInlineCompMatr(
CompMatr matr,
int numQb);
1555 extern void _validateParamsToSetInlineDiagMatr(
DiagMatr matr,
int numQb);
1557 extern void _validateParamsToSetInlineFullStateDiagMatr(
FullStateDiagMatr matr, qindex startInd, qindex numElems);
1561 static inline void _setInlineCompMatr(
CompMatr matr,
int numQb, qcomp elems[1<<numQb][1<<numQb]) {
1562 _validateParamsToSetInlineCompMatr(matr, numQb);
1563 _setCompMatrFromArr(matr, elems);
1567 static inline void _setInlineDiagMatr(
DiagMatr matr,
int numQb, qcomp elems[1<<numQb]) {
1568 _validateParamsToSetInlineDiagMatr(matr, numQb);
1573 static inline void _setInlineFullStateDiagMatr(
FullStateDiagMatr matr, qindex startInd, qindex numElems, qcomp elems[numElems]) {
1574 _validateParamsToSetInlineFullStateDiagMatr(matr, startInd, numElems);
1584 #define setInlineCompMatr(matr, numQb, ...) \
1585 _setInlineCompMatr((matr), (numQb), (qcomp[1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
1588 #define setInlineDiagMatr(matr, numQb, ...) \
1589 _setInlineDiagMatr((matr), (numQb), (qcomp[1<<(numQb)]) __VA_ARGS__)
1592 #define setInlineFullStateDiagMatr(matr, startInd, numElems, ...) \
1593 _setInlineFullStateDiagMatr((matr), (startInd), (numElems), (qcomp[(numElems)]) __VA_ARGS__)
1608 void setInlineCompMatr(
CompMatr matr,
int numQb, {{ matrix }});
1620 void setInlineDiagMatr(
DiagMatr matr,
int numQb, { list });
1632 void setInlineFullStateDiagMatr(
FullStateDiagMatr matr, qindex startInd, qindex numElems, { list });
1654 extern void _validateParamsToSetInlineDiagMatr(
DiagMatr matr,
int numQb);
1656 extern void _validateParamsToSetInlineFullStateDiagMatr(
FullStateDiagMatr matr, qindex startInd, qindex numElems);
1660 #define setInlineDiagMatr(matr, numQb, ...) \
1662 _validateParamsToSetInlineDiagMatr((matr), (numQb)); \
1663 setDiagMatr((matr), (numQb), (qcomp[1<<(numQb)]) __VA_ARGS__); \
1668 #define setInlineFullStateDiagMatr(matr, startInd, numElems, ...) \
1670 _validateParamsToSetInlineFullStateDiagMatr((matr), (startInd), (numElems)); \
1671 setFullStateDiagMatr((matr), (startInd), (elems), (numElems)); \
1696#if defined(__cplusplus)
1709 CompMatr createInlineCompMatr(
int numQb, std::vector<std::vector<qcomp>> elems);
1720 DiagMatr createInlineDiagMatr(
int numQb, std::vector<qcomp> elems);
1723#elif !defined(_MSC_VER)
1734 extern void _validateParamsToCreateInlineCompMatr(
int numQb);
1736 extern void _validateParamsToCreateInlineDiagMatr(
int numQb);
1740 static inline CompMatr _createInlineCompMatr(
int numQb, qcomp elems[1<<numQb][1<<numQb]) {
1741 _validateParamsToCreateInlineCompMatr(numQb);
1743 _setCompMatrFromArr(out, elems);
1748 static inline DiagMatr _createInlineDiagMatr(
int numQb, qcomp elems[1<<numQb]) {
1749 _validateParamsToCreateInlineDiagMatr(numQb);
1757 #define createInlineCompMatr(numQb, ...) \
1758 _createInlineCompMatr((numQb), (qcomp[1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
1761 #define createInlineDiagMatr(numQb, ...) \
1762 _createInlineDiagMatr((numQb), (qcomp[1<<(numQb)]) __VA_ARGS__)
1776 CompMatr createInlineCompMatr(
int numQb, {{ matrix }});
FullStateDiagMatr createCustomFullStateDiagMatr(int numQubits, int useDistrib, int useGpuAccel, int useMultithread)
FullStateDiagMatr createFullStateDiagMatr(int numQubits)
CompMatr createCompMatr(int numQubits)
DiagMatr createDiagMatr(int numQubits)
FullStateDiagMatr createFullStateDiagMatrFromPauliStrSum(PauliStrSum in)
void destroyDiagMatr(DiagMatr matrix)
void destroyFullStateDiagMatr(FullStateDiagMatr matrix)
void destroyCompMatr(CompMatr matrix)
static CompMatr2 getCompMatr2(qcomp **in)
static CompMatr1 getCompMatr1(qcomp **in)
static DiagMatr2 getDiagMatr2(qcomp *in)
CompMatr1 getInlineCompMatr1({{ matrix }})
CompMatr2 getInlineCompMatr2({{ matrix }})
DiagMatr2 getInlineDiagMatr2({ list })
static DiagMatr1 getDiagMatr1(qcomp *in)
DiagMatr1 getInlineDiagMatr1({ list })
void reportCompMatr2(CompMatr2 matrix)
void reportDiagMatr1(DiagMatr1 matrix)
void reportCompMatr(CompMatr matrix)
void reportDiagMatr2(DiagMatr2 matrix)
void reportCompMatr1(CompMatr1 matrix)
void reportDiagMatr(DiagMatr matrix)
void reportFullStateDiagMatr(FullStateDiagMatr matr)
void setFullStateDiagMatrFromMultiDimLists(FullStateDiagMatr out, void *lists, int *numQubitsPerDim, int numDims)
void setDiagMatrFromMultiDimLists(DiagMatr out, void *lists, int *numQubitsPerDim, int numDims)
void setFullStateDiagMatrFromMultiVarFunc(FullStateDiagMatr out, qcomp(*func)(qindex *), int *numQubitsPerVar, int numVars, int areSigned)
void setDiagMatr(DiagMatr out, qcomp *in)
void setCompMatr(CompMatr matr, qcomp **vals)
void setFullStateDiagMatr(FullStateDiagMatr out, qindex startInd, qcomp *in, qindex numElems)
void setDiagMatrFromMultiVarFunc(DiagMatr out, qcomp(*func)(qindex *), int *numQubitsPerVar, int numVars, int areSigned)
void setFullStateDiagMatrFromPauliStrSum(FullStateDiagMatr out, PauliStrSum in)
void syncFullStateDiagMatr(FullStateDiagMatr matr)
void syncDiagMatr(DiagMatr matr)
void syncCompMatr(CompMatr matr)
int * isStrictlyNonNegative
int * isStrictlyNonNegative