50#include "quest/include/types.h"
276#if defined(__cplusplus)
295#elif !defined(_MSC_VER)
304 extern void _validateParamsToSetKrausMapFromArr(
KrausMap map);
306 extern void _validateParamsToSetSuperOpFromArr(
SuperOp op);
310 static inline void _setKrausMapFromArr(
KrausMap map, qcomp matrices[map.numMatrices][map.numRows][map.numRows]) {
311 _validateParamsToSetKrausMapFromArr(map);
314 qcomp* rows[map.numMatrices][map.numRows];
315 qcomp** ptrs[map.numMatrices];
318 for (
int n=0; n<map.numMatrices; n++) {
319 for (qindex r=0; r<map.numRows; r++)
320 rows[n][r] = matrices[n][r];
328 static inline void _setSuperOpFromArr(
SuperOp op, qcomp matrix[op.numRows][op.numRows]) {
329 _validateParamsToSetSuperOpFromArr(op);
332 qcomp* ptrs[op.numRows];
335 for (qindex r=0; r<op.numRows; r++)
346 #define setKrausMap(map, ...) \
347 _Generic((__VA_ARGS__), \
348 qcomp*** : setKrausMap, \
349 default : _setKrausMapFromArr \
350 )((map), (__VA_ARGS__))
353 #define setSuperOp(op, ...) \
354 _Generic((__VA_ARGS__), \
355 qcomp** : setSuperOp, \
356 default : _setSuperOpFromArr \
357 )((op), (__VA_ARGS__))
400#if defined(__cplusplus)
419#elif !defined(_MSC_VER)
432 extern void _validateParamsToSetInlineKrausMap(
KrausMap map,
int numQb,
int numOps);
434 extern void _validateParamsToSetInlineSuperOp(
SuperOp op,
int numQb);
438 static inline void _setInlineKrausMap(
KrausMap map,
int numQb,
int numOps, qcomp elems[numOps][1<<numQb][1<<numQb]) {
439 _validateParamsToSetInlineKrausMap(map, numQb, numOps);
440 _setKrausMapFromArr(map, elems);
444 static inline void _setInlineSuperOp(
SuperOp op,
int numQb, qcomp elems[1<<(2*numQb)][1<<(2*numQb)] ) {
445 _validateParamsToSetInlineSuperOp(op, numQb);
446 _setSuperOpFromArr(op, elems);
451 #define setInlineKrausMap(map, numQb, numOps, ...) \
452 _setInlineKrausMap((map), (numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
456 #define setInlineSuperOp(matr, numQb, ...) \
457 _setInlineSuperOp((matr), (numQb), (qcomp[1<<(2*(numQb))][1<<(2*(numQb))]) __VA_ARGS__)
492#if defined(__cplusplus)
509#elif !defined(_MSC_VER)
520 extern void _validateParamsToCreateInlineKrausMap(
int numQb,
int numOps);
522 extern void _validateParamsToCreateInlineSuperOp(
int numQb);
526 static inline KrausMap _createInlineKrausMap(
int numQb,
int numOps, qcomp matrices[numOps][1<<numQb][1<<numQb]) {
527 _validateParamsToCreateInlineKrausMap(numQb, numOps);
529 _setKrausMapFromArr(out, matrices);
534 static inline SuperOp _createInlineSuperOp(
int numQb, qcomp matrix[1<<numQb][1<<numQb]) {
535 _validateParamsToCreateInlineSuperOp(numQb);
537 _setSuperOpFromArr(out, matrix);
543 #define createInlineKrausMap(numQb, numOps, ...) \
544 _createInlineKrausMap((numQb), (numOps), (qcomp[(numOps)][1<<(numQb)][1<<(numQb)]) __VA_ARGS__)
547 #define createInlineSuperOp(numQb, ...) \
548 _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)