10#include "quest/include/types.h"
11#include "quest/include/qureg.h"
12#include "quest/include/channels.h"
14#include "quest/src/core/validation.hpp"
15#include "quest/src/core/localiser.hpp"
16#include "quest/src/core/utilities.hpp"
32 validate_quregFields(qureg, __func__);
33 validate_target(qureg, qubit, __func__);
34 validate_oneQubitDepashingProb(prob, __func__);
40 validate_quregIsDensityMatrix(qureg, __func__);
42 localiser_densmatr_oneQubitDephasing(qureg, qubit, prob);
47 validate_quregFields(qureg, __func__);
48 validate_twoTargets(qureg, qubit1, qubit2, __func__);
49 validate_twoQubitDepashingProb(prob, __func__);
55 validate_quregIsDensityMatrix(qureg, __func__);
57 localiser_densmatr_twoQubitDephasing(qureg, qubit1, qubit2, prob);
62 validate_quregFields(qureg, __func__);
63 validate_target(qureg, qubit, __func__);
64 validate_oneQubitDepolarisingProb(prob, __func__);
70 validate_quregIsDensityMatrix(qureg, __func__);
72 localiser_densmatr_oneQubitDepolarising(qureg, qubit, prob);
77 validate_quregFields(qureg, __func__);
78 validate_twoTargets(qureg, qubit1, qubit2, __func__);
79 validate_twoQubitDepolarisingProb(prob, __func__);
85 validate_quregIsDensityMatrix(qureg, __func__);
87 localiser_densmatr_twoQubitDepolarising(qureg, qubit1, qubit2, prob);
92 validate_quregFields(qureg, __func__);
93 validate_target(qureg, qubit, __func__);
94 validate_oneQubitDampingProb(prob, __func__);
100 validate_quregIsDensityMatrix(qureg, __func__);
102 localiser_densmatr_oneQubitDamping(qureg, qubit, prob);
107 validate_quregFields(qureg, __func__);
108 validate_target(qureg, qubit, __func__);
109 validate_oneQubitPauliChannelProbs(probX, probY, probZ, __func__);
112 if (probX == 0 && probY == 0 && probZ == 0)
115 validate_quregIsDensityMatrix(qureg, __func__);
117 localiser_densmatr_oneQubitPauliChannel(qureg, qubit, probX, probY, probZ);
122 validate_quregFields(qureg, __func__);
123 validate_quregIsDensityMatrix(qureg, __func__);
124 validate_targets(qureg, qubits, numQubits, __func__);
125 validate_mixedAmpsFitInNode(qureg, 2*numQubits, __func__);
126 validate_krausMapIsCPTP(map, __func__);
127 validate_krausMapMatchesTargets(map, numQubits, __func__);
129 localiser_densmatr_krausMap(qureg, map, util_getVector(qubits, numQubits));
134 validate_quregFields(outQureg, __func__);
135 validate_quregFields(inQureg, __func__);
136 validate_probability(inProb, __func__);
137 validate_quregsCanBeMixed(outQureg, inQureg, __func__);
139 qreal outProb = 1 - inProb;
140 localiser_densmatr_mixQureg(outProb, outQureg, inProb, inQureg);
145 validate_quregFields(qureg, __func__);
146 validate_targets(qureg, targets, numTargets, __func__);
147 validate_superOpFields(superop, __func__);
148 validate_superOpIsSynced(superop, __func__);
149 validate_superOpDimMatchesTargs(superop, numTargets, __func__);
150 validate_mixedAmpsFitInNode(qureg, 2*numTargets, __func__);
152 localiser_densmatr_superoperator(qureg, superop, util_getVector(targets, numTargets));
172 mixKrausMap(qureg, targets.data(), targets.size(), map);
176 mixSuperOp(qureg, targets.data(), targets.size(), superop);
void mixDepolarising(Qureg qureg, int qubit, qreal prob)
void mixTwoQubitDephasing(Qureg qureg, int qubit1, int qubit2, qreal prob)
void mixQureg(Qureg outQureg, Qureg inQureg, qreal inProb)
void mixDamping(Qureg qureg, int qubit, qreal prob)
void mixPaulis(Qureg qureg, int qubit, qreal probX, qreal probY, qreal probZ)
void mixKrausMap(Qureg qureg, int *qubits, int numQubits, KrausMap map)
void mixSuperOp(Qureg qureg, int *targets, int numTargets, SuperOp superop)
void mixTwoQubitDepolarising(Qureg qureg, int qubit1, int qubit2, qreal prob)
void mixDephasing(Qureg qureg, int qubit, qreal prob)