50#include "quest/include/types.h"
320#if defined(__cplusplus)
349#elif !defined(_MSC_VER)
358 extern void _validateParamsToSetKrausMapFromArr(
KrausMap map);
360 extern void _validateParamsToSetSuperOpFromArr(
SuperOp op);
364 static inline void _setKrausMapFromArr(
KrausMap map, qcomp matrices[map.numMatrices][map.numRows][map.numRows]) {
365 _validateParamsToSetKrausMapFromArr(map);
368 qcomp* rows[map.numMatrices][map.numRows];
369 qcomp** ptrs[map.numMatrices];
372 for (
int n=0; n<map.numMatrices; n++) {
373 for (qindex r=0; r<map.numRows; r++)
374 rows[n][r] = matrices[n][r];
382 static inline void _setSuperOpFromArr(
SuperOp op, qcomp matrix[op.numRows][op.numRows]) {
383 _validateParamsToSetSuperOpFromArr(op);
386 qcomp* ptrs[op.numRows];
389 for (qindex r=0; r<op.numRows; r++)
400 #define setKrausMap(map, ...) \
401 _Generic((__VA_ARGS__), \
402 qcomp*** : setKrausMap, \
403 default : _setKrausMapFromArr \
404 )((map), (__VA_ARGS__))
407 #define setSuperOp(op, ...) \
408 _Generic((__VA_ARGS__), \
409 qcomp** : setSuperOp, \
410 default : _setSuperOpFromArr \
411 )((op), (__VA_ARGS__))
467#if defined(__cplusplus)
498#elif !defined(_MSC_VER)
511 extern void _validateParamsToSetInlineKrausMap(
KrausMap map,
int numQb,
int numOps);
513 extern void _validateParamsToSetInlineSuperOp(
SuperOp op,
int numQb);
517 static inline void _setInlineKrausMap(
KrausMap map,
int numQb,
int numOps, qcomp elems[numOps][1<<numQb][1<<numQb]) {
518 _validateParamsToSetInlineKrausMap(map, numQb, numOps);
519 _setKrausMapFromArr(map, elems);
523 static inline void _setInlineSuperOp(
SuperOp op,
int numQb, qcomp elems[1<<(2*numQb)][1<<(2*numQb)] ) {
524 _validateParamsToSetInlineSuperOp(op, numQb);
525 _setSuperOpFromArr(op, elems);
530 #define setInlineKrausMap(map, numQb, numOps, ...) \
531 _setInlineKrausMap((map), (numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
534 #define setInlineSuperOp(matr, numQb, ...) \
535 _setInlineSuperOp((matr), (numQb), (qcomp[1<<(2*(numQb))][1<<(2*(numQb))]) __VA_ARGS__)
585#if defined(__cplusplus)
616#elif !defined(_MSC_VER)
627 extern void _validateParamsToCreateInlineKrausMap(
int numQb,
int numOps);
629 extern void _validateParamsToCreateInlineSuperOp(
int numQb);
633 static inline KrausMap _createInlineKrausMap(
int numQb,
int numOps, qcomp matrices[numOps][1<<numQb][1<<numQb]) {
634 _validateParamsToCreateInlineKrausMap(numQb, numOps);
636 _setKrausMapFromArr(out, matrices);
641 static inline SuperOp _createInlineSuperOp(
int numQb, qcomp matrix[1<<numQb][1<<numQb]) {
642 _validateParamsToCreateInlineSuperOp(numQb);
644 _setSuperOpFromArr(out, matrix);
650 #define createInlineKrausMap(numQb, numOps, ...) \
651 _createInlineKrausMap((numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
654 #define createInlineSuperOp(numQb, ...) \
655 _createInlineSuperOp((numQb), (qcomp[1<<(2*(numQb))][1<<(2*(numQb))]) __VA_ARGS__)
KrausMap createInlineKrausMap(int numQubits, int numOperators, std::vector< std::vector< std::vector< qcomp > > > matrices)
SuperOp createInlineSuperOp(int numQubits, std::vector< std::vector< qcomp > > 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 setInlineSuperOp(SuperOp op, int numQb, std::vector< std::vector< qcomp > > matrix)
void setInlineKrausMap(KrausMap map, int numQb, int numOps, std::vector< std::vector< std::vector< qcomp > > > matrices)
void setSuperOp(SuperOp op, qcomp **matrix)
void setKrausMap(KrausMap map, qcomp ***matrices)
void syncSuperOp(SuperOp op)
void syncKrausMap(KrausMap map)