@@ -252,6 +252,34 @@ void setQuregToReducedDensityMatrix(Qureg out, Qureg in, int* retainQubits, int
252252}
253253
254254
255+ void setQuregToWeightedSum (Qureg out, qcomp* coeffs, Qureg* in, int numIn) {
256+ validate_quregFields (out, __func__);
257+ validate_numQuregsInSum (numIn, __func__);
258+ validate_quregsCanBeSummed (out, in, numIn, __func__); // also validates all init
259+
260+ auto coeffVec = util_getVector (coeffs, numIn);
261+ auto inVec = util_getVector (in, numIn);
262+ localiser_statevec_setQuregToWeightedSum (out, coeffVec, inVec);
263+ }
264+
265+
266+ void setQuregToMixture (Qureg out, qreal* probs, Qureg* in, int numIn) {
267+ validate_quregFields (out, __func__);
268+ validate_quregIsDensityMatrix (out, __func__);
269+ validate_numQuregsInSum (numIn, __func__);
270+ validate_quregsCanBeMixed (out, in, numIn, __func__); // also validates all init & densmatr
271+ validate_probabilities (probs, numIn, __func__);
272+
273+ // convert probs to complex (assume this alloc never fails)
274+ vector<qcomp> coeffVec (numIn);
275+ for (int i=0 ; i<numIn; i++)
276+ coeffVec[i] = getQcomp (probs[i], 0 );
277+
278+ auto inVec = util_getVector (in, numIn);
279+ localiser_statevec_setQuregToWeightedSum (out, coeffVec, inVec);
280+ }
281+
282+
255283} // end de-mangler
256284
257285
@@ -296,3 +324,15 @@ void setQuregToPartialTrace(Qureg out, Qureg in, vector<int> traceOutQubits) {
296324void setQuregToReducedDensityMatrix (Qureg out, Qureg in, vector<int > retainQubits) {
297325 setQuregToReducedDensityMatrix (out, in, retainQubits.data (), retainQubits.size ());
298326}
327+
328+ void setQuregToWeightedSum (Qureg out, vector<qcomp> coeffs, vector<Qureg> in) {
329+ validate_numQuregsMatchesCoeffs (in.size (), coeffs.size (), __func__);
330+
331+ setQuregToWeightedSum (out, coeffs.data (), in.data (), in.size ());
332+ }
333+
334+ void setQuregToMixture (Qureg out, vector<qreal> probs, vector<Qureg> in) {
335+ validate_numQuregsMatchesProbs (in.size (), probs.size (), __func__);
336+
337+ setQuregToMixture (out, probs.data (), in.data (), in.size ());
338+ }
0 commit comments